diff options
author | Tim Smith <tsmith@chef.io> | 2019-11-18 11:46:34 -0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-11-18 11:46:34 -0800 |
commit | 135b671cddd4dfe21e98fd8a5e78e6087800d2c7 (patch) | |
tree | 63255c0d22e5ceaea88399d73dc216e71dfdceb4 | |
parent | ca73a47ffa9685333b3df4c97c6d3e18904e268f (diff) | |
parent | 4cbe09bcc1b37d5b5b6112566e5bc6270d00530b (diff) | |
download | chef-135b671cddd4dfe21e98fd8a5e78e6087800d2c7.tar.gz |
Merge pull request #7239 from chef/reboot_resource
Convert reboot resource to a custom resource with descriptions
-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 | 52 |
3 files changed, 48 insertions, 83 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 21a7246678..7af55dd242 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-2019, Chef, Inc. # License:: Apache License, Version 2.0 # # Licensed under the Apache License, Version 2.0 (the "License"); @@ -25,6 +25,7 @@ class Chef unified_mode true 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"\ @@ -34,9 +35,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, description: "A string that describes the reboot action.", default: "Reboot by #{Chef::Dist::PRODUCT}" @@ -44,6 +42,52 @@ 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 + + # make sure people are quite clear what they want + # we have to define this below the actions since setting default_action to :nothing is a no-op + # and doesn't actually override the first action in the resource + default_action :nothing + + 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 |