diff options
author | Tim Smith <tsmith@chef.io> | 2019-04-26 09:46:32 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-04-26 09:46:32 -0700 |
commit | 26b2bec06c9062fa060e458737ad5752094e59e3 (patch) | |
tree | ed105ac9328fcfbe36716fe22d3c0623edab66e6 | |
parent | 9f75f57ebc45005f0db3840665212e8299ad0ec1 (diff) | |
parent | 26fc9d4a0d0f6be555fec58480efaab208494f1f (diff) | |
download | chef-26b2bec06c9062fa060e458737ad5752094e59e3.tar.gz |
Merge pull request #8420 from MsysTechnologiesllc/VSingh/MSYS-1003_add_start_when_available_option
windows_task: Add start_when_available support
-rw-r--r-- | lib/chef/provider/windows_task.rb | 9 | ||||
-rw-r--r-- | lib/chef/resource/windows_task.rb | 4 | ||||
-rw-r--r-- | spec/functional/resource/windows_task_spec.rb | 51 | ||||
-rw-r--r-- | spec/unit/resource/windows_task_spec.rb | 4 |
4 files changed, 65 insertions, 3 deletions
diff --git a/lib/chef/provider/windows_task.rb b/lib/chef/provider/windows_task.rb index ab88575510..34c64199bf 100644 --- a/lib/chef/provider/windows_task.rb +++ b/lib/chef/provider/windows_task.rb @@ -334,7 +334,8 @@ class Chef task.parameters != new_resource.command_arguments.to_s || task.principals[:run_level] != run_level || task.settings[:disallow_start_if_on_batteries] != new_resource.disallow_start_if_on_batteries || - task.settings[:stop_if_going_on_batteries] != new_resource.stop_if_going_on_batteries) + task.settings[:stop_if_going_on_batteries] != new_resource.stop_if_going_on_batteries || + task.settings[:start_when_available] != new_resource.start_when_available) else current_task_trigger = task.trigger(0) new_task_trigger = trigger @@ -360,7 +361,8 @@ class Chef task.principals[:run_level] != run_level || PRIORITY[task.priority] != new_resource.priority || task.settings[:disallow_start_if_on_batteries] != new_resource.disallow_start_if_on_batteries || - task.settings[:stop_if_going_on_batteries] != new_resource.stop_if_going_on_batteries + task.settings[:stop_if_going_on_batteries] != new_resource.stop_if_going_on_batteries || + task.settings[:start_when_available] != new_resource.start_when_available if trigger_type == TaskScheduler::MONTHLYDATE flag = true if current_task_trigger[:run_on_last_day_of_month] != new_task_trigger[:run_on_last_day_of_month] end @@ -560,12 +562,13 @@ class Chef settings[:priority] = new_resource.priority settings[:disallow_start_if_on_batteries] = new_resource.disallow_start_if_on_batteries settings[:stop_if_going_on_batteries] = new_resource.stop_if_going_on_batteries + settings[:start_when_available] = new_resource.start_when_available settings end def principal_settings settings = {} - settings [:run_level] = run_level + settings[:run_level] = run_level settings[:logon_type] = logon_type settings end diff --git a/lib/chef/resource/windows_task.rb b/lib/chef/resource/windows_task.rb index 54920f2bac..c60515a0ee 100644 --- a/lib/chef/resource/windows_task.rb +++ b/lib/chef/resource/windows_task.rb @@ -120,6 +120,10 @@ class Chef introduced: "14.7", description: "The task description." + property :start_when_available, [TrueClass, FalseClass], + introduced: "15.0", default: false, + description: "To start the task at any time after its scheduled time has passed." + attr_accessor :exists, :task, :command_arguments VALID_WEEK_DAYS = %w{ mon tue wed thu fri sat sun * }.freeze diff --git a/spec/functional/resource/windows_task_spec.rb b/spec/functional/resource/windows_task_spec.rb index b0c6998d77..b0ba1f9168 100644 --- a/spec/functional/resource/windows_task_spec.rb +++ b/spec/functional/resource/windows_task_spec.rb @@ -1283,6 +1283,57 @@ describe Chef::Resource::WindowsTask, :windows_only do expect(subject).not_to be_updated_by_last_action end end + + context "when start_when_available is passed" do + subject do + new_resource = Chef::Resource::WindowsTask.new(task_name, run_context) + new_resource.command task_name + new_resource.run_level :highest + new_resource.execution_time_limit = 259200 / 60 # converting "PT72H" into minutes and passing here since win32-taskscheduler accespts this + new_resource + end + + it "sets start_when_available to true" do + subject.frequency :minute + subject.start_when_available true + call_for_create_action + # loading current resource again to check new task is creted and it matches task parameters + current_resource = call_for_load_current_resource + expect(current_resource.exists).to eq(true) + expect(current_resource.task.settings[:start_when_available]).to eql(true) + end + + it "sets start_when_available to false" do + subject.frequency :minute + subject.start_when_available false + call_for_create_action + # loading current resource again to check new task is created and it matches task parameters + current_resource = call_for_load_current_resource + expect(current_resource.exists).to eq(true) + expect(current_resource.task.settings[:start_when_available]).to eql(false) + end + + it "sets the default if start_when_available is nil" do + subject.frequency :minute + subject.start_when_available nil + call_for_create_action + # loading current resource again to check new task is created and it matches task parameters + current_resource = call_for_load_current_resource + expect(current_resource.exists).to eq(true) + expect(current_resource.task.settings[:start_when_available]).to eql(false) + end + + it "does not converge the resource if it is already converged" do + subject.frequency :minute + subject.start_when_available true + subject.run_action(:create) + subject.frequency :minute + subject.start_when_available true + subject.disallow_start_if_on_batteries false + subject.run_action(:create) + expect(subject).not_to be_updated_by_last_action + end + end end context "task_name with parent folder" do diff --git a/spec/unit/resource/windows_task_spec.rb b/spec/unit/resource/windows_task_spec.rb index 96482d3d56..b152d879f6 100644 --- a/spec/unit/resource/windows_task_spec.rb +++ b/spec/unit/resource/windows_task_spec.rb @@ -61,6 +61,10 @@ describe Chef::Resource::WindowsTask, :windows_only do expect(resource.stop_if_going_on_batteries).to eql(false) end + it "sets the default value for start_when_available as false" do + expect(resource.start_when_available).to eql(false) + end + context "when frequency is not provided" do it "raises ArgumentError to provide frequency" do expect { resource.after_created }.to raise_error(ArgumentError, "Frequency needs to be provided. Valid frequencies are :minute, :hourly, :daily, :weekly, :monthly, :once, :on_logon, :onstart, :on_idle, :none." ) |