summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeremy Kimber <groverperson@gmail.com>2022-11-08 14:58:17 -0600
committerGitHub <noreply@github.com>2022-11-08 15:58:17 -0500
commitef861cf0e5e99688727766385c6a7d94134e625f (patch)
treeaf234af64824aefe7f19f43e2d4282cd6bc3459b
parentf065ac004b47a2e1fb60fa8c9d4948e3e6fa698c (diff)
downloadchef-ef861cf0e5e99688727766385c6a7d94134e625f.tar.gz
Fix false updates on cron resource when using integers (#13147)
* Fix false updates on cron resource when using integers Signed-off-by: Jeremy Kimber <kimbernator@state.local> * move new cron idempotency test to provider spec and coerce data to string in provider Signed-off-by: Jeremy Kimber <kimbernator@state.local> * Compare cron variables by class Signed-off-by: Jeremy Kimber <kimbernator@state.local> Signed-off-by: Jeremy Kimber <kimbernator@state.local> Co-authored-by: Jeremy Kimber <kimbernator@state.local>
-rw-r--r--lib/chef/provider/cron.rb6
-rw-r--r--spec/unit/provider/cron_spec.rb36
2 files changed, 41 insertions, 1 deletions
diff --git a/lib/chef/provider/cron.rb b/lib/chef/provider/cron.rb
index 29ecd4dd2a..31b99975c6 100644
--- a/lib/chef/provider/cron.rb
+++ b/lib/chef/provider/cron.rb
@@ -88,7 +88,11 @@ class Chef
def cron_different?
CRON_ATTRIBUTES.any? do |cron_var|
- new_resource.send(cron_var) != current_resource.send(cron_var)
+ if new_resource.send(cron_var).class == current_resource.send(cron_var).class
+ new_resource.send(cron_var) != current_resource.send(cron_var)
+ else
+ new_resource.send(cron_var).to_s != current_resource.send(cron_var).to_s
+ end
end
end
diff --git a/spec/unit/provider/cron_spec.rb b/spec/unit/provider/cron_spec.rb
index 3e56dbc8b1..d59ead2c00 100644
--- a/spec/unit/provider/cron_spec.rb
+++ b/spec/unit/provider/cron_spec.rb
@@ -769,6 +769,42 @@ describe Chef::Provider::Cron do
end
end
+ context "when integers are provided to the resource to express time values" do
+ it "should not report any difference" do
+ @new_resource.minute(1)
+ @new_resource.hour(1)
+ @new_resource.day(1)
+ @new_resource.month(1)
+ @new_resource.weekday(1)
+ allow(@provider).to receive(:read_crontab).and_return(<<~CRONTAB)
+ # Chef Name: cronhole some stuff
+ 1 1 1 1 1 /bin/true
+
+ CRONTAB
+
+ @provider.run_action(:create)
+ expect(@new_resource).not_to be_updated_by_last_action
+ end
+ end
+
+ context "when strings are provided to the resource to express time values" do
+ it "should not report any difference" do
+ @new_resource.minute("1")
+ @new_resource.hour("1")
+ @new_resource.day("1")
+ @new_resource.month("1")
+ @new_resource.weekday("1")
+ allow(@provider).to receive(:read_crontab).and_return(<<~CRONTAB)
+ # Chef Name: cronhole some stuff
+ 1 1 1 1 1 /bin/true
+
+ CRONTAB
+
+ @provider.run_action(:create)
+ expect(@new_resource).not_to be_updated_by_last_action
+ end
+ end
+
context "when environment variable is used" do
before :each do
@provider.cron_exists = true