Skip to content

Commit

Permalink
Add ApiAnsibleMixin for extra_vars support of Ansible Tower.
Browse files Browse the repository at this point in the history
Refactor extra_vars support for ServiceAnsiblePlaybook.

#18005
  • Loading branch information
lfu committed Oct 10, 2018
1 parent 532970f commit 57e19be
Show file tree
Hide file tree
Showing 3 changed files with 50 additions and 28 deletions.
35 changes: 35 additions & 0 deletions app/models/mixins/ansible_extra_vars_mixin.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
module AnsibleExtraVarsMixin
extend ActiveSupport::Concern

def manageiq_env(user, miq_group, request_task = nil)
{
'api_url' => api_url,
'api_token' => api_token(user),
'user' => user.href_slug,
'group' => miq_group.href_slug,
'X_MIQ_Group' => user.current_group.description,
}.merge(task_url(request_task))
end

def manageiq_connection_env(user)
{
'url' => api_url,
'token' => api_token(user),
'X_MIQ_Group' => user.current_group.description
}
end

private

def api_token(user)
@api_token ||= Api::UserTokenService.new.generate_token(user.userid, 'api')
end

def api_url
@api_url ||= MiqRegion.my_region.remote_ws_url
end

def task_url(request_task)
request_task ? {'request_task' => "#{request_task.miq_request.href_slug}/#{request_task.href_slug}"} : {}
end
end
39 changes: 13 additions & 26 deletions app/models/service_ansible_playbook.rb
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
class ServiceAnsiblePlaybook < ServiceGeneric
include AnsibleExtraVarsMixin

delegate :job_template, :to => :service_template, :allow_nil => true

# A chance for taking options from automate script to override options from a service dialog
Expand All @@ -13,7 +15,12 @@ def preprocess(action, add_options = {})

def execute(action)
jt = job_template(action)
opts = get_job_options(action).deep_merge(:extra_vars => {'manageiq' => manageiq_extra_vars(action), 'manageiq_connection' => manageiq_connection_env})
opts = get_job_options(action).deep_merge(
:extra_vars => {
'manageiq' => service_manageiq_env(action),
'manageiq_connection' => manageiq_connection_env(evm_owner)
}
)
hosts = opts.delete(:hosts)

_log.info("Launching Ansible Tower job with options:")
Expand Down Expand Up @@ -61,32 +68,12 @@ def on_error(action)

private

def manageiq_extra_vars(action)
{
'api_url' => api_url,
'api_token' => api_token,
'service' => href_slug,
'user' => evm_owner.href_slug,
'group' => miq_group.href_slug,
'action' => action,
'X_MIQ_Group' => evm_owner.current_group.description
}.merge(request_options_extra_vars)
end

def manageiq_connection_env
def service_manageiq_env(action)
{
'url' => api_url,
'token' => api_token,
'X_MIQ_Group' => evm_owner.current_group.description
}
end

def api_token
@api_token ||= Api::UserTokenService.new.generate_token(evm_owner.userid, 'api')
end

def api_url
@api_url ||= MiqRegion.my_region.remote_ws_url
'service' => href_slug,
'action' => action
}.merge(manageiq_env(evm_owner, miq_group, miq_request_task))
.merge(request_options_extra_vars)
end

def request_options_extra_vars
Expand Down
4 changes: 2 additions & 2 deletions spec/models/service_ansible_playbook_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -144,7 +144,7 @@
let(:control_extras) { {'a' => 'A', 'b' => 'B', 'c' => 'C'} }
before do
FactoryGirl.create(:miq_region, :region => ApplicationRecord.my_region_number)
miq_request_task = FactoryGirl.create(:miq_request_task)
miq_request_task = FactoryGirl.create(:miq_request_task, :miq_request => FactoryGirl.create(:service_template_provision_request))
miq_request_task.update_attributes(:options => {:request_options => {:manageiq_extra_vars => control_extras}})
loaded_service.update_attributes(:evm_owner => FactoryGirl.create(:user_with_group),
:miq_group => FactoryGirl.create(:miq_group),
Expand All @@ -154,7 +154,7 @@
it 'creates an Ansible Tower job' do
expect(ManageIQ::Providers::EmbeddedAnsible::AutomationManager::Job).to receive(:create_job) do |jobtemp, opts|
expect(jobtemp).to eq(tower_job_temp)
exposed_miq = %w(api_url api_token service user group X_MIQ_Group) + control_extras.keys
exposed_miq = %w(api_url api_token service user group X_MIQ_Group request_task) + control_extras.keys
exposed_connection = %w(url token X_MIQ_Group)
expect(opts[:extra_vars].delete('manageiq').keys).to include(*exposed_miq)
expect(opts[:extra_vars].delete('manageiq_connection').keys).to include(*exposed_connection)
Expand Down

0 comments on commit 57e19be

Please sign in to comment.