diff --git a/app/models/service_retire_task.rb b/app/models/service_retire_task.rb index bc0ff6628b3a..c3b6bf6aaf53 100644 --- a/app/models/service_retire_task.rb +++ b/app/models/service_retire_task.rb @@ -25,11 +25,10 @@ def after_request_task_create update_attributes(:description => get_description) parent_svc = Service.find_by(:id => options[:src_ids]) _log.info("- creating service tasks for service <#{self.class.name}:#{id}>") - create_retire_subtasks(parent_svc, self) end - def create_retire_subtasks(parent_service, task) + def create_retire_subtasks(parent_service, parent_task) parent_service.service_resources.collect do |svc_rsc| next unless svc_rsc.resource.try(:retireable?) # TODO: the next line deals with the filtering for provisioning @@ -40,26 +39,26 @@ def create_retire_subtasks(parent_service, task) nh['options'] = options.except(:child_tasks) # Initial Options[:dialog] to an empty hash so we do not pass down dialog values to child services tasks nh['options'][:dialog] = {} - new_task = create_task(svc_rsc, parent_service, nh) + new_task = create_task(svc_rsc, parent_service, nh, parent_task) create_retire_subtasks(svc_rsc.resource, new_task) if svc_rsc.resource.kind_of?(Service) new_task.after_request_task_create miq_request.miq_request_tasks << new_task - new_task.deliver_to_automate - new_task + new_task.tap(&:deliver_to_automate) end.compact! end - def create_task(svc_rsc, parent_service, nh) - new_task = (svc_rsc.resource.type.demodulize + "RetireTask").constantize.new(nh) - new_task.options.merge!( - :src_id => svc_rsc.resource.id, - :service_resource_id => svc_rsc.id, - :parent_service_id => parent_service.id, - :parent_task_id => id, - ) - new_task.source = svc_rsc.resource - new_task.request_type = svc_rsc.resource.type.demodulize.downcase + "_retire" - new_task.save! - new_task + def create_task(svc_rsc, parent_service, nh, parent_task) + (svc_rsc.resource.type.demodulize + "RetireTask").constantize.new(nh).tap do |task| + task.options.merge!( + :src_id => svc_rsc.resource.id, + :service_resource_id => svc_rsc.id, + :parent_service_id => parent_service.id, + :parent_task_id => parent_task.id, + ) + task.request_type = svc_rsc.resource.type.demodulize.downcase + "_retire" + task.source = svc_rsc.resource + parent_task.miq_request_tasks << task + task.save! + end end end diff --git a/spec/models/service_retire_task_spec.rb b/spec/models/service_retire_task_spec.rb index be98a73a28ef..9d980b06665c 100644 --- a/spec/models/service_retire_task_spec.rb +++ b/spec/models/service_retire_task_spec.rb @@ -89,8 +89,8 @@ service.service_resources << FactoryGirl.create(:service_resource, :resource_type => "Service", :service_id => service_c1.id, :resource_id => service_c1.id) @service_retire_task.after_request_task_create - expect(VmRetireTask.count).to eq(4) - expect(VmRetireTask.all.pluck(:message)).to eq(["Automation Starting", "Automation Starting", "Automation Starting", "Automation Starting"]) + expect(VmRetireTask.count).to eq(2) + expect(VmRetireTask.all.pluck(:message)).to eq(["Automation Starting", "Automation Starting"]) expect(ServiceRetireTask.count).to eq(1) expect(ServiceRetireRequest.count).to eq(1) end