diff options
author | Tim Smith <tsmith84@gmail.com> | 2019-11-08 14:15:20 -0800 |
---|---|---|
committer | Tim Smith <tsmith84@gmail.com> | 2019-11-08 14:19:51 -0800 |
commit | db1704d2259841f60382ca6c14dc1a6446ea939b (patch) | |
tree | 05536ea93da025fcf78962d0d348059e41025985 | |
parent | 8cdb922484468f41c0a083f13a8437c3a6044a43 (diff) | |
download | chef-db1704d2259841f60382ca6c14dc1a6446ea939b.tar.gz |
Add new chef_sleep resource
We highly recommend you never use this, but there's times when you 100%
need to have the client sleep for a period of time after some work.
Example: windows_service will start a service and the OS will say that
it's "started" when it's not. Before doing additional work that relies
on the service being started you may need to sleep. This would be a good
time to notify on the restart or start action.
Signed-off-by: Tim Smith <tsmith@chef.io>
-rw-r--r-- | lib/chef/resource/chef_sleep.rb | 41 | ||||
-rw-r--r-- | lib/chef/resources.rb | 1 | ||||
-rw-r--r-- | spec/unit/resource/chef_sleep_spec.rb | 30 |
3 files changed, 72 insertions, 0 deletions
diff --git a/lib/chef/resource/chef_sleep.rb b/lib/chef/resource/chef_sleep.rb new file mode 100644 index 0000000000..6ae70c1f31 --- /dev/null +++ b/lib/chef/resource/chef_sleep.rb @@ -0,0 +1,41 @@ +# +# Copyright:: 2019, Chef Software Inc. +# +# 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 "../resource" +require_relative "../dist" + +class Chef + class Resource + class ChefSleep < Chef::Resource + resource_name :chef_sleep + provides :chef_sleep + + unified_mode true + + description "Use the chef_sleep resource to sleep for a number of seconds during a #{Chef::Dist::PRODUCT} run." + introduced "15.5" + + property :seconds, [String, Integer], + description: "The number of seconds to sleep.", + coerce: proc { |s| Integer(s) }, + name_property: true + + action :sleep do + sleep(new_resource.seconds) + end + end + end +end diff --git a/lib/chef/resources.rb b/lib/chef/resources.rb index 235c1e41a1..d0344ceb9c 100644 --- a/lib/chef/resources.rb +++ b/lib/chef/resources.rb @@ -28,6 +28,7 @@ require_relative "resource/build_essential" require_relative "resource/cookbook_file" require_relative "resource/chef_gem" require_relative "resource/chef_handler" +require_relative "resource/chef_sleep" require_relative "resource/chocolatey_config" require_relative "resource/chocolatey_feature" require_relative "resource/chocolatey_package" diff --git a/spec/unit/resource/chef_sleep_spec.rb b/spec/unit/resource/chef_sleep_spec.rb new file mode 100644 index 0000000000..bde29f4f1d --- /dev/null +++ b/spec/unit/resource/chef_sleep_spec.rb @@ -0,0 +1,30 @@ +# +# Copyright:: 2019, Chef Software, 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 "spec_helper" + +describe Chef::Resource::ChefSleep do + let(:resource) { Chef::Resource::ChefSleep.new("30") } + + it "sets the default action as :sleep" do + expect(resource.action).to eql([:sleep]) + end + + it "sleep is the name property and it coerces to an Integer" do + expect(resource.seconds).to eql(30) + end +end |