diff options
-rw-r--r-- | lib/chef/provider/reboot.rb | 78 | ||||
-rw-r--r-- | lib/chef/providers.rb | 1 | ||||
-rw-r--r-- | lib/chef/resource/reboot.rb | 45 |
3 files changed, 43 insertions, 81 deletions
diff --git a/lib/chef/provider/reboot.rb b/lib/chef/provider/reboot.rb deleted file mode 100644 index 7fd3c32d53..0000000000 --- a/lib/chef/provider/reboot.rb +++ /dev/null @@ -1,78 +0,0 @@ -# -# Author:: Chris Doherty <cdoherty@chef.io>) -# Copyright:: Copyright 2014-2016, Chef, Inc. -# License:: Apache License, Version 2.0 -# -# 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. -# - -require_relative "../log" -require_relative "../provider" - -class Chef - class Provider - # Use the reboot resource to reboot a node, a necessary step with some - # installations on certain platforms. This resource is supported for use on - # the Microsoft Windows, macOS, and Linux platforms. - # - # In using this resource via notifications, it's important to *only* use - # immediate notifications. Delayed notifications produce unintuitive and - # probably undesired results. - # - # @since 12.0.0 - class Reboot < Chef::Provider - provides :reboot - - # @return [void] - def load_current_resource - @current_resource ||= Chef::Resource::Reboot.new(new_resource.name) - current_resource.reason(new_resource.reason) - current_resource.delay_mins(new_resource.delay_mins) - current_resource - end - - # add a reboot to the node run_context - # @return [void] - def request_reboot - node.run_context.request_reboot( - delay_mins: new_resource.delay_mins, - reason: new_resource.reason, - timestamp: Time.now, - requested_by: new_resource.name - ) - end - - def action_request_reboot - converge_by("request a system reboot to occur if the run succeeds") do - logger.warn "Reboot requested:'#{new_resource.name}'" - request_reboot - end - end - - def action_reboot_now - converge_by("rebooting the system immediately") do - logger.warn "Rebooting system immediately, requested by '#{new_resource.name}'" - request_reboot - throw :end_client_run_early - end - end - - def action_cancel - converge_by("cancel any existing end-of-run reboot request") do - logger.warn "Reboot canceled: '#{new_resource.name}'" - node.run_context.cancel_reboot - end - end - end - end -end diff --git a/lib/chef/providers.rb b/lib/chef/providers.rb index 1e45ca13ed..629b64d2d5 100644 --- a/lib/chef/providers.rb +++ b/lib/chef/providers.rb @@ -43,7 +43,6 @@ require_relative "provider/noop" require_relative "provider/package" require_relative "provider/powershell_script" require_relative "provider/osx_profile" -require_relative "provider/reboot" require_relative "provider/remote_directory" require_relative "provider/remote_file" require_relative "provider/route" diff --git a/lib/chef/resource/reboot.rb b/lib/chef/resource/reboot.rb index bf3686ba47..6c3f9063d6 100644 --- a/lib/chef/resource/reboot.rb +++ b/lib/chef/resource/reboot.rb @@ -1,6 +1,6 @@ # # Author:: Chris Doherty <cdoherty@chef.io>) -# Copyright:: Copyright 2014-2016, Chef, Inc. +# Copyright:: Copyright 2014-2018, Chef, Inc. # License:: Apache License, Version 2.0 # # Licensed under the Apache License, Version 2.0 (the "License"); @@ -23,6 +23,7 @@ class Chef class Resource class Reboot < Chef::Resource resource_name :reboot + provides :reboot description "Use the reboot resource to reboot a node, a necessary step with some"\ " installations on certain platforms. This resource is supported for use on"\ @@ -32,7 +33,6 @@ class Chef " probably undesired results." introduced "12.0" - allowed_actions :request_reboot, :reboot_now, :cancel default_action :nothing # make sure people are quite clear what they want property :reason, String, @@ -42,6 +42,47 @@ class Chef property :delay_mins, Integer, description: "The amount of time (in minutes) to delay a reboot request.", default: 0 + + action :request_reboot do + description "Reboot a node at the end of a chef-client run." + + converge_by("request a system reboot to occur if the run succeeds") do + logger.warn "Reboot requested:'#{new_resource.name}'" + request_reboot + end + end + + action :reboot_now do + description "Reboot a node so that the chef-client may continue the installation process." + + converge_by("rebooting the system immediately") do + logger.warn "Rebooting system immediately, requested by '#{new_resource.name}'" + request_reboot + throw :end_client_run_early + end + end + + action :cancel do + description "Cancel a pending reboot request." + + converge_by("cancel any existing end-of-run reboot request") do + logger.warn "Reboot canceled: '#{new_resource.name}'" + node.run_context.cancel_reboot + end + end + + action_class do + # add a reboot to the node run_context + # @return [void] + def request_reboot + node.run_context.request_reboot( + delay_mins: new_resource.delay_mins, + reason: new_resource.reason, + timestamp: Time.now, + requested_by: new_resource.name + ) + end + end end end end |