summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTim Smith <tsmith@chef.io>2019-11-18 11:46:34 -0800
committerGitHub <noreply@github.com>2019-11-18 11:46:34 -0800
commit135b671cddd4dfe21e98fd8a5e78e6087800d2c7 (patch)
tree63255c0d22e5ceaea88399d73dc216e71dfdceb4
parentca73a47ffa9685333b3df4c97c6d3e18904e268f (diff)
parent4cbe09bcc1b37d5b5b6112566e5bc6270d00530b (diff)
downloadchef-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.rb78
-rw-r--r--lib/chef/providers.rb1
-rw-r--r--lib/chef/resource/reboot.rb52
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