summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn McCrae <john.mccrae@progress.com>2022-06-14 12:35:57 -0700
committerGitHub <noreply@github.com>2022-06-14 12:35:57 -0700
commit9d008caf0de5794cb8b0768b256afa60af6f1bb2 (patch)
tree091ae5fee888b61f1b8c8b6adf24e062eb0ea765
parent50fdebfdd0daca17e20d22c1b3206095c71d62c6 (diff)
parent2093f0880b3261ef99634f74e38e8fc44a0e1e41 (diff)
downloadchef-9d008caf0de5794cb8b0768b256afa60af6f1bb2.tar.gz
Merge pull request #12377 from hamarituc/12165-cron_d
-rw-r--r--lib/chef/resource/cron/cron_d.rb15
-rw-r--r--spec/unit/resource/cron_d_spec.rb38
2 files changed, 52 insertions, 1 deletions
diff --git a/lib/chef/resource/cron/cron_d.rb b/lib/chef/resource/cron/cron_d.rb
index 9bd53d38b2..5aaf6fe954 100644
--- a/lib/chef/resource/cron/cron_d.rb
+++ b/lib/chef/resource/cron/cron_d.rb
@@ -145,6 +145,21 @@ class Chef
new_resource.cron_name.tr(".", "-")
end
+ def define_resource_requirements
+ requirements.assert(:create, :create_if_missing) do |a|
+ a.assertion do
+ # ensure valid cron job names for linux, otherwise the jobs won't be executed
+ if linux?
+ new_resource.cron_name =~ /^[a-zA-Z0-9_-]+$/
+ else
+ true
+ end
+ end
+ a.failure_message("The cron job name should contain letters, numbers, hyphens and underscores only.")
+ a.block_action!
+ end
+ end
+
def create_template(create_action)
# cleanup the legacy named job if it exists
file "#{new_resource.cron_name} legacy named cron.d file" do
diff --git a/spec/unit/resource/cron_d_spec.rb b/spec/unit/resource/cron_d_spec.rb
index c798265d06..355f3ebb28 100644
--- a/spec/unit/resource/cron_d_spec.rb
+++ b/spec/unit/resource/cron_d_spec.rb
@@ -18,7 +18,11 @@
require "spec_helper"
describe Chef::Resource::CronD do
- let(:resource) { Chef::Resource::CronD.new("cronify") }
+ let(:node) { Chef::Node.new }
+ let(:events) { Chef::EventDispatch::Dispatcher.new }
+ let(:run_context) { Chef::RunContext.new(node, {}, events) }
+ let(:resource) { Chef::Resource::CronD.new("cronify", run_context) }
+ let(:provider) { resource.provider_for_action(:create) }
it "has a default action of [:create]" do
expect(resource.action).to eql([:create])
@@ -34,6 +38,38 @@ describe Chef::Resource::CronD do
expect(resource.cron_name).to eql("cronify")
end
+ context "on linux" do
+ before(:each) do
+ node.automatic_attrs[:os] = "linux"
+ end
+
+ it "the cron_name property is valid" do
+ provider.define_resource_requirements
+
+ expect { resource.cron_name "cron-job"; provider.process_resource_requirements }.not_to raise_error
+ expect { resource.cron_name "cron_job_0"; provider.process_resource_requirements }.not_to raise_error
+ expect { resource.cron_name "CronJob"; provider.process_resource_requirements }.not_to raise_error
+ expect { resource.cron_name "cron!"; provider.process_resource_requirements }.to raise_error "The cron job name should contain letters, numbers, hyphens and underscores only."
+ expect { resource.cron_name "cron job"; provider.process_resource_requirements }.to raise_error "The cron job name should contain letters, numbers, hyphens and underscores only."
+ end
+ end
+
+ context "not on linux" do
+ before(:each) do
+ node.automatic_attrs[:os] = "aix"
+ end
+
+ it "all cron names are valid" do
+ provider.define_resource_requirements
+
+ expect { resource.cron_name "cron-job"; provider.process_resource_requirements }.not_to raise_error
+ expect { resource.cron_name "cron_job_0"; provider.process_resource_requirements }.not_to raise_error
+ expect { resource.cron_name "CronJob"; provider.process_resource_requirements }.not_to raise_error
+ expect { resource.cron_name "cron!"; provider.process_resource_requirements }.not_to raise_error
+ expect { resource.cron_name "cron job"; provider.process_resource_requirements }.not_to raise_error
+ end
+ end
+
it "the mode property defaults to '0600'" do
expect(resource.mode).to eql("0600")
end