diff --git a/app/models/manageiq/providers/ansible_playbook_workflow.rb b/app/models/manageiq/providers/ansible_playbook_workflow.rb index 0176aacde2f..6e2724a1039 100644 --- a/app/models/manageiq/providers/ansible_playbook_workflow.rb +++ b/app/models/manageiq/providers/ansible_playbook_workflow.rb @@ -1,5 +1,5 @@ class ManageIQ::Providers::AnsiblePlaybookWorkflow < ManageIQ::Providers::AnsibleRunnerWorkflow - def self.job_options(env_vars, extra_vars, playbook_options, timeout, poll_interval, hosts, credentials) + def self.job_options(env_vars, extra_vars, playbook_options, timeout, poll_interval, hosts, credentials, verbosity) { :credentials => credentials, :env_vars => env_vars, @@ -8,6 +8,7 @@ def self.job_options(env_vars, extra_vars, playbook_options, timeout, poll_inter :playbook_path => playbook_options[:playbook_path], :timeout => timeout, :poll_interval => poll_interval, + :verbosity => verbosity } end @@ -17,9 +18,9 @@ def pre_playbook end def run_playbook - credentials, env_vars, extra_vars, hosts, playbook_path = options.values_at(:credentials, :env_vars, :extra_vars, :hosts, :playbook_path) + credentials, env_vars, extra_vars, hosts, playbook_path, verbosity = options.values_at(:credentials, :env_vars, :extra_vars, :hosts, :playbook_path, :verbosity) - response = Ansible::Runner.run_async(env_vars, extra_vars, playbook_path, :hosts => hosts, :credentials => credentials) + response = Ansible::Runner.run_async(env_vars, extra_vars, playbook_path, :hosts => hosts, :credentials => credentials, :verbosity => verbosity) if response.nil? queue_signal(:abort, "Failed to run ansible playbook", "error") else diff --git a/app/models/manageiq/providers/ansible_role_workflow.rb b/app/models/manageiq/providers/ansible_role_workflow.rb index b3065a9be3d..37f2f833ab9 100644 --- a/app/models/manageiq/providers/ansible_role_workflow.rb +++ b/app/models/manageiq/providers/ansible_role_workflow.rb @@ -1,5 +1,5 @@ class ManageIQ::Providers::AnsibleRoleWorkflow < ManageIQ::Providers::AnsibleRunnerWorkflow - def self.job_options(env_vars, extra_vars, role_options, timeout, poll_interval, hosts, credentials) + def self.job_options(env_vars, extra_vars, role_options, timeout, poll_interval, hosts, credentials, verbosity) { :credentials => credentials, :env_vars => env_vars, @@ -9,7 +9,8 @@ def self.job_options(env_vars, extra_vars, role_options, timeout, poll_interval, :roles_path => role_options[:roles_path], :role_skip_facts => role_options[:role_skip_facts], :timeout => timeout, - :poll_interval => poll_interval + :poll_interval => poll_interval, + :verbosity => verbosity } end diff --git a/app/models/manageiq/providers/ansible_runner_workflow.rb b/app/models/manageiq/providers/ansible_runner_workflow.rb index c9f9fc1024f..d107783f4ad 100644 --- a/app/models/manageiq/providers/ansible_runner_workflow.rb +++ b/app/models/manageiq/providers/ansible_runner_workflow.rb @@ -1,6 +1,10 @@ class ManageIQ::Providers::AnsibleRunnerWorkflow < Job - def self.create_job(env_vars, extra_vars, role_or_playbook_options, hosts = ["localhost"], credentials = [], timeout: 1.hour, poll_interval: 1.second) - super(name, job_options(env_vars, extra_vars, role_or_playbook_options, timeout, poll_interval, hosts, credentials)) + def self.create_job(env_vars, extra_vars, role_or_playbook_options, + hosts = ["localhost"], credentials = [], + timeout: 1.hour, poll_interval: 1.second, verbosity: 0) + options = job_options(env_vars, extra_vars, role_or_playbook_options, timeout, + poll_interval, hosts, credentials, verbosity) + super(name, options) end def current_job_timeout(_timeout_adjustment = 1) diff --git a/app/models/manageiq/providers/embedded_ansible/automation_manager/configuration_script.rb b/app/models/manageiq/providers/embedded_ansible/automation_manager/configuration_script.rb index 9dd87446dae..807ccc4b31a 100644 --- a/app/models/manageiq/providers/embedded_ansible/automation_manager/configuration_script.rb +++ b/app/models/manageiq/providers/embedded_ansible/automation_manager/configuration_script.rb @@ -35,7 +35,8 @@ def run(vars = {}) credentials = collect_credentials(vars) kwargs = {} - kwargs[:timeout] = vars[:execution_ttl].to_i.minutes if vars[:execution_ttl].present? + kwargs[:timeout] = vars[:execution_ttl].to_i.minutes if vars[:execution_ttl].present? + kwargs[:verbosity] = vars[:verbosity].to_i if vars[:verbosity].present? workflow.create_job({}, extra_vars, playbook_vars, vars[:hosts], credentials, kwargs).tap do |job| job.signal(:start) diff --git a/app/models/service_ansible_playbook.rb b/app/models/service_ansible_playbook.rb index ea0ad7d5eca..43dbadfc110 100644 --- a/app/models/service_ansible_playbook.rb +++ b/app/models/service_ansible_playbook.rb @@ -94,6 +94,7 @@ def get_job_options(action) hosts network_credential_id vault_credential_id + verbosity ].freeze def config_options(action) diff --git a/spec/models/manageiq/providers/ansible_playbook_workflow_spec.rb b/spec/models/manageiq/providers/ansible_playbook_workflow_spec.rb index 630bf9ef387..4e21854decb 100644 --- a/spec/models/manageiq/providers/ansible_playbook_workflow_spec.rb +++ b/spec/models/manageiq/providers/ansible_playbook_workflow_spec.rb @@ -1,6 +1,6 @@ describe ManageIQ::Providers::AnsiblePlaybookWorkflow do let(:job) { described_class.create_job(*options).tap { |job| job.state = state } } - let(:options) { [{"ENV" => "VAR"}, %w[arg1 arg2], {:playbook_path => "/path/to/playbook"}, %w[192.0.2.0 192.0.2.1]] } + let(:options) { [{"ENV" => "VAR"}, %w[arg1 arg2], {:playbook_path => "/path/to/playbook"}, %w[192.0.2.0 192.0.2.1], {:verbosity => 3}] } let(:state) { "waiting_to_start" } context ".create_job" do @@ -90,8 +90,18 @@ it "ansible-runner succeeds" do response_async = Ansible::Runner::ResponseAsync.new(:base_dir => "/path/to/results") - - expect(Ansible::Runner).to receive(:run_async).and_return(response_async) + runner_options = [ + {"ENV" => "VAR"}, + %w[arg1 arg2], + "/path/to/playbook", + { + :hosts => %w[192.0.2.0 192.0.2.1], + :credentials => [], + :verbosity => 3 + } + ] + + expect(Ansible::Runner).to receive(:run_async).with(*runner_options).and_return(response_async) expect(job).to receive(:queue_signal).with(:poll_runner) job.signal(:run_playbook) diff --git a/spec/models/manageiq/providers/ansible_role_workflow_spec.rb b/spec/models/manageiq/providers/ansible_role_workflow_spec.rb index 6ccbe19afc5..de88fe75c3a 100644 --- a/spec/models/manageiq/providers/ansible_role_workflow_spec.rb +++ b/spec/models/manageiq/providers/ansible_role_workflow_spec.rb @@ -1,7 +1,7 @@ describe ManageIQ::Providers::AnsibleRoleWorkflow do let(:job) { described_class.create_job(*options).tap { |job| job.state = state } } let(:role_options) { {:role_name => 'role_name', :roles_path => 'path/role', :role_skip_facts => true } } - let(:options) { [{"ENV" => "VAR"}, %w(arg1 arg2), role_options] } + let(:options) { [{"ENV" => "VAR"}, %w[arg1 arg2], role_options, {:verbosity => 4}] } let(:state) { "waiting_to_start" } context ".create_job" do diff --git a/spec/models/manageiq/providers/embedded_ansible/automation_manager/configuration_script_spec.rb b/spec/models/manageiq/providers/embedded_ansible/automation_manager/configuration_script_spec.rb index 2adce7fb5af..6be437d7c19 100644 --- a/spec/models/manageiq/providers/embedded_ansible/automation_manager/configuration_script_spec.rb +++ b/spec/models/manageiq/providers/embedded_ansible/automation_manager/configuration_script_spec.rb @@ -44,6 +44,7 @@ expect(job.options[:extra_vars]).to eq(:instance_ids => ["i-3434"]) expect(job.options[:playbook_path]).to eq(playbook.path) expect(job.options[:timeout]).to eq(1.hour) + expect(job.options[:verbosity]).to eq(0) end it "accepts different variables to launch a job template against" do @@ -62,6 +63,13 @@ expect(job).to be_a ManageIQ::Providers::AnsiblePlaybookWorkflow expect(job.options[:timeout]).to eq(5.minutes) end + + it "passes verbosity to the job when specified" do + job = manager.configuration_scripts.first.run(:verbosity => "5") + + expect(job).to be_a ManageIQ::Providers::AnsiblePlaybookWorkflow + expect(job.options[:verbosity]).to eq(5) + end end context "#merge_extra_vars" do diff --git a/spec/models/service_ansible_playbook_spec.rb b/spec/models/service_ansible_playbook_spec.rb index e1f26ff8e16..e9e66aa7efc 100644 --- a/spec/models/service_ansible_playbook_spec.rb +++ b/spec/models/service_ansible_playbook_spec.rb @@ -49,6 +49,7 @@ :vault_credential_id => credential_3.id, :playbook_id => 10, :execution_ttl => "5", + :verbosity => "3", :extra_vars => { "var1" => {:default => "default_val1"}, :var2 => {:default => "default_val2"}, @@ -124,7 +125,8 @@ :hosts => "default_host1,default_host2", :credential => credential_0.native_ref, :vault_credential => credential_3.native_ref, - :execution_ttl => "5" + :execution_ttl => "5", + :verbosity => "3" ) end end @@ -138,6 +140,7 @@ :credential => credential_1.native_ref, :vault_credential => credential_3.native_ref, :execution_ttl => "5", + :verbosity => "3", :extra_vars => { 'var1' => 'value1', 'var2' => 'value2', @@ -164,6 +167,7 @@ :credential => credential_0.native_ref, :vault_credential => credential_3.native_ref, :execution_ttl => "5", + :verbosity => "3", :extra_vars => { 'var1' => 'default_val1', 'var2' => 'default_val2',