Skip to content

Commit

Permalink
Pass verbosity from services to ansible runner
Browse files Browse the repository at this point in the history
  • Loading branch information
carbonin committed Jul 18, 2019
1 parent 7fcd377 commit 1458e74
Show file tree
Hide file tree
Showing 9 changed files with 43 additions and 13 deletions.
7 changes: 4 additions & 3 deletions app/models/manageiq/providers/ansible_playbook_workflow.rb
Original file line number Diff line number Diff line change
@@ -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,
Expand All @@ -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

Expand All @@ -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
Expand Down
5 changes: 3 additions & 2 deletions app/models/manageiq/providers/ansible_role_workflow.rb
Original file line number Diff line number Diff line change
@@ -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,
Expand All @@ -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

Expand Down
8 changes: 6 additions & 2 deletions app/models/manageiq/providers/ansible_runner_workflow.rb
Original file line number Diff line number Diff line change
@@ -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)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
1 change: 1 addition & 0 deletions app/models/service_ansible_playbook.rb
Original file line number Diff line number Diff line change
Expand Up @@ -94,6 +94,7 @@ def get_job_options(action)
hosts
network_credential_id
vault_credential_id
verbosity
].freeze

def config_options(action)
Expand Down
16 changes: 13 additions & 3 deletions spec/models/manageiq/providers/ansible_playbook_workflow_spec.rb
Original file line number Diff line number Diff line change
@@ -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
Expand Down Expand Up @@ -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)
Expand Down
Original file line number Diff line number Diff line change
@@ -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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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
Expand Down
6 changes: 5 additions & 1 deletion spec/models/service_ansible_playbook_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -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"},
Expand Down Expand Up @@ -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
Expand All @@ -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',
Expand All @@ -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',
Expand Down

0 comments on commit 1458e74

Please sign in to comment.