From 68efbb41640149f546b57d05f6e38bfa65dc379a Mon Sep 17 00:00:00 2001 From: Adam Grare Date: Fri, 2 Aug 2024 10:55:21 -0400 Subject: [PATCH] Fix MiqRequestTask ResourceAction with a Workflow If a ServiceTemplate has a ResourceAction with a configuration_script_payload as its entrypoint this was not being run by MiqRequestTask#deliver_queue. --- app/models/miq_request_task.rb | 5 +-- .../service_template_provision_task_spec.rb | 31 +++++++++++++++++++ 2 files changed, 34 insertions(+), 2 deletions(-) diff --git a/app/models/miq_request_task.rb b/app/models/miq_request_task.rb index bb3cba5dcaf..e4e98f0e6dc 100644 --- a/app/models/miq_request_task.rb +++ b/app/models/miq_request_task.rb @@ -140,12 +140,13 @@ def deliver_queue(req_type = request_type, zone = nil) _log.info("Queuing #{request_class::TASK_DESCRIPTION}: [#{description}]...") - workflow = ConfigurationScriptPayload.find(options[:configuration_script_payload_id]) if options[:configuration_script_payload_id] + workflow_id = resource_action&.configuration_script_id || options[:configuration_script_payload_id] + workflow = ConfigurationScriptPayload.find(workflow_id) if workflow_id if workflow miq_task_id = workflow.run(:inputs => workflow_inputs, :userid => get_user.userid, :zone => zone, :object => self) options[:miq_task_id] = miq_task_id - options[:configuration_script_payload_id] = workflow.id + options[:configuration_script_payload_id] = workflow_id options[:configuration_script_id] = MiqTask.find(miq_task_id).context_data[:workflow_instance_id] save! elsif self.class::AUTOMATE_DRIVES diff --git a/spec/models/service_template_provision_task_spec.rb b/spec/models/service_template_provision_task_spec.rb index cdc8b991623..d40a5e6246d 100644 --- a/spec/models/service_template_provision_task_spec.rb +++ b/spec/models/service_template_provision_task_spec.rb @@ -117,6 +117,37 @@ def service_resource_id(index, scaling_max) end context "with configuration_script_payload" do + it "creates a configuration_script instance" do + zone = FactoryBot.create(:zone, :name => "special") + automation_manager = FactoryBot.create(:ems_workflows_automation, :zone => zone) + payload = FactoryBot.create(:embedded_workflow, :manager => automation_manager) + @task_0.source = FactoryBot.create( + :service_template_generic, + :name => "Provision", + :resource_actions => [ + FactoryBot.create(:resource_action, :action => "Provision", :configuration_script_payload => payload) + ] + ) + + @task_0.deliver_queue + + expect(@task_0.reload.options.keys).to include(:miq_task_id, :configuration_script_id, :configuration_script_payload_id) + + configuration_script = ConfigurationScript.find(@task_0.options[:configuration_script_id]) + + expect(configuration_script).to have_attributes(:manager => automation_manager, :run_by_userid => @admin.userid, :status => "pending") + expect(MiqQueue.first).to have_attributes( + :instance_id => configuration_script.id, + :class_name => configuration_script.type, + :method_name => "run", + :queue_name => "automate", + :role => "automate", + :args => [hash_including(:object_type => "ServiceTemplateProvisionTask", :object_id => @task_0.id)] + ) + end + end + + context "with a configuration_script_payload in options" do it "creates a configuration_script instance" do zone = FactoryBot.create(:zone, :name => "special") automation_manager = FactoryBot.create(:ems_workflows_automation, :zone => zone)