summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTim Smith <tsmith84@gmail.com>2019-11-08 14:15:20 -0800
committerTim Smith <tsmith84@gmail.com>2019-11-08 14:19:51 -0800
commitdb1704d2259841f60382ca6c14dc1a6446ea939b (patch)
tree05536ea93da025fcf78962d0d348059e41025985
parent8cdb922484468f41c0a083f13a8437c3a6044a43 (diff)
downloadchef-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.rb41
-rw-r--r--lib/chef/resources.rb1
-rw-r--r--spec/unit/resource/chef_sleep_spec.rb30
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