module Chef::Platform::Rebooter

Public Class Methods

reboot!(node) click to toggle source
# File lib/chef/platform/rebooter.rb, line 34
def reboot!(node)
  reboot_info = node.run_context.reboot_info

  cmd = case
        when ChefUtils.windows?
          # should this do /f as well? do we then need a minimum delay to let apps quit?
          # Use explicit path to shutdown.exe, to protect against https://github.com/chef/chef/issues/5594
          windows_shutdown_path = "#{ENV["SYSTEMROOT"]}/System32/shutdown.exe"
          "#{windows_shutdown_path} /r /t #{reboot_info[:delay_mins] * 60} /c \"#{reboot_info[:reason]}\""
        when node["os"] == "solaris2"
          # SysV-flavored shutdown
          "shutdown -i6 -g#{reboot_info[:delay_mins]} -y \"#{reboot_info[:reason]}\" &"
        else
          # Linux/BSD/Mac/AIX and other systems with BSD-ish shutdown
          "shutdown -r +#{reboot_info[:delay_mins]} \"#{reboot_info[:reason]}\" &"
        end

  msg = "Rebooting server at a recipe's request. Details: #{reboot_info.inspect}"
  begin
    Chef::Log.warn msg
    shell_out!(cmd)
  rescue Mixlib::ShellOut::ShellCommandFailed => e
    raise Chef::Exceptions::RebootFailed.new(e.message)
  end

  raise Chef::Exceptions::Reboot.new(msg)
end
reboot_if_needed!(node) click to toggle source

this is a wrapper function so Chef::Client only needs a single line of code.

# File lib/chef/platform/rebooter.rb, line 63
def reboot_if_needed!(node)
  if node.run_context.reboot_requested?
    reboot!(node)
  end
end