From d2cbf43cb56060d5b2aeb37e3ce10d5bfc1ba028 Mon Sep 17 00:00:00 2001 From: Boris Odnopozov Date: Sun, 19 Mar 2017 19:37:09 +0200 Subject: [PATCH] Add setting to disable OvirtSDK Add a setting that by default will disable the use of the OvirtSDK for refresh and provisioning. --- .../redhat/infra_manager/api_integration.rb | 9 +++ .../redhat/infra_manager/inventory/builder.rb | 2 +- .../refresh/parse/parser_builder.rb | 2 +- .../refresh/refresher_builder.rb | 2 +- config/settings.yml | 1 + .../refresh/parse/parser_builder_spec.rb | 55 +++++++++++++++++++ .../refresh/refresher_4_1_spec.rb | 1 + .../infra_manager/refresh/refresher_spec.rb | 12 ++++ .../refresh/refresher_target_vm_4_spec.rb | 1 + 9 files changed, 82 insertions(+), 3 deletions(-) create mode 100644 spec/models/manageiq/providers/redhat/infra_manager/refresh/parse/parser_builder_spec.rb diff --git a/app/models/manageiq/providers/redhat/infra_manager/api_integration.rb b/app/models/manageiq/providers/redhat/infra_manager/api_integration.rb index 4683a7b38aa..0485329af27 100644 --- a/app/models/manageiq/providers/redhat/infra_manager/api_integration.rb +++ b/app/models/manageiq/providers/redhat/infra_manager/api_integration.rb @@ -230,6 +230,15 @@ def highest_supported_api_version supported_api_versions.sort.last end + def highest_allowed_api_version + return 3 unless use_ovirt_sdk? + highest_supported_api_version + end + + def use_ovirt_sdk? + ::Settings.ems.ems_redhat.use_ovirt_engine_sdk + end + class_methods do def api3_supported_features [] diff --git a/app/models/manageiq/providers/redhat/infra_manager/inventory/builder.rb b/app/models/manageiq/providers/redhat/infra_manager/inventory/builder.rb index 54bba8172b8..6bb57f122f6 100644 --- a/app/models/manageiq/providers/redhat/infra_manager/inventory/builder.rb +++ b/app/models/manageiq/providers/redhat/infra_manager/inventory/builder.rb @@ -8,7 +8,7 @@ def initialize(ems) def build strategy_model = ManageIQ::Providers::Redhat::InfraManager::Inventory::Strategies - api_version = ext_management_system.highest_supported_api_version + api_version = ext_management_system.highest_allowed_api_version "#{strategy_model}::V#{api_version}".constantize end end diff --git a/app/models/manageiq/providers/redhat/infra_manager/refresh/parse/parser_builder.rb b/app/models/manageiq/providers/redhat/infra_manager/refresh/parse/parser_builder.rb index 8c1140a61ce..5b283b6ab26 100644 --- a/app/models/manageiq/providers/redhat/infra_manager/refresh/parse/parser_builder.rb +++ b/app/models/manageiq/providers/redhat/infra_manager/refresh/parse/parser_builder.rb @@ -9,7 +9,7 @@ def initialize(ems, options = {}) def build parse_model = ManageIQ::Providers::Redhat::InfraManager::Refresh::Parse::Strategies - api_version = force_version || ext_management_system.highest_supported_api_version + api_version = force_version || ext_management_system.highest_allowed_api_version "#{parse_model}::Api#{api_version}".constantize end end diff --git a/app/models/manageiq/providers/redhat/infra_manager/refresh/refresher_builder.rb b/app/models/manageiq/providers/redhat/infra_manager/refresh/refresher_builder.rb index 360d47c82aa..fecae55feb3 100644 --- a/app/models/manageiq/providers/redhat/infra_manager/refresh/refresher_builder.rb +++ b/app/models/manageiq/providers/redhat/infra_manager/refresh/refresher_builder.rb @@ -8,7 +8,7 @@ def initialize(ems) def build strategy_model = ManageIQ::Providers::Redhat::InfraManager::Refresh::Strategies - api_version = ext_management_system.highest_supported_api_version + api_version = ext_management_system.highest_allowed_api_version "#{strategy_model}::Api#{api_version}".constantize end end diff --git a/config/settings.yml b/config/settings.yml index 707b9316fdb..da4ad2bae24 100644 --- a/config/settings.yml +++ b/config/settings.yml @@ -101,6 +101,7 @@ :omit_default_port: true :read_timeout: 60 :ems_redhat: + :use_ovirt_engine_sdk: false :resolve_ip_addresses: true :inventory: :read_timeout: 1.hour diff --git a/spec/models/manageiq/providers/redhat/infra_manager/refresh/parse/parser_builder_spec.rb b/spec/models/manageiq/providers/redhat/infra_manager/refresh/parse/parser_builder_spec.rb new file mode 100644 index 00000000000..ce9a98a1af0 --- /dev/null +++ b/spec/models/manageiq/providers/redhat/infra_manager/refresh/parse/parser_builder_spec.rb @@ -0,0 +1,55 @@ +describe ManageIQ::Providers::Redhat::InfraManager::Refresh::Parse::ParserBuilder do + let(:ems) { FactoryGirl.build(:ems_redhat) } + let(:use_ovirt_engine_sdk) { true } + let(:options) { {} } + subject { described_class.new(ems, options).build } + describe 'chooses the right parsing strategy' do + before do + ::Settings.ems.ems_redhat.use_ovirt_engine_sdk = use_ovirt_engine_sdk + end + + context "when v4 api" do + before(:each) do + allow(ems).to receive(:highest_supported_api_version).and_return(4) + end + + it 'returns the api4 parser' do + expect(subject).to eq(ManageIQ::Providers::Redhat::InfraManager::Refresh::Parse::Strategies::Api4) + end + + context "when use_ovirt_engine_sdk setting is turned to false" do + let(:use_ovirt_engine_sdk) { false } + it 'returns the api3 parser' do + expect(subject).to eq(ManageIQ::Providers::Redhat::InfraManager::Refresh::Parse::Strategies::Api3) + end + end + + context "forced version 3" do + let(:options) { { :force_version => 3 } } + + it 'returns the api3 parser' do + expect(subject).to eq(ManageIQ::Providers::Redhat::InfraManager::Refresh::Parse::Strategies::Api3) + end + end + + end + + context "when v3 api" do + before(:each) do + allow(ems).to receive(:highest_supported_api_version).and_return(3) + end + + it 'returns the api3 parser' do + expect(subject).to eq(ManageIQ::Providers::Redhat::InfraManager::Refresh::Parse::Strategies::Api3) + end + + context "forced version 4" do + let(:options) { { :force_version => 4 } } + + it 'returns the api4 parser' do + expect(subject).to eq(ManageIQ::Providers::Redhat::InfraManager::Refresh::Parse::Strategies::Api4) + end + end + end + end +end diff --git a/spec/models/manageiq/providers/redhat/infra_manager/refresh/refresher_4_1_spec.rb b/spec/models/manageiq/providers/redhat/infra_manager/refresh/refresher_4_1_spec.rb index 4225fc8988b..c61067d5f8d 100644 --- a/spec/models/manageiq/providers/redhat/infra_manager/refresh/refresher_4_1_spec.rb +++ b/spec/models/manageiq/providers/redhat/infra_manager/refresh/refresher_4_1_spec.rb @@ -5,6 +5,7 @@ :port => 8443) @ems.update_authentication(:default => {:userid => "admin@internal", :password => "123456"}) allow(@ems).to receive(:supported_api_versions).and_return([3, 4]) + ::Settings.ems.ems_redhat.use_ovirt_engine_sdk = true end it ".ems_type" do diff --git a/spec/models/manageiq/providers/redhat/infra_manager/refresh/refresher_spec.rb b/spec/models/manageiq/providers/redhat/infra_manager/refresh/refresher_spec.rb index ae7510b9fd4..ea836625b11 100644 --- a/spec/models/manageiq/providers/redhat/infra_manager/refresh/refresher_spec.rb +++ b/spec/models/manageiq/providers/redhat/infra_manager/refresh/refresher_spec.rb @@ -1,6 +1,11 @@ describe ManageIQ::Providers::Redhat::InfraManager::Refresh::Refresher do let(:ems) { FactoryGirl.build(:ems_redhat) } + let(:use_ovirt_engine_sdk) { true } describe 'chooses the right refresher strategy' do + before do + ::Settings.ems.ems_redhat.use_ovirt_engine_sdk = use_ovirt_engine_sdk + end + context "when v4 api" do before(:each) do allow(ems).to receive(:highest_supported_api_version).and_return(4) @@ -9,6 +14,13 @@ it 'returns the api4 refresher' do expect(ems.refresher).to eq(ManageIQ::Providers::Redhat::InfraManager::Refresh::Strategies::Api4) end + + context "when use_ovirt_engine_sdk setting is turned to false" do + let(:use_ovirt_engine_sdk) { false } + it 'returns the api4 refresher' do + expect(ems.refresher).to eq(ManageIQ::Providers::Redhat::InfraManager::Refresh::Strategies::Api3) + end + end end context "when v3 api" do diff --git a/spec/models/manageiq/providers/redhat/infra_manager/refresh/refresher_target_vm_4_spec.rb b/spec/models/manageiq/providers/redhat/infra_manager/refresh/refresher_target_vm_4_spec.rb index 37dfb691ad9..33137a78cb0 100644 --- a/spec/models/manageiq/providers/redhat/infra_manager/refresh/refresher_target_vm_4_spec.rb +++ b/spec/models/manageiq/providers/redhat/infra_manager/refresh/refresher_target_vm_4_spec.rb @@ -9,6 +9,7 @@ @ems.default_endpoint.path = "/ovirt-engine/api" allow(@ems).to receive(:supported_api_versions).and_return([3, 4]) allow(@ems).to receive(:resolve_ip_address).with(ip_address).and_return(ip_address) + ::Settings.ems.ems_redhat.use_ovirt_engine_sdk = true end it ".ems_type" do