From 8af04e5aa7aa33d276f70caa048815709cc60330 Mon Sep 17 00:00:00 2001 From: Simon Murray Date: Tue, 11 Jul 2017 11:45:30 +0100 Subject: [PATCH] (BKR-1155) Add a Prefered SSH Connection Method BKR-834 made vmhostname the default lookup method for SSH connections but this broke hypervisors which don't have DNS support e.g. OpenStack. By setting the connection method in the hypervisor we can choose where to prefer specific methods. --- lib/beaker/hypervisor/vmpooler.rb | 6 +++++- spec/beaker/hypervisor/vmpooler_spec.rb | 25 +++++++++++++++++++++++++ 2 files changed, 30 insertions(+), 1 deletion(-) diff --git a/lib/beaker/hypervisor/vmpooler.rb b/lib/beaker/hypervisor/vmpooler.rb index c1a480e..0690115 100644 --- a/lib/beaker/hypervisor/vmpooler.rb +++ b/lib/beaker/hypervisor/vmpooler.rb @@ -243,6 +243,10 @@ module Beaker @logger.debug "No disks to add for #{hostname}" end end + + # Override SSH connection method if not already explicitly configured. + # IP addresses can change across reboots with vmpooler so prefer DNS based resolution + @hosts.each {|h| h[:connection_method] ||= 'vmhostname'} end def cleanup @@ -352,4 +356,4 @@ module Beaker disk_added?(parsed[hostname], disk_size, index) end end -end \ No newline at end of file +end diff --git a/spec/beaker/hypervisor/vmpooler_spec.rb b/spec/beaker/hypervisor/vmpooler_spec.rb index 067fc12..bbfccf5 100644 --- a/spec/beaker/hypervisor/vmpooler_spec.rb +++ b/spec/beaker/hypervisor/vmpooler_spec.rb @@ -142,6 +142,31 @@ module Beaker /Vmpooler\.provision - requested VM templates \[[^\,]*\] not available/ ) # should be only one item in the list, no commas end + + it 'ignores the ssh connection type when explicitly configured' do + hosts = make_hosts + hosts.each {|h| h[:connection_method] = 'explicit_connection_type'} + + vmpooler = Beaker::Vmpooler.new( hosts, make_opts ) + vmpooler.provision + + hosts = vmpooler.instance_variable_get( :@hosts ) + hosts.each do | host | + expect(host[:connection_method]).to be === 'explicit_connection_type' + end + end + + it 'sets the ssh connection type to vmhostname when not explicitly configured' do + #p make_hosts + vmpooler = Beaker::Vmpooler.new( make_hosts, make_opts ) + vmpooler.provision + + hosts = vmpooler.instance_variable_get( :@hosts ) + hosts.each do | host | + # p host + expect(host[:connection_method]).to be === 'vmhostname' + end + end end describe "#cleanup" do