cookbooks/fb_init_sample/recipes/default.rb (112 lines of code) (raw):

# # Cookbook Name:: fb_init_sample # Recipe:: default # # Copyright (c) 2019-present, Facebook, Inc. # All rights reserved. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # # SANITY-INDUCING HACK # If we have never run before, run in debug mode. This ensures that for # first run/bootstrapping issues we have lots of visibility. if node.firstboot_any_phase? Chef::Log.info('Enabling debug log for first run') Chef::Log.level = :debug end # this should be first. include_recipe 'fb_init_sample::site_settings' if node.centos? # HERE: yum include_recipe 'fb_rpm' end if node.debian? || node.ubuntu? include_recipe 'fb_apt' end # HERE: chef_client if node.centos? include_recipe 'fb_e2fsprogs' include_recipe 'fb_util_linux' end if node.systemd? include_recipe 'fb_systemd' include_recipe 'fb_timers' end if node.macos? include_recipe 'fb_launchd' end include_recipe 'fb_nsswitch' # HERE: ssh include_recipe 'fb_less' if node.linux? && !node.embedded? && !node.container? include_recipe 'fb_ethtool' end if node.centos? include_recipe 'fb_ldconfig' end if node.linux? && !node.container? if node.fedora? include_recipe 'fb_grubby' end include_recipe 'fb_grub' end if node.centos? include_recipe 'fb_dracut' end if node.centos? && !node.container? include_recipe 'fb_storage' end include_recipe 'fb_modprobe' include_recipe 'fb_securetty' include_recipe 'fb_hostname' include_recipe 'fb_hosts' include_recipe 'fb_ethers' # HERE: resolv include_recipe 'fb_limits' include_recipe 'fb_hostconf' include_recipe 'fb_sysctl' # HERE: networking include_recipe 'fb_users' if node.centos? # We turn this off because the override causes intermittent failures in # Travis when rsyslog is restarted node.default['fb_syslog']['_enable_syslog_socket_override'] = false end include_recipe 'fb_syslog' if node.linux? && !node.container? include_recipe 'fb_hdparm' include_recipe 'fb_sdparm' include_recipe 'fb_nscd' include_recipe 'fb_hddtemp' end include_recipe 'fb_postfix' # HERE: nfs include_recipe 'fb_swap' # WARNING! # fb_fstab is one of the most powerful cookbooks in the facebook suite, # but it requires some setup since it will take full ownership of /etc/fstab include_recipe 'fb_fstab' include_recipe 'fb_mlocate' include_recipe 'fb_logrotate' # HERE: autofs include_recipe 'fb_tmpclean' include_recipe 'fb_sudo' # HERE: ntp if node.linux? && !node.container? include_recipe 'fb_chrony' if node.centos? node.default['fb_ipset']['auto_cleanup'] = false include_recipe 'fb_ebtables' include_recipe 'fb_ipset' include_recipe 'fb_iptables' include_recipe 'fb_iproute' include_recipe 'fb_ipset::cleanup' end end include_recipe 'fb_motd' include_recipe 'fb_profile' if node.firstboot_tier? include_recipe 'fb_init_sample::firstboot' end unless node.centos6? include_recipe 'fb_apcupsd' # Turn off dnsmasq as it doesn't play well with travis node.default['fb_dnsmasq']['enable'] = false include_recipe 'fb_dnsmasq' end include_recipe 'fb_collectd' include_recipe 'fb_rsync::server' if node.centos? include_recipe 'fb_sysstat' end if node.linux? include_recipe 'fb_screen' include_recipe 'fb_stunnel' end # we recommend you put this as late in the list as possible - it's one of the # few places where APIs need to use another API directly... other cookbooks # often want to setup cronjobs at runtime based on user attributes... they can # do that in a ruby_block or provider if this is at the end of the 'base # runlist' include_recipe 'fb_cron' fb_helpers_reboot 'process deferred reboots' do __fb_helpers_internal_allow_process_deferred true action :nothing end # We want this to run with the notifications at the very end of the run to # handle reboot requests that happen any time during the run. # ... but if we run this at the end and the run fails before then we'll drop # the reboot on the floor. So we play games. We schedule, as early as possible, # the scheduling. :) whyrun_safe_ruby_block 'deferred reboot intermediate' do block {} notifies :process_deferred, 'fb_helpers_reboot[process deferred reboots]' action :nothing end # This will run very early, which adds a delayed notification to the # intermediate block which won't happen until notifications are being processed # at the end of the run. That will then fire a notification which will be added # to the end of the notifications list, to schedule the reboot, so it should # happen ~last whyrun_safe_ruby_block 'Schedule process deferred reboots' do block {} notifies :run, 'whyrun_safe_ruby_block[deferred reboot intermediate]' end