diff options
author | John McCrae <john.mccrae@progress.com> | 2022-06-14 12:35:57 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-06-14 12:35:57 -0700 |
commit | 9d008caf0de5794cb8b0768b256afa60af6f1bb2 (patch) | |
tree | 091ae5fee888b61f1b8c8b6adf24e062eb0ea765 | |
parent | 50fdebfdd0daca17e20d22c1b3206095c71d62c6 (diff) | |
parent | 2093f0880b3261ef99634f74e38e8fc44a0e1e41 (diff) | |
download | chef-9d008caf0de5794cb8b0768b256afa60af6f1bb2.tar.gz |
Merge pull request #12377 from hamarituc/12165-cron_d
-rw-r--r-- | lib/chef/resource/cron/cron_d.rb | 15 | ||||
-rw-r--r-- | spec/unit/resource/cron_d_spec.rb | 38 |
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 |