Module: Chef::Platform::Rebooter

Extended by:
DSL::RebootPending, Mixin::ShellOut
Defined in:
lib/chef/platform/rebooter.rb

Constant Summary

Constants included from Mixin::ShellOut

Mixin::ShellOut::DEPRECATED_OPTIONS

Class Method Summary collapse

Methods included from DSL::RebootPending

reboot_pending?

Methods included from DSL::PlatformIntrospection

#docker?, #platform?, #platform_family?, #value_for_platform, #value_for_platform_family

Methods included from DSL::RegistryHelper

#registry_data_exists?, #registry_get_subkeys, #registry_get_values, #registry_has_subkeys?, #registry_key_exists?, #registry_value_exists?

Methods included from Mixin::ShellOut

run_command_compatible_options, shell_out, shell_out!, shell_out_with_systems_locale, shell_out_with_systems_locale!

Class Method Details

.reboot!(node) ⇒ Object



33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
# File 'lib/chef/platform/rebooter.rb', line 33

def reboot!(node)
  reboot_info = node.run_context.reboot_info

  cmd = if Chef::Platform.windows?
          # should this do /f as well? do we then need a minimum delay to let apps quit?
          "shutdown /r /t #{reboot_info[:delay_mins] * 60} /c \"#{reboot_info[:reason]}\""
        else
          # probably Linux-only.
          "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) if Chef::Application::ExitCode.enforce_rfc_062_exit_codes?
  Chef::Application::ExitCode.notify_reboot_exit_code_deprecation
end

.reboot_if_needed!(node) ⇒ Object

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



57
58
59
60
61
# File 'lib/chef/platform/rebooter.rb', line 57

def reboot_if_needed!(node)
  if node.run_context.reboot_requested?
    reboot!(node)
  end
end