From c341956f132e54d1be96393688abca99e6971d98 Mon Sep 17 00:00:00 2001 From: Greg Blomquist Date: Thu, 2 Nov 2017 16:13:44 -0400 Subject: [PATCH] Merge pull request #125 from agrare/add_option_for_console_authentication Login with console authentication if available (cherry picked from commit f8943a1fcc8c85ec01c2ff440611609b180449fb) --- .../providers/vmware/infra_manager.rb | 10 +++- .../providers/vmware/infra_manager_spec.rb | 50 +++++++++++++++++++ 2 files changed, 59 insertions(+), 1 deletion(-) diff --git a/app/models/manageiq/providers/vmware/infra_manager.rb b/app/models/manageiq/providers/vmware/infra_manager.rb index c53ae4b10..dab0d27aa 100644 --- a/app/models/manageiq/providers/vmware/infra_manager.rb +++ b/app/models/manageiq/providers/vmware/infra_manager.rb @@ -32,8 +32,16 @@ def self.description @description ||= "VMware vCenter".freeze end + def supported_auth_types + %w(default console) + end + + def supports_authentication?(authtype) + supported_auth_types.include?(authtype.to_s) + end + def remote_console_vmrc_acquire_ticket - vim = connect + vim = connect(:auth_type => :console) ticket = vim.acquireCloneTicket # The ticket received is valid for 30 seconds, but we can't disconnect the diff --git a/spec/models/manageiq/providers/vmware/infra_manager_spec.rb b/spec/models/manageiq/providers/vmware/infra_manager_spec.rb index 964952ac8..5f8de1c6f 100644 --- a/spec/models/manageiq/providers/vmware/infra_manager_spec.rb +++ b/spec/models/manageiq/providers/vmware/infra_manager_spec.rb @@ -81,6 +81,48 @@ end end + context "#remote_console_vmrc_acquire_ticket" do + let(:ems) do + _, _, zone = EvmSpecHelper.create_guid_miq_server_zone + FactoryGirl.create(:ems_vmware, :zone => zone) + end + + context "with console credentials" do + before do + ems.authentications << FactoryGirl.create(:authentication, :userid => "root", :password => "vmware") + ems.authentications << FactoryGirl.create(:authentication, :authtype => "console", :userid => "readonly", :password => "1234") + end + + it "uses the console credentials" do + require 'VMwareWebService/MiqVim' + + vim = mock_vim_broker_connection + + expect(MiqVim).to receive(:new).with(ems.hostname, "readonly", "1234").and_return(vim) + expect(vim).to receive(:acquireCloneTicket) + + ems.remote_console_vmrc_acquire_ticket + end + end + + context "without console credentials" do + before do + ems.authentications << FactoryGirl.create(:authentication, :userid => "root", :password => "vmware") + end + + it "uses the default credentials" do + require 'VMwareWebService/MiqVim' + + vim = mock_vim_broker_connection + + expect(MiqVim).to receive(:new).with(ems.hostname, "root", "vmware").and_return(vim) + expect(vim).to receive(:acquireCloneTicket) + + ems.remote_console_vmrc_acquire_ticket + end + end + end + context "handling changes that may require EventCatcher restart" do before(:each) do guid, server, zone = EvmSpecHelper.create_guid_miq_server_zone @@ -123,4 +165,12 @@ def assert_event_catcher_restart_queued expect(q[0].instance_id).to eq(@ems.id) expect(q[0].role).to eq("event") end + + def mock_vim_broker_connection + vim = double(vim) + allow(vim).to receive(:server).and_return(ems.hostname) + allow(vim).to receive(:isVirtualCenter?).and_return(true) + allow(vim).to receive(:apiVersion).and_return(6.0) + vim + end end