summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBryan McLellan <btm@loftninjas.org>2018-06-14 14:43:52 -0400
committerGitHub <noreply@github.com>2018-06-14 14:43:52 -0400
commit05a3c97e93297cde92684d7026b5bc727b957b50 (patch)
tree237ec333459785b5bf2780208b32b3a6a3c0dd45
parent1a498a46d72c9d619d31e192f5b4af2a4f237701 (diff)
parent0357969833fd6a1de59dc969e1b06b9fc006fa81 (diff)
downloadchef-05a3c97e93297cde92684d7026b5bc727b957b50.tar.gz
Merge pull request #7293 from MsysTechnologiesllc/vasundhara/MSYS-822_fix_for_task_is_not_idempotent_when_task_name_includes_parent_folder
windows_task: Fix for task is not idempotent when task name includes parent folder
-rw-r--r--lib/chef/provider/windows_task.rb8
-rw-r--r--spec/functional/resource/windows_task_spec.rb54
2 files changed, 57 insertions, 5 deletions
diff --git a/lib/chef/provider/windows_task.rb b/lib/chef/provider/windows_task.rb
index 95840ac791..1676ec3f6b 100644
--- a/lib/chef/provider/windows_task.rb
+++ b/lib/chef/provider/windows_task.rb
@@ -100,15 +100,13 @@ class Chef
def load_current_resource
@current_resource = Chef::Resource::WindowsTask.new(new_resource.name)
- task = TaskScheduler.new
- if task.exists?(new_resource.task_name)
- @current_resource.exists = true
+ task = TaskScheduler.new(new_resource.task_name, nil, "\\", false)
+ @current_resource.exists = task.exists?(new_resource.task_name)
+ if @current_resource.exists
task.get_task(new_resource.task_name)
@current_resource.task = task
pathed_task_name = new_resource.task_name.start_with?('\\') ? new_resource.task_name : "\\#{new_resource.task_name}"
@current_resource.task_name(pathed_task_name)
- else
- @current_resource.exists = false
end
@current_resource
end
diff --git a/spec/functional/resource/windows_task_spec.rb b/spec/functional/resource/windows_task_spec.rb
index 65a396cf56..46fbfe2e82 100644
--- a/spec/functional/resource/windows_task_spec.rb
+++ b/spec/functional/resource/windows_task_spec.rb
@@ -1109,6 +1109,60 @@ describe Chef::Resource::WindowsTask, :windows_only do
end
end
+ context "task_name with parent folder" do
+ describe "task_name with path '\\foo\\chef-client-functional-test' " do
+ let(:task_name) { "\\foo\\chef-client-functional-test" }
+ after { delete_task }
+ subject do
+ new_resource = Chef::Resource::WindowsTask.new(task_name, run_context)
+ new_resource.command task_name
+ new_resource.run_level :highest
+ new_resource.frequency :once
+ new_resource.execution_time_limit = 259200 / 60 # converting "PT72H" into minutes and passing here since win32-taskscheduler accespts this
+ new_resource
+ end
+
+ it "creates the scheduled task with task name 'chef-client-functional-test' inside path '\\foo'" do
+ call_for_create_action
+ current_resource = call_for_load_current_resource
+ expect(current_resource.exists).to eq(true)
+ expect(current_resource.task.application_name).to eq(task_name)
+ end
+
+ it "does not converge the resource if it is already converged" do
+ subject.run_action(:create)
+ subject.run_action(:create)
+ expect(subject).not_to be_updated_by_last_action
+ end
+ end
+
+ describe "task_name with path '\\foo\\bar\\chef-client-functional-test' " do
+ let(:task_name) { "\\foo\\bar\\chef-client-functional-test" }
+ after { delete_task }
+ subject do
+ new_resource = Chef::Resource::WindowsTask.new(task_name, run_context)
+ new_resource.command task_name
+ new_resource.run_level :highest
+ new_resource.frequency :once
+ new_resource.execution_time_limit = 259200 / 60 # converting "PT72H" into minutes and passing here since win32-taskscheduler accespts this
+ new_resource
+ end
+
+ it "creates the scheduled task with task with name 'chef-client-functional-test' inside path '\\foo\\bar' " do
+ call_for_create_action
+ current_resource = call_for_load_current_resource
+ expect(current_resource.exists).to eq(true)
+ expect(current_resource.task.application_name).to eq(task_name)
+ end
+
+ it "does not converge the resource if it is already converged" do
+ subject.run_action(:create)
+ subject.run_action(:create)
+ expect(subject).not_to be_updated_by_last_action
+ end
+ end
+ end
+
describe "Examples of idempotent checks for each frequency" do
after { delete_task }
context "For frequency :once" do