From fe4fd78042e8780530b585d4e4ae1858415056e7 Mon Sep 17 00:00:00 2001 From: James Wong Date: Mon, 6 Feb 2017 09:33:51 -0500 Subject: [PATCH 1/3] Allow MachineCredential to create in Tower --- .../automation_manager/machine_credential.rb | 1 + .../machine_credential/api_create.rb | 36 ++++++++++++ .../machine_credential/api_create_spec.rb | 56 +++++++++++++++++++ 3 files changed, 93 insertions(+) create mode 100644 app/models/manageiq/providers/ansible_tower/automation_manager/machine_credential/api_create.rb create mode 100644 spec/models/manageiq/providers/ansible_tower/automation_manager/machine_credential/api_create_spec.rb diff --git a/app/models/manageiq/providers/ansible_tower/automation_manager/machine_credential.rb b/app/models/manageiq/providers/ansible_tower/automation_manager/machine_credential.rb index 16e74bf7c2a..d33d81dd2c3 100644 --- a/app/models/manageiq/providers/ansible_tower/automation_manager/machine_credential.rb +++ b/app/models/manageiq/providers/ansible_tower/automation_manager/machine_credential.rb @@ -1,2 +1,3 @@ class ManageIQ::Providers::AnsibleTower::AutomationManager::MachineCredential < ManageIQ::Providers::AutomationManager::Authentication + extend ApiCreate end diff --git a/app/models/manageiq/providers/ansible_tower/automation_manager/machine_credential/api_create.rb b/app/models/manageiq/providers/ansible_tower/automation_manager/machine_credential/api_create.rb new file mode 100644 index 00000000000..ca34dff8be5 --- /dev/null +++ b/app/models/manageiq/providers/ansible_tower/automation_manager/machine_credential/api_create.rb @@ -0,0 +1,36 @@ +class ManageIQ::Providers::AnsibleTower::AutomationManager::MachineCredential + module ApiCreate + def create_in_provider(manager_id, params) + manager = ExtManagementSystem.find(manager_id) + credential = manager.with_provider_connection do |connection| + connection.api.credentials.create!(params) + end + + # Get the record in our database + # TODO: This needs to be targeted refresh so it doesn't take too long + EmsRefresh.queue_refresh(manager, nil, true) if !manager.missing_credentials? && manager.authentication_status_ok? + + find_by(:resource_id => manager.id, :manager_ref => credential.id) + end + + def create_in_provider_queue(manager_id, params) + task_opts = { + :action => "Creating Ansible Tower MachineCredential", + :userid => "system" + } + + manager = ExtManagementSystem.find(manager_id) + + queue_opts = { + :args => [manager_id, params], + :class_name => "ManageIQ::Providers::AnsibleTower::AutomationManager::MachineCredential", + :method_name => "create_in_provider", + :priority => MiqQueue::HIGH_PRIORITY, + :role => "ems_operations", + :zone => manager.my_zone + } + + MiqTask.generic_action_with_callback(task_opts, queue_opts) + end + end +end diff --git a/spec/models/manageiq/providers/ansible_tower/automation_manager/machine_credential/api_create_spec.rb b/spec/models/manageiq/providers/ansible_tower/automation_manager/machine_credential/api_create_spec.rb new file mode 100644 index 00000000000..5bb762985f9 --- /dev/null +++ b/spec/models/manageiq/providers/ansible_tower/automation_manager/machine_credential/api_create_spec.rb @@ -0,0 +1,56 @@ +require 'ansible_tower_client' + +describe ManageIQ::Providers::AnsibleTower::AutomationManager::MachineCredential do + context "::ApiCreate" do + let(:provider) { FactoryGirl.create(:provider_ansible_tower, :with_authentication) } + let(:manager) { provider.managers.first } + let(:atc) { double("AnsibleTowerClient::Connection", :api => api) } + let(:api) { double("AnsibleTowerClient::Api", :credentials => credentials) } + let(:credentials) { double("AnsibleTowerClient::Collection", :create! => credential) } + let(:credential) { AnsibleTowerClient::Credential.new(nil, credential_json) } + + let(:credential_json) do + params.merge( + :id => 10, + ).stringify_keys.to_json + end + + let(:params) do + { + :description => "Description", + :name => "My Credential", + :related => {} + } + end + + it ".create_in_provider" do + expect(AnsibleTowerClient::Connection).to receive(:new).and_return(atc) + expect(EmsRefresh).to receive(:queue_refresh).and_return(store_new_credential(credential, manager)) + expect(ExtManagementSystem).to receive(:find).with(manager.id).and_return(manager) + + expect(described_class.create_in_provider(manager.id, params)).to be_a(described_class) + end + + it ".create_in_provider_queue" do + EvmSpecHelper.local_miq_server + task_id = described_class.create_in_provider_queue(manager.id, params) + expect(MiqTask.find(task_id)).to have_attributes(:name => "Creating Ansible Tower MachineCredential") + expect(MiqQueue.first).to have_attributes( + :args => [manager.id, params], + :class_name => "ManageIQ::Providers::AnsibleTower::AutomationManager::MachineCredential", + :method_name => "create_in_provider", + :priority => MiqQueue::HIGH_PRIORITY, + :role => "ems_operations", + :zone => manager.my_zone + ) + end + + def store_new_credential(credential, manager) + described_class.create!( + :resource => manager, + :manager_ref => credential.id.to_s, + :name => credential.name, + ) + end + end +end From 55427c6ff8baa0b976bf26db826499adedf632b1 Mon Sep 17 00:00:00 2001 From: James Wong Date: Wed, 8 Feb 2017 12:11:59 -0500 Subject: [PATCH 2/3] Create ManageIQ::Providers::AnsibleTower::AutomationManager::Credential and move api_create there --- .../ansible_tower/automation_manager/cloud_credential.rb | 2 +- .../ansible_tower/automation_manager/credential.rb | 3 +++ .../{machine_credential => credential}/api_create.rb | 6 +++--- .../ansible_tower/automation_manager/machine_credential.rb | 3 +-- .../ansible_tower/automation_manager/network_credential.rb | 2 +- ...ers-ansible_tower-automation_manager-cloud_credential.rb | 2 +- ...providers-ansible_tower-automation_manager-credential.rb | 4 ++++ ...s-ansible_tower-automation_manager-machine_credential.rb | 2 +- ...s-ansible_tower-automation_manager-network_credential.rb | 2 +- ...ders-ansible_tower-automation_manager-credential_spec.rb | 5 +++++ .../{machine_credential => credential}/api_create_spec.rb | 6 +++--- 11 files changed, 24 insertions(+), 13 deletions(-) create mode 100644 app/models/manageiq/providers/ansible_tower/automation_manager/credential.rb rename app/models/manageiq/providers/ansible_tower/automation_manager/{machine_credential => credential}/api_create.rb (81%) create mode 100644 lib/miq_automation_engine/service_models/miq_ae_service_manageiq-providers-ansible_tower-automation_manager-credential.rb create mode 100644 spec/lib/miq_automation_engine/service_models/miq_ae_service_manageiq-providers-ansible_tower-automation_manager-credential_spec.rb rename spec/models/manageiq/providers/ansible_tower/automation_manager/{machine_credential => credential}/api_create_spec.rb (91%) diff --git a/app/models/manageiq/providers/ansible_tower/automation_manager/cloud_credential.rb b/app/models/manageiq/providers/ansible_tower/automation_manager/cloud_credential.rb index 09e589f9596..23850b73957 100644 --- a/app/models/manageiq/providers/ansible_tower/automation_manager/cloud_credential.rb +++ b/app/models/manageiq/providers/ansible_tower/automation_manager/cloud_credential.rb @@ -1,2 +1,2 @@ -class ManageIQ::Providers::AnsibleTower::AutomationManager::CloudCredential < ManageIQ::Providers::AutomationManager::Authentication +class ManageIQ::Providers::AnsibleTower::AutomationManager::CloudCredential < ManageIQ::Providers::AnsibleTower::AutomationManager::Credential end diff --git a/app/models/manageiq/providers/ansible_tower/automation_manager/credential.rb b/app/models/manageiq/providers/ansible_tower/automation_manager/credential.rb new file mode 100644 index 00000000000..be3a468f2d7 --- /dev/null +++ b/app/models/manageiq/providers/ansible_tower/automation_manager/credential.rb @@ -0,0 +1,3 @@ +class ManageIQ::Providers::AnsibleTower::AutomationManager::Credential < ManageIQ::Providers::AutomationManager::Authentication + extend ApiCreate +end diff --git a/app/models/manageiq/providers/ansible_tower/automation_manager/machine_credential/api_create.rb b/app/models/manageiq/providers/ansible_tower/automation_manager/credential/api_create.rb similarity index 81% rename from app/models/manageiq/providers/ansible_tower/automation_manager/machine_credential/api_create.rb rename to app/models/manageiq/providers/ansible_tower/automation_manager/credential/api_create.rb index ca34dff8be5..f182c83d518 100644 --- a/app/models/manageiq/providers/ansible_tower/automation_manager/machine_credential/api_create.rb +++ b/app/models/manageiq/providers/ansible_tower/automation_manager/credential/api_create.rb @@ -1,4 +1,4 @@ -class ManageIQ::Providers::AnsibleTower::AutomationManager::MachineCredential +class ManageIQ::Providers::AnsibleTower::AutomationManager::Credential module ApiCreate def create_in_provider(manager_id, params) manager = ExtManagementSystem.find(manager_id) @@ -15,7 +15,7 @@ def create_in_provider(manager_id, params) def create_in_provider_queue(manager_id, params) task_opts = { - :action => "Creating Ansible Tower MachineCredential", + :action => "Creating #{name}", :userid => "system" } @@ -23,7 +23,7 @@ def create_in_provider_queue(manager_id, params) queue_opts = { :args => [manager_id, params], - :class_name => "ManageIQ::Providers::AnsibleTower::AutomationManager::MachineCredential", + :class_name => name, :method_name => "create_in_provider", :priority => MiqQueue::HIGH_PRIORITY, :role => "ems_operations", diff --git a/app/models/manageiq/providers/ansible_tower/automation_manager/machine_credential.rb b/app/models/manageiq/providers/ansible_tower/automation_manager/machine_credential.rb index d33d81dd2c3..7dc5fc3c4a6 100644 --- a/app/models/manageiq/providers/ansible_tower/automation_manager/machine_credential.rb +++ b/app/models/manageiq/providers/ansible_tower/automation_manager/machine_credential.rb @@ -1,3 +1,2 @@ -class ManageIQ::Providers::AnsibleTower::AutomationManager::MachineCredential < ManageIQ::Providers::AutomationManager::Authentication - extend ApiCreate +class ManageIQ::Providers::AnsibleTower::AutomationManager::MachineCredential < ManageIQ::Providers::AnsibleTower::AutomationManager::Credential end diff --git a/app/models/manageiq/providers/ansible_tower/automation_manager/network_credential.rb b/app/models/manageiq/providers/ansible_tower/automation_manager/network_credential.rb index d4600da7549..1e6a96221e4 100644 --- a/app/models/manageiq/providers/ansible_tower/automation_manager/network_credential.rb +++ b/app/models/manageiq/providers/ansible_tower/automation_manager/network_credential.rb @@ -1,2 +1,2 @@ -class ManageIQ::Providers::AnsibleTower::AutomationManager::NetworkCredential < ManageIQ::Providers::AutomationManager::Authentication +class ManageIQ::Providers::AnsibleTower::AutomationManager::NetworkCredential < ManageIQ::Providers::AnsibleTower::AutomationManager::Credential end diff --git a/lib/miq_automation_engine/service_models/miq_ae_service_manageiq-providers-ansible_tower-automation_manager-cloud_credential.rb b/lib/miq_automation_engine/service_models/miq_ae_service_manageiq-providers-ansible_tower-automation_manager-cloud_credential.rb index b5c8b8dbd5a..6f68a2c05de 100644 --- a/lib/miq_automation_engine/service_models/miq_ae_service_manageiq-providers-ansible_tower-automation_manager-cloud_credential.rb +++ b/lib/miq_automation_engine/service_models/miq_ae_service_manageiq-providers-ansible_tower-automation_manager-cloud_credential.rb @@ -1,4 +1,4 @@ module MiqAeMethodService - class MiqAeServiceManageIQ_Providers_AnsibleTower_AutomationManager_CloudCredential < MiqAeServiceManageIQ_Providers_AutomationManager_Authentication + class MiqAeServiceManageIQ_Providers_AnsibleTower_AutomationManager_CloudCredential < MiqAeServiceManageIQ_Providers_AnsibleTower_AutomationManager_MachineCredential end end diff --git a/lib/miq_automation_engine/service_models/miq_ae_service_manageiq-providers-ansible_tower-automation_manager-credential.rb b/lib/miq_automation_engine/service_models/miq_ae_service_manageiq-providers-ansible_tower-automation_manager-credential.rb new file mode 100644 index 00000000000..c48d0733811 --- /dev/null +++ b/lib/miq_automation_engine/service_models/miq_ae_service_manageiq-providers-ansible_tower-automation_manager-credential.rb @@ -0,0 +1,4 @@ +module MiqAeMethodService + class MiqAeServiceManageIQ_Providers_AnsibleTower_AutomationManager_Credential < MiqAeServiceManageIQ_Providers_AutomationManager_Authentication + end +end diff --git a/lib/miq_automation_engine/service_models/miq_ae_service_manageiq-providers-ansible_tower-automation_manager-machine_credential.rb b/lib/miq_automation_engine/service_models/miq_ae_service_manageiq-providers-ansible_tower-automation_manager-machine_credential.rb index 57f8a85e43c..b75928e1bbe 100644 --- a/lib/miq_automation_engine/service_models/miq_ae_service_manageiq-providers-ansible_tower-automation_manager-machine_credential.rb +++ b/lib/miq_automation_engine/service_models/miq_ae_service_manageiq-providers-ansible_tower-automation_manager-machine_credential.rb @@ -1,4 +1,4 @@ module MiqAeMethodService - class MiqAeServiceManageIQ_Providers_AnsibleTower_AutomationManager_MachineCredential < MiqAeServiceManageIQ_Providers_AutomationManager_Authentication + class MiqAeServiceManageIQ_Providers_AnsibleTower_AutomationManager_MachineCredential < MiqAeServiceManageIQ_Providers_AnsibleTower_AutomationManager_Credential end end diff --git a/lib/miq_automation_engine/service_models/miq_ae_service_manageiq-providers-ansible_tower-automation_manager-network_credential.rb b/lib/miq_automation_engine/service_models/miq_ae_service_manageiq-providers-ansible_tower-automation_manager-network_credential.rb index 97a13c1a56c..37c6098d8c5 100644 --- a/lib/miq_automation_engine/service_models/miq_ae_service_manageiq-providers-ansible_tower-automation_manager-network_credential.rb +++ b/lib/miq_automation_engine/service_models/miq_ae_service_manageiq-providers-ansible_tower-automation_manager-network_credential.rb @@ -1,4 +1,4 @@ module MiqAeMethodService - class MiqAeServiceManageIQ_Providers_AnsibleTower_AutomationManager_NetworkCredential < MiqAeServiceManageIQ_Providers_AutomationManager_Authentication + class MiqAeServiceManageIQ_Providers_AnsibleTower_AutomationManager_NetworkCredential < MiqAeServiceManageIQ_Providers_AnsibleTower_AutomationManager_MachineCredential end end diff --git a/spec/lib/miq_automation_engine/service_models/miq_ae_service_manageiq-providers-ansible_tower-automation_manager-credential_spec.rb b/spec/lib/miq_automation_engine/service_models/miq_ae_service_manageiq-providers-ansible_tower-automation_manager-credential_spec.rb new file mode 100644 index 00000000000..42605484bd3 --- /dev/null +++ b/spec/lib/miq_automation_engine/service_models/miq_ae_service_manageiq-providers-ansible_tower-automation_manager-credential_spec.rb @@ -0,0 +1,5 @@ +describe MiqAeMethodService::MiqAeServiceManageIQ_Providers_AnsibleTower_AutomationManager_Credential do + it "get the service model class" do + expect { described_class }.not_to raise_error + end +end diff --git a/spec/models/manageiq/providers/ansible_tower/automation_manager/machine_credential/api_create_spec.rb b/spec/models/manageiq/providers/ansible_tower/automation_manager/credential/api_create_spec.rb similarity index 91% rename from spec/models/manageiq/providers/ansible_tower/automation_manager/machine_credential/api_create_spec.rb rename to spec/models/manageiq/providers/ansible_tower/automation_manager/credential/api_create_spec.rb index 5bb762985f9..bbbbed765f9 100644 --- a/spec/models/manageiq/providers/ansible_tower/automation_manager/machine_credential/api_create_spec.rb +++ b/spec/models/manageiq/providers/ansible_tower/automation_manager/credential/api_create_spec.rb @@ -1,6 +1,6 @@ require 'ansible_tower_client' -describe ManageIQ::Providers::AnsibleTower::AutomationManager::MachineCredential do +describe ManageIQ::Providers::AnsibleTower::AutomationManager::Credential do context "::ApiCreate" do let(:provider) { FactoryGirl.create(:provider_ansible_tower, :with_authentication) } let(:manager) { provider.managers.first } @@ -34,10 +34,10 @@ it ".create_in_provider_queue" do EvmSpecHelper.local_miq_server task_id = described_class.create_in_provider_queue(manager.id, params) - expect(MiqTask.find(task_id)).to have_attributes(:name => "Creating Ansible Tower MachineCredential") + expect(MiqTask.find(task_id)).to have_attributes(:name => "Creating ManageIQ::Providers::AnsibleTower::AutomationManager::Credential") expect(MiqQueue.first).to have_attributes( :args => [manager.id, params], - :class_name => "ManageIQ::Providers::AnsibleTower::AutomationManager::MachineCredential", + :class_name => "ManageIQ::Providers::AnsibleTower::AutomationManager::Credential", :method_name => "create_in_provider", :priority => MiqQueue::HIGH_PRIORITY, :role => "ems_operations", From c8e2fe2eb82b1a59b13bab13c431ac668a0405b9 Mon Sep 17 00:00:00 2001 From: James Wong Date: Thu, 16 Feb 2017 13:32:14 -0500 Subject: [PATCH 3/3] remove api_create of credential --- .../automation_manager/credential.rb | 1 - .../credential/api_create.rb | 36 ------------ .../credential/api_create_spec.rb | 56 ------------------- 3 files changed, 93 deletions(-) delete mode 100644 app/models/manageiq/providers/ansible_tower/automation_manager/credential/api_create.rb delete mode 100644 spec/models/manageiq/providers/ansible_tower/automation_manager/credential/api_create_spec.rb diff --git a/app/models/manageiq/providers/ansible_tower/automation_manager/credential.rb b/app/models/manageiq/providers/ansible_tower/automation_manager/credential.rb index be3a468f2d7..7c1606af787 100644 --- a/app/models/manageiq/providers/ansible_tower/automation_manager/credential.rb +++ b/app/models/manageiq/providers/ansible_tower/automation_manager/credential.rb @@ -1,3 +1,2 @@ class ManageIQ::Providers::AnsibleTower::AutomationManager::Credential < ManageIQ::Providers::AutomationManager::Authentication - extend ApiCreate end diff --git a/app/models/manageiq/providers/ansible_tower/automation_manager/credential/api_create.rb b/app/models/manageiq/providers/ansible_tower/automation_manager/credential/api_create.rb deleted file mode 100644 index f182c83d518..00000000000 --- a/app/models/manageiq/providers/ansible_tower/automation_manager/credential/api_create.rb +++ /dev/null @@ -1,36 +0,0 @@ -class ManageIQ::Providers::AnsibleTower::AutomationManager::Credential - module ApiCreate - def create_in_provider(manager_id, params) - manager = ExtManagementSystem.find(manager_id) - credential = manager.with_provider_connection do |connection| - connection.api.credentials.create!(params) - end - - # Get the record in our database - # TODO: This needs to be targeted refresh so it doesn't take too long - EmsRefresh.queue_refresh(manager, nil, true) if !manager.missing_credentials? && manager.authentication_status_ok? - - find_by(:resource_id => manager.id, :manager_ref => credential.id) - end - - def create_in_provider_queue(manager_id, params) - task_opts = { - :action => "Creating #{name}", - :userid => "system" - } - - manager = ExtManagementSystem.find(manager_id) - - queue_opts = { - :args => [manager_id, params], - :class_name => name, - :method_name => "create_in_provider", - :priority => MiqQueue::HIGH_PRIORITY, - :role => "ems_operations", - :zone => manager.my_zone - } - - MiqTask.generic_action_with_callback(task_opts, queue_opts) - end - end -end diff --git a/spec/models/manageiq/providers/ansible_tower/automation_manager/credential/api_create_spec.rb b/spec/models/manageiq/providers/ansible_tower/automation_manager/credential/api_create_spec.rb deleted file mode 100644 index bbbbed765f9..00000000000 --- a/spec/models/manageiq/providers/ansible_tower/automation_manager/credential/api_create_spec.rb +++ /dev/null @@ -1,56 +0,0 @@ -require 'ansible_tower_client' - -describe ManageIQ::Providers::AnsibleTower::AutomationManager::Credential do - context "::ApiCreate" do - let(:provider) { FactoryGirl.create(:provider_ansible_tower, :with_authentication) } - let(:manager) { provider.managers.first } - let(:atc) { double("AnsibleTowerClient::Connection", :api => api) } - let(:api) { double("AnsibleTowerClient::Api", :credentials => credentials) } - let(:credentials) { double("AnsibleTowerClient::Collection", :create! => credential) } - let(:credential) { AnsibleTowerClient::Credential.new(nil, credential_json) } - - let(:credential_json) do - params.merge( - :id => 10, - ).stringify_keys.to_json - end - - let(:params) do - { - :description => "Description", - :name => "My Credential", - :related => {} - } - end - - it ".create_in_provider" do - expect(AnsibleTowerClient::Connection).to receive(:new).and_return(atc) - expect(EmsRefresh).to receive(:queue_refresh).and_return(store_new_credential(credential, manager)) - expect(ExtManagementSystem).to receive(:find).with(manager.id).and_return(manager) - - expect(described_class.create_in_provider(manager.id, params)).to be_a(described_class) - end - - it ".create_in_provider_queue" do - EvmSpecHelper.local_miq_server - task_id = described_class.create_in_provider_queue(manager.id, params) - expect(MiqTask.find(task_id)).to have_attributes(:name => "Creating ManageIQ::Providers::AnsibleTower::AutomationManager::Credential") - expect(MiqQueue.first).to have_attributes( - :args => [manager.id, params], - :class_name => "ManageIQ::Providers::AnsibleTower::AutomationManager::Credential", - :method_name => "create_in_provider", - :priority => MiqQueue::HIGH_PRIORITY, - :role => "ems_operations", - :zone => manager.my_zone - ) - end - - def store_new_credential(credential, manager) - described_class.create!( - :resource => manager, - :manager_ref => credential.id.to_s, - :name => credential.name, - ) - end - end -end