diff --git a/app/models/manageiq/providers/ansible_tower/shared/automation_manager/job.rb b/app/models/manageiq/providers/ansible_tower/shared/automation_manager/job.rb index e81816e2191..f96ef5354c1 100644 --- a/app/models/manageiq/providers/ansible_tower/shared/automation_manager/job.rb +++ b/app/models/manageiq/providers/ansible_tower/shared/automation_manager/job.rb @@ -55,12 +55,17 @@ def refresh_ems end def update_with_provider_object(raw_job) - self.ems_ref = raw_job.id - self.status = raw_job.status - self.parameters = - raw_job.extra_vars_hash.collect do |para_key, para_val| + self.ems_ref ||= raw_job.id + self.status = raw_job.status + self.start_time ||= raw_job.started + self.finish_time ||= raw_job.finished + self.verbosity ||= raw_job.verbosity + + if parameters.empty? + self.parameters = raw_job.extra_vars_hash.collect do |para_key, para_val| OrchestrationStackParameter.new(:name => para_key, :value => para_val, :ems_ref => "#{raw_job.id}_#{para_key}") - end if parameters.empty? + end + end save! end private :update_with_provider_object diff --git a/app/models/service_ansible_playbook.rb b/app/models/service_ansible_playbook.rb index 349c3b33e74..b8e33da0170 100644 --- a/app/models/service_ansible_playbook.rb +++ b/app/models/service_ansible_playbook.rb @@ -13,6 +13,7 @@ def execute(action) _log.info("Launching Ansible Tower job with options: #{opts}") new_job = ManageIQ::Providers::AnsibleTower::AutomationManager::Job.create_job(jt, opts) + update_job_for_playbook(action, new_job, opts[:hosts]) _log.info("Ansible Tower job with ref #{new_job.ems_ref} was created.") add_resource!(new_job, :name => action) @@ -119,4 +120,11 @@ def inventory_name(action) def use_default_inventory?(hosts) hosts.blank? || hosts == 'localhost' end + + # update job attributes only available to playbook provisioning + def update_job_for_playbook(action, job, hosts) + hosts = (hosts || 'localhost').split(',') + playbook_id = options.fetch_path(:config_info, action.downcase.to_sym, :playbook_id) + job.update_attributes(:configuration_script_base_id => playbook_id, :hosts => hosts) + end end diff --git a/spec/models/manageiq/providers/ansible_tower/automation_manager/job_spec.rb b/spec/models/manageiq/providers/ansible_tower/automation_manager/job_spec.rb index 1464a594aa6..85545b8b94d 100644 --- a/spec/models/manageiq/providers/ansible_tower/automation_manager/job_spec.rb +++ b/spec/models/manageiq/providers/ansible_tower/automation_manager/job_spec.rb @@ -15,7 +15,10 @@ 'id' => '1', 'name' => template.name, 'status' => 'Successful', - 'extra_vars' => {'param1' => 'val1'}.to_json + 'extra_vars' => {'param1' => 'val1'}.to_json, + 'verbosity' => 3, + 'started' => Time.current, + 'finished' => Time.current, ).tap { |rjob| allow(rjob).to receive(:stdout).and_return('job stdout') } end @@ -52,6 +55,13 @@ it 'syncs the job with the provider' do subject.refresh_ems + expect(subject).to have_attributes( + :ems_ref => the_raw_job.id, + :status => the_raw_job.status, + :start_time => the_raw_job.started, + :finish_time => the_raw_job.finished, + :verbosity => the_raw_job.verbosity + ) expect(subject.ems_ref).to eq(the_raw_job.id) expect(subject.status).to eq(the_raw_job.status) expect(subject.parameters.first).to have_attributes(:name => 'param1', :value => 'val1') diff --git a/spec/models/manageiq/providers/embedded_ansible/automation_manager/job_spec.rb b/spec/models/manageiq/providers/embedded_ansible/automation_manager/job_spec.rb index 2157cc88083..5df3c89bfef 100644 --- a/spec/models/manageiq/providers/embedded_ansible/automation_manager/job_spec.rb +++ b/spec/models/manageiq/providers/embedded_ansible/automation_manager/job_spec.rb @@ -15,7 +15,10 @@ 'id' => '1', 'name' => template.name, 'status' => 'Successful', - 'extra_vars' => {'param1' => 'val1'}.to_json + 'extra_vars' => {'param1' => 'val1'}.to_json, + 'verbosity' => 3, + 'started' => Time.current, + 'finished' => Time.current, ).tap { |rjob| allow(rjob).to receive(:stdout).and_return('job stdout') } end @@ -52,6 +55,13 @@ it 'syncs the job with the provider' do subject.refresh_ems + expect(subject).to have_attributes( + :ems_ref => the_raw_job.id, + :status => the_raw_job.status, + :start_time => the_raw_job.started, + :finish_time => the_raw_job.finished, + :verbosity => the_raw_job.verbosity + ) expect(subject.ems_ref).to eq(the_raw_job.id) expect(subject.status).to eq(the_raw_job.status) expect(subject.parameters.first).to have_attributes(:name => 'param1', :value => 'val1') diff --git a/spec/models/service_ansible_playbook_spec.rb b/spec/models/service_ansible_playbook_spec.rb index ff51419e6d2..8c1cab1810c 100644 --- a/spec/models/service_ansible_playbook_spec.rb +++ b/spec/models/service_ansible_playbook_spec.rb @@ -11,7 +11,9 @@ service_template = FactoryGirl.create(:service_template_ansible_playbook) service_template.resource_actions.build(:action => action, :configuration_template => tower_job_temp) service_template.save! - FactoryGirl.create(:service_ansible_playbook, :options => provision_options, :service_template => service_template) + FactoryGirl.create(:service_ansible_playbook, + :options => provision_options.merge(config_info_options), + :service_template => service_template) end let(:executed_service) do @@ -35,8 +37,9 @@ { :config_info => { :provision => { - :hosts => "default_host1,default_host2", - :extra_vars => { + :hosts => "default_host1,default_host2", + :playbook_id => 10, + :extra_vars => { "var1" => "default_val1", "var2" => "default_val2", "var3" => "default_val3" @@ -59,6 +62,7 @@ :provision_job_options => { :credential => 1, :inventory => 2, + :hosts => "default_host1,default_host2", :extra_vars => {'var1' => 'value1', 'var2' => 'value2'} } } @@ -109,7 +113,12 @@ expect(ManageIQ::Providers::AnsibleTower::AutomationManager::Job) .to receive(:create_job).with(tower_job_temp, provision_options[:provision_job_options]).and_return(tower_job) loaded_service.execute(action) - expect(loaded_service.job(action)).to eq(tower_job) + expected_job_attributes = { + :id => tower_job.id, + :hosts => config_info_options.fetch_path(:config_info, :provision, :hosts).split(','), + :configuration_script_base_id => config_info_options.fetch_path(:config_info, :provision, :playbook_id) + } + expect(loaded_service.job(action)).to have_attributes(expected_job_attributes) end end diff --git a/spec/models/service_ansible_tower_spec.rb b/spec/models/service_ansible_tower_spec.rb index ed24bc9d406..6cc17b476e4 100644 --- a/spec/models/service_ansible_tower_spec.rb +++ b/spec/models/service_ansible_tower_spec.rb @@ -65,7 +65,13 @@ expect(template).to be_kind_of ConfigurationScript expect(opts).to have_key(:limit) expect(opts).to have_key(:extra_vars) - end.and_return(double(:raw_job, :id => 1, :status => "completed", :extra_vars_hash => {'var_name' => 'var_val'})) + end.and_return(double(:raw_job, + :id => 1, + :status => "completed", + :verbosity => 0, + :started => Time.current, + :finished => Time.current, + :extra_vars_hash => {'var_name' => 'var_val'})) job_done = service_mix_dialog_setter.launch_job expect(job_done).to have_attributes(:ems_ref => "1", :status => "completed")