forked from ManageIQ/manageiq
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request ManageIQ#14283 from carbonin/add_embedded_tower_in…
…itial_objects Create initial tower objects when we start the worker
- Loading branch information
Showing
7 changed files
with
274 additions
and
13 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,56 @@ | ||
module EmbeddedAnsibleWorker::ObjectManagement | ||
extend ActiveSupport::Concern | ||
|
||
def ensure_initial_objects(provider, connection) | ||
ensure_organization(provider, connection) | ||
ensure_credential(provider, connection) | ||
ensure_inventory(provider, connection) | ||
ensure_host(provider, connection) | ||
end | ||
|
||
def remove_demo_data(connection) | ||
connection.api.credentials.all(:name => "Demo Credential").each(&:destroy!) | ||
connection.api.inventories.all(:name => "Demo Inventory").each(&:destroy!) | ||
connection.api.job_templates.all(:name => "Demo Job Template").each(&:destroy!) | ||
connection.api.projects.all(:name => "Demo Project").each(&:destroy!) | ||
connection.api.organizations.all(:name => "Default").each(&:destroy!) | ||
end | ||
|
||
def ensure_organization(provider, connection) | ||
return if provider.default_organization | ||
|
||
provider.default_organization = connection.api.organizations.create!( | ||
:name => I18n.t("product.name"), | ||
:description => "#{I18n.t("product.name")} Default Organization" | ||
).id | ||
end | ||
|
||
def ensure_credential(provider, connection) | ||
return if provider.default_credential | ||
|
||
provider.default_credential = connection.api.credentials.create!( | ||
:name => "#{I18n.t("product.name")} Default Credential", | ||
:kind => "ssh", | ||
:organization => provider.default_organization | ||
).id | ||
end | ||
|
||
def ensure_inventory(provider, connection) | ||
return if provider.default_inventory | ||
|
||
provider.default_inventory = connection.api.inventories.create!( | ||
:name => "#{I18n.t("product.name")} Default Inventory", | ||
:organization => provider.default_organization | ||
).id | ||
end | ||
|
||
def ensure_host(provider, connection) | ||
return if provider.default_host | ||
|
||
provider.default_host = connection.api.hosts.create!( | ||
:name => "localhost", | ||
:inventory => provider.default_inventory, | ||
:variables => {'ansible_connection' => "local"}.to_yaml | ||
).id | ||
end | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,138 @@ | ||
describe EmbeddedAnsibleWorker do | ||
subject { FactoryGirl.create(:embedded_ansible_worker) } | ||
|
||
context "ObjectManagement concern" do | ||
let(:provider) { FactoryGirl.create(:provider_embedded_ansible) } | ||
let(:api_connection) { double("AnsibleAPIConnection", :api => tower_api) } | ||
let(:tower_api) do | ||
methods = { | ||
:organizations => org_collection, | ||
:credentials => cred_collection, | ||
:inventories => inv_collection, | ||
:hosts => host_collection, | ||
:job_templates => job_templ_collection, | ||
:projects => proj_collection | ||
|
||
} | ||
double("TowerAPI", methods) | ||
end | ||
|
||
let(:org_collection) { double("AnsibleOrgCollection", :all => [org_resource]) } | ||
let(:cred_collection) { double("AnsibleCredCollection", :all => [cred_resource]) } | ||
let(:inv_collection) { double("AnsibleInvCollection", :all => [inv_resource]) } | ||
let(:host_collection) { double("AnsibleHostCollection", :all => [host_resource]) } | ||
let(:job_templ_collection) { double("AnsibleJobTemplCollection", :all => [job_templ_resource]) } | ||
let(:proj_collection) { double("AnsibleProjCollection", :all => [proj_resource]) } | ||
|
||
let(:org_resource) { double("AnsibleOrgResource", :id => 12) } | ||
let(:cred_resource) { double("AnsibleCredResource", :id => 13) } | ||
let(:inv_resource) { double("AnsibleInvResource", :id => 14) } | ||
let(:host_resource) { double("AnsibleHostResource", :id => 15) } | ||
let(:job_templ_resource) { double("AnsibleJobTemplResource", :id => 16) } | ||
let(:proj_resource) { double("AnsibleProjResource", :id => 17) } | ||
|
||
describe "#ensure_initial_objects" do | ||
it "creates the expected objects" do | ||
expect(org_collection).to receive(:create!).and_return(org_resource) | ||
expect(cred_collection).to receive(:create!).and_return(cred_resource) | ||
expect(inv_collection).to receive(:create!).and_return(inv_resource) | ||
expect(host_collection).to receive(:create!).and_return(host_resource) | ||
|
||
subject.ensure_initial_objects(provider, api_connection) | ||
end | ||
end | ||
|
||
describe "#remove_demo_data" do | ||
it "removes the existing data" do | ||
expect(org_resource).to receive(:destroy!) | ||
expect(cred_resource).to receive(:destroy!) | ||
expect(inv_resource).to receive(:destroy!) | ||
expect(job_templ_resource).to receive(:destroy!) | ||
expect(proj_resource).to receive(:destroy!) | ||
|
||
subject.remove_demo_data(api_connection) | ||
end | ||
end | ||
|
||
describe "#ensure_organization" do | ||
it "sets the provider default organization" do | ||
expect(org_collection).to receive(:create!).with( | ||
:name => "ManageIQ", | ||
:description => "ManageIQ Default Organization" | ||
).and_return(org_resource) | ||
|
||
subject.ensure_organization(provider, api_connection) | ||
expect(provider.default_organization).to eq(12) | ||
end | ||
|
||
it "doesn't recreate the organization if one is already set" do | ||
provider.default_organization = 1 | ||
expect(org_collection).not_to receive(:create!) | ||
|
||
subject.ensure_organization(provider, api_connection) | ||
end | ||
end | ||
|
||
describe "#ensure_credential" do | ||
it "sets the provider default credential" do | ||
provider.default_organization = 123 | ||
expect(cred_collection).to receive(:create!).with( | ||
:name => "ManageIQ Default Credential", | ||
:kind => "ssh", | ||
:organization => 123 | ||
).and_return(cred_resource) | ||
|
||
subject.ensure_credential(provider, api_connection) | ||
expect(provider.default_credential).to eq(13) | ||
end | ||
|
||
it "doesn't recreate the credential if one is already set" do | ||
provider.default_credential = 2 | ||
expect(cred_collection).not_to receive(:create!) | ||
|
||
subject.ensure_credential(provider, api_connection) | ||
end | ||
end | ||
|
||
describe "#ensure_inventory" do | ||
it "sets the provider default inventory" do | ||
provider.default_organization = 123 | ||
expect(inv_collection).to receive(:create!).with( | ||
:name => "ManageIQ Default Inventory", | ||
:organization => 123 | ||
).and_return(inv_resource) | ||
|
||
subject.ensure_inventory(provider, api_connection) | ||
expect(provider.default_inventory).to eq(14) | ||
end | ||
|
||
it "doesn't recreate the inventory if one is already set" do | ||
provider.default_inventory = 3 | ||
expect(inv_collection).not_to receive(:create!) | ||
|
||
subject.ensure_inventory(provider, api_connection) | ||
end | ||
end | ||
|
||
describe "#ensure_host" do | ||
it "sets the provider default host" do | ||
provider.default_inventory = 234 | ||
expect(host_collection).to receive(:create!).with( | ||
:name => "localhost", | ||
:inventory => 234, | ||
:variables => "---\nansible_connection: local\n" | ||
).and_return(host_resource) | ||
|
||
subject.ensure_host(provider, api_connection) | ||
expect(provider.default_host).to eq(15) | ||
end | ||
|
||
it "doesn't recreate the host if one is already set" do | ||
provider.default_host = 1 | ||
expect(host_collection).not_to receive(:create!) | ||
|
||
subject.ensure_host(provider, api_connection) | ||
end | ||
end | ||
end | ||
end |