Skip to content

Commit

Permalink
Merge pull request #13646 from jntullo/enhancement/create_service_tem…
Browse files Browse the repository at this point in the history
…plate_ansible_tower

add create_catalog_item to ServiceTemplateAnsibleTower
  • Loading branch information
gmcculloug committed Jan 31, 2017
2 parents 44ab254 + 22fa778 commit 848e68b
Show file tree
Hide file tree
Showing 2 changed files with 79 additions and 0 deletions.
25 changes: 25 additions & 0 deletions app/models/service_template_ansible_tower.rb
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,22 @@ class ServiceTemplateAnsibleTower < ServiceTemplate
alias_method :job_template, :configuration_script
alias_method :job_template=, :configuration_script=

def self.create_catalog_item(options, _auth_user = nil)
transaction do
create(options.except(:config_info)) do |service_template|
config_info = validate_config_info(options)

service_template.job_template = if config_info[:configuration_script_id]
ConfigurationScript.find(config_info[:configuration_script_id])
else
config_info[:configuration]
end

service_template.create_resource_actions(config_info)
end
end
end

def remove_invalid_resource
# remove the resource from both memory and table
service_resources.to_a.delete_if { |r| r.destroy unless r.resource(true) }
Expand All @@ -27,4 +43,13 @@ def self.default_reconfiguration_entry_point
def self.default_retirement_entry_point
nil
end

def self.validate_config_info(options)
config_info = options[:config_info]
unless config_info[:configuration_script_id] || config_info[:configuration]
raise _('Must provide configuration_script_id or configuration')
end
config_info
end
private_class_method :validate_config_info
end
54 changes: 54 additions & 0 deletions spec/models/service_template_ansible_tower_spec.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
describe ServiceTemplateAnsibleTower do
describe "#create_catalog_item" do
let(:ra1) { FactoryGirl.create(:resource_action, :action => 'Provision') }
let(:ra2) { FactoryGirl.create(:resource_action, :action => 'Retirement') }
let(:service_dialog) { FactoryGirl.create(:dialog) }
let(:configuration_script) { FactoryGirl.create(:configuration_script) }
let(:catalog_item_options) do
{
:name => 'Ansible Tower',
:service_type => 'generic_ansible_tower',
:prov_type => 'amazon',
:display => 'false',
:description => 'a description',
:config_info => {
:configuration_script_id => configuration_script.id,
:provision => {
:fqname => ra1.fqname,
:dialog_id => service_dialog.id
},
:retirement => {
:fqname => ra2.fqname,
:dialog_id => service_dialog.id
}
}
}
end

it 'creates and returns an ansible tower catalog item' do
service_template = ServiceTemplateAnsibleTower.create_catalog_item(catalog_item_options)
service_template.reload

expect(service_template.name).to eq('Ansible Tower')
expect(service_template.service_resources.count).to eq(1)
expect(service_template.dialogs.first).to eq(service_dialog)
expect(service_template.resource_actions.pluck(:action)).to include('Provision', 'Retirement')
expect(service_template.job_template).to eq(configuration_script)
end

it 'validates the presence of a configuration_script_id or configuration' do
catalog_item_options[:config_info].delete(:configuration_script_id)

expect do
ServiceTemplateAnsibleTower.create_catalog_item(catalog_item_options)
end.to raise_error(StandardError, 'Must provide configuration_script_id or configuration')
end

it 'accepts a configuration' do
catalog_item_options[:config_info] = { :configuration => configuration_script }
service_template = ServiceTemplateAnsibleTower.create_catalog_item(catalog_item_options)

expect(service_template.job_template).to eq(configuration_script)
end
end
end

0 comments on commit 848e68b

Please sign in to comment.