summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJosh Cooper <josh@puppetlabs.com>2014-10-03 15:32:15 -0700
committerJosh Cooper <josh@puppetlabs.com>2014-10-07 16:44:58 -0700
commit44cc510a879513c1c8fe6a4245b8fca2b9e62db8 (patch)
tree4a0023e8d030ad3c68ef39f0afc196a5368efc75
parent766cce7ff953b63698a7a4c819e6b21b60703c6d (diff)
downloadpuppet-44cc510a879513c1c8fe6a4245b8fca2b9e62db8.tar.gz
(PUP-1165) Perform validation on desired triggers not current
The `enabled` and `index` trigger parameters are read-only, so they will be set in the `current` trigger, but are not allowed in the `desired` trigger. Previously, the `translate_hash_to_trigger` method performed validation based on whether it was passed a `current` or `desired` trigger. This commit moves the validation logic to the `validate_trigger` method, which is only ever called with `desired` trigger values. It also allows the `index` and `enabled` keys to be present in a trigger. This isn't an issue because they are ignored for the purposes of determining if two triggers are the same. The reason for this change, is because ultimately we don't want the `translate_hash_to_trigger` method to mutate the `current` trigger, and this commit makes it so that the `index` and `enabled` keys can be in the `puppet_trigger` but will be ignored.
-rw-r--r--lib/puppet/provider/scheduled_task/win32_taskscheduler.rb22
-rw-r--r--spec/unit/provider/scheduled_task/win32_taskscheduler_spec.rb14
2 files changed, 27 insertions, 9 deletions
diff --git a/lib/puppet/provider/scheduled_task/win32_taskscheduler.rb b/lib/puppet/provider/scheduled_task/win32_taskscheduler.rb
index 91526d7fa..ea7b54c96 100644
--- a/lib/puppet/provider/scheduled_task/win32_taskscheduler.rb
+++ b/lib/puppet/provider/scheduled_task/win32_taskscheduler.rb
@@ -274,13 +274,9 @@ Puppet::Type.type(:scheduled_task).provide(:win32_taskscheduler) do
}
end
- def translate_hash_to_trigger(puppet_trigger, user_provided_input=false)
+ def translate_hash_to_trigger(puppet_trigger)
trigger = dummy_time_trigger
- if user_provided_input
- self.fail "'enabled' is read-only on scheduled_task triggers and should be removed ('enabled' is usually provided in puppet resource scheduled_task)." if puppet_trigger.has_key?('enabled')
- self.fail "'index' is read-only on scheduled_task triggers and should be removed ('index' is usually provided in puppet resource scheduled_task)." if puppet_trigger.has_key?('index')
- end
puppet_trigger.delete('index')
if puppet_trigger.delete('enabled') == false
@@ -289,7 +285,7 @@ Puppet::Type.type(:scheduled_task).provide(:win32_taskscheduler) do
trigger['flags'] &= ~Win32::TaskScheduler::TASK_TRIGGER_FLAG_DISABLED
end
- extra_keys = puppet_trigger.keys.sort - ['schedule', 'start_date', 'start_time', 'every', 'months', 'on', 'which_occurrence', 'day_of_week']
+ extra_keys = puppet_trigger.keys.sort - ['index', 'enabled', 'schedule', 'start_date', 'start_time', 'every', 'months', 'on', 'which_occurrence', 'day_of_week']
self.fail "Unknown trigger option(s): #{Puppet::Parameter.format_value_for_display(extra_keys)}" unless extra_keys.empty?
self.fail "Must specify 'start_time' when defining a trigger" unless puppet_trigger['start_time']
@@ -361,9 +357,17 @@ Puppet::Type.type(:scheduled_task).provide(:win32_taskscheduler) do
def validate_trigger(value)
value = [value] unless value.is_a?(Array)
- # translate_hash_to_trigger handles the same validation that we
- # would be doing here at the individual trigger level.
- value.each {|t| translate_hash_to_trigger(t, true)}
+ value.each do |t|
+ if t.has_key?('index')
+ self.fail "'index' is read-only on scheduled_task triggers and should be removed ('index' is usually provided in puppet resource scheduled_task)."
+ end
+
+ if t.has_key?('enabled')
+ self.fail "'enabled' is read-only on scheduled_task triggers and should be removed ('enabled' is usually provided in puppet resource scheduled_task)."
+ end
+
+ translate_hash_to_trigger(t)
+ end
true
end
diff --git a/spec/unit/provider/scheduled_task/win32_taskscheduler_spec.rb b/spec/unit/provider/scheduled_task/win32_taskscheduler_spec.rb
index 3d37956c5..7d080174f 100644
--- a/spec/unit/provider/scheduled_task/win32_taskscheduler_spec.rb
+++ b/spec/unit/provider/scheduled_task/win32_taskscheduler_spec.rb
@@ -635,6 +635,20 @@ describe Puppet::Type.type(:scheduled_task).provider(:win32_taskscheduler), :if
describe '#triggers_same?' do
let(:provider) { described_class.new(:name => 'foobar', :command => 'C:\Windows\System32\notepad.exe') }
+ it "ignores 'index' in current trigger" do
+ current = {'index' => 0, 'schedule' => 'daily', 'start_date' => '2011-09-12', 'start_time' => '15:30', 'every' => 3}
+ desired = {'schedule' => 'daily', 'start_date' => '2011-09-12', 'start_time' => '15:30', 'every' => 3}
+
+ expect(provider).to be_triggers_same(current, desired)
+ end
+
+ it "ignores 'enabled' in current triggger" do
+ current = {'enabled' => true, 'schedule' => 'daily', 'start_date' => '2011-09-12', 'start_time' => '15:30', 'every' => 3}
+ desired = {'schedule' => 'daily', 'start_date' => '2011-09-12', 'start_time' => '15:30', 'every' => 3}
+
+ expect(provider).to be_triggers_same(current, desired)
+ end
+
it "should not consider a disabled 'current' trigger to be the same" do
current = {'schedule' => 'once', 'enabled' => false}
desired = {'schedule' => 'once'}