Module: Chef::Platform::Rebooter

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

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

a_to_s, clean_array, shell_out, shell_out!, shell_out_compact, shell_out_compact!, shell_out_compact_timeout, shell_out_compact_timeout!, shell_out_with_systems_locale, shell_out_with_systems_locale!

Methods included from Mixin::PathSanity

#enforce_path_sanity, #sanitized_path

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
55
# 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?
          # 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]}\""
        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)
end

.reboot_if_needed!(node) ⇒ Object

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


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

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