beaker 3.21.0 → 3.21.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- MmE5NjhiZTUwNGM4MzE4Y2IxMjY3YjVlZWYwNzFlNTYwNDNlODUwMA==
4
+ NTU2YTkyMzA2NzA5NmZhMzNjNDY1ODc1YjhiZTQ5NzdhZDM1OTlmNA==
5
5
  data.tar.gz: !binary |-
6
- MWViNWY1ZjJiNWVmYWU3N2QzMGMyZmQzZWQ0OGQ5YzVhYWQ5YjAzNQ==
6
+ OTRiN2MxOGUxNGQ2N2UwMDhjYjQyNTBkMzY3YjA5Mjc0Mzk0MGUxMA==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- NzFiZmUzY2ZkNDU1MTkyOGU5OGJmZDE0OGI1ZjYwZmIwMDgxMzgyYjE5ZDky
10
- NzBhZWQ0ZTNlZTMwMDZjODgyY2FmYTJhMWJiMDMxNWNiMjAxMTQ4NWExOWM1
11
- OGY2MDlhYmZmMTFlZTk5ZjQyYmVlOGRhYTE0ZjM1OGM5MDZiN2E=
9
+ OTRkYmJlYTViOTgyNTY1Mjk0NjQ1ODM0NDJhZjkyNDc2ZGM2M2RlNzg2NDJj
10
+ MGE3MDIxYzFkMjgzYjZjMzc4NzU0M2Y0MjdjOTAyNmFkYmIyMWU0Yjg4MmY3
11
+ OGNmOTUyMTZhY2MwMGI4OWFlZTAxZTdkOTU1MDZjOGEyMzJkODc=
12
12
  data.tar.gz: !binary |-
13
- ZGE5MGI0MWM5Y2U5MTYwMmQ2NGEzNmVkN2E3MTMzOGU0NDVjZGZkYTRlNWQ0
14
- Y2FjMjMzY2I0OWQ5MmM5MjY3NGViZGIwNjg4ZTUyZDUzZDNmZDY1NzNkOTAz
15
- NTJjNDRhMjVlOTU0YmNiYmEzYmI2MWEyZTI4ZmU1NmFiNWIyNmU=
13
+ NGJmNDJiOTAwNzFjYmU3Y2VhYmZiMGJiMmMxODVmNDA1Yzg3ZTY5YTg2MWM2
14
+ YjIxMzhkYzliNjc2MTA5M2VmMjVjZmQ0ODhkNTU3MGEzMjcxODZjODhjZWI4
15
+ YWRlYjE4NjgyNmUxNjkwNDlkNTRjMDlhNWE3ZTUxNGM1ODY2YjE=
@@ -276,7 +276,7 @@ module Beaker
276
276
  # create new connection object if necessary
277
277
  @connection ||= SshConnection.connect( { :ip => self['ip'], :vmhostname => self['vmhostname'], :hostname => @name },
278
278
  self['user'],
279
- self['ssh'], { :logger => @logger, :ssh_connection_preference => self[:ssh_connection_preference] } )
279
+ self['ssh'], { :logger => @logger } )
280
280
  # update connection information
281
281
  if self['ip'] && (@connection.ip != self['ip'])
282
282
  @connection.ip = self['ip']
@@ -45,8 +45,8 @@ module Beaker
45
45
  end
46
46
 
47
47
  hypervisor = hyper_class.new(hosts_to_provision, options)
48
- self.set_ssh_connection_preference(hosts_to_provision, hypervisor)
49
48
  hypervisor.provision if options[:provision]
49
+
50
50
  hypervisor
51
51
  end
52
52
 
@@ -65,29 +65,6 @@ module Beaker
65
65
  nil
66
66
  end
67
67
 
68
- DEFAULT_CONNECTION_PREFERENCE = ['ip', 'vmhostname', 'hostname']
69
- #SSH connection method preference. Can be overwritten by hypervisor to change the order
70
- def connection_preference
71
- DEFAULT_CONNECTION_PREFERENCE
72
- end
73
-
74
- #Check if overriding method returns correct array with ip, vmhostname hostname as elements
75
- def self.set_ssh_connection_preference(hosts_to_provision, hypervisor)
76
- if hypervisor.connection_preference.sort == DEFAULT_CONNECTION_PREFERENCE.sort
77
- hosts_to_provision.each{ |h| h[:ssh_connection_preference] = hypervisor.connection_preference}
78
- else
79
- raise ArgumentError, <<-HEREDOC
80
- Hypervisor's overriding connection_pereference method is not matching the API.
81
-
82
- Make sure your hypervisor's connection_preference returns an array
83
- containing the following elements in any order you prefer:
84
- "ip", "hostname", "vmhostname"
85
-
86
- Please check hypervisor.rb file's "self.connection_preference" method for an example
87
- HEREDOC
88
- end
89
- end
90
-
91
68
  #Proxy package managers on tests hosts created by this hypervisor, runs before validation and configuration.
92
69
  def proxy_package_manager
93
70
  if @options[:package_proxy]
@@ -6,7 +6,7 @@ module Beaker
6
6
  class SshConnection
7
7
 
8
8
  attr_accessor :logger
9
- attr_accessor :ip, :vmhostname, :hostname, :ssh_connection_preference
9
+ attr_accessor :ip, :vmhostname, :hostname
10
10
 
11
11
  RETRYABLE_EXCEPTIONS = [
12
12
  SocketError,
@@ -33,7 +33,6 @@ module Beaker
33
33
  @ssh_opts = ssh_opts
34
34
  @logger = options[:logger]
35
35
  @options = options
36
- @ssh_connection_preference = @options[:ssh_connection_preference]
37
36
  end
38
37
 
39
38
  def self.connect name_hash, user = 'root', ssh_opts = {}, options = {}
@@ -67,13 +66,21 @@ module Beaker
67
66
  # connect to the host
68
67
  def connect
69
68
  #try three ways to connect to host (vmhostname, ip, hostname)
70
- # Try each method in turn until we succeed
71
- methods = @ssh_connection_preference.dup
72
- while (not @ssh) && (not methods.empty?) do
73
- @ssh = connect_block(instance_variable_get("@#{methods.shift}"), @user, @ssh_opts)
69
+ methods = []
70
+ if @vmhostname
71
+ @ssh ||= connect_block(@vmhostname, @user, @ssh_opts)
72
+ methods << "vmhostname (#{@vmhostname})"
74
73
  end
75
- unless @ssh
76
- @logger.error "Failed to connect to #{@hostname}, attempted #{@ssh_connection_preference.join(', ')}"
74
+ if @ip && !@ssh
75
+ @ssh ||= connect_block(@ip, @user, @ssh_opts)
76
+ methods << "ip (#{@ip})"
77
+ end
78
+ if @hostname && !@ssh
79
+ @ssh ||= connect_block(@hostname, @user, @ssh_opts)
80
+ methods << "hostname (#{@hostname})"
81
+ end
82
+ if not @ssh
83
+ @logger.error "Failed to connect to #{@hostname}, attempted #{methods.join(', ')}"
77
84
  raise RuntimeError, "Cannot connect to #{@hostname}"
78
85
  end
79
86
  @ssh
@@ -1,5 +1,5 @@
1
1
  module Beaker
2
2
  module Version
3
- STRING = '3.21.0'
3
+ STRING = '3.21.1'
4
4
  end
5
5
  end
@@ -2,36 +2,15 @@ require 'spec_helper'
2
2
 
3
3
  module Beaker
4
4
  describe Hypervisor do
5
- let( :hosts ) { make_hosts( { :platform => 'el-5' } ) }
6
-
7
- context "#create" do
8
- let( :hypervisor ) { Beaker::Hypervisor }
9
-
10
- it "includes custom hypervisor and call set_ssh_connection_preference" do
11
- allow(hypervisor).to receive(:set_ssh_connection_preference).with([], hypervisor)
12
- expect{ hypervisor.create('custom_hypervisor', [], make_opts() )}.to raise_error(RuntimeError, "Invalid hypervisor: custom_hypervisor")
13
- end
14
-
15
- it "sets ssh connection preference if connection_preference method is not overwritten" do
16
- hypervisor.create('none', hosts, make_opts())
17
- expect(hosts[0][:ssh_connection_preference]).to eq(['ip', 'vmhostname', 'hostname'])
18
- end
19
-
20
- it "tests ssh connection methods array for valid elements" do
21
- allow(hypervisor).to receive(:connection_preference).and_return(['my', 'invalid', 'method_name'])
22
- expect{ hypervisor.set_ssh_connection_preference(hosts, hypervisor)}.to raise_error(ArgumentError, /overriding/)
23
- end
24
-
25
- it "sets to new preference if connection_preference is overridden" do
26
- allow(hypervisor).to receive(:connection_preference).and_return(['vmhostname', 'hostname', 'ip'])
27
- hypervisor.set_ssh_connection_preference(hosts, hypervisor)
28
- expect(hosts[0][:ssh_connection_preference]).to eq(['vmhostname', 'hostname', 'ip'])
29
- end
5
+ let( :hypervisor ) { Beaker::Hypervisor }
30
6
 
7
+ it "includes custom hypervisor" do
8
+ expect{ hypervisor.create('custom_hypervisor', [], make_opts() )}.to raise_error(RuntimeError, "Invalid hypervisor: custom_hypervisor")
31
9
  end
32
10
 
33
11
  context "#configure" do
34
12
  let( :options ) { make_opts.merge({ 'logger' => double().as_null_object }) }
13
+ let( :hosts ) { make_hosts( { :platform => 'el-5' } ) }
35
14
  let( :hypervisor ) { Beaker::Hypervisor.new( hosts, options ) }
36
15
 
37
16
  context 'if :timesync option set true on host' do
@@ -5,7 +5,7 @@ module Beaker
5
5
  describe SshConnection do
6
6
  let( :user ) { 'root' }
7
7
  let( :ssh_opts ) { { keepalive: true, keepalive_interval: 2 } }
8
- let( :options ) { { :logger => double('logger').as_null_object, :ssh_connection_preference => ["ip", "vmhostname", "hostname"]} }
8
+ let( :options ) { { :logger => double('logger').as_null_object } }
9
9
  let( :ip ) { "default.ip.address" }
10
10
  let( :vmhostname ){ "vmhostname" }
11
11
  let( :hostname) { "my_host" }
@@ -18,24 +18,25 @@ module Beaker
18
18
 
19
19
  it 'self.connect creates connects and returns a proxy for that connection' do
20
20
  # grrr
21
- expect( Net::SSH ).to receive(:start).with( ip, user, ssh_opts ).and_return(true)
21
+ expect( Net::SSH ).to receive(:start).with( vmhostname, user, ssh_opts ).and_return(true)
22
22
  connection_constructor = SshConnection.connect name_hash, user, ssh_opts, options
23
23
  expect( connection_constructor ).to be_a_kind_of SshConnection
24
24
  end
25
25
 
26
26
  it 'connect creates a new connection' do
27
- expect( Net::SSH ).to receive( :start ).with( ip, user, ssh_opts).and_return(true)
27
+ expect( Net::SSH ).to receive( :start ).with( vmhostname, user, ssh_opts).and_return(true)
28
28
  connection.connect
29
29
  end
30
30
 
31
31
  it 'connect caches its connection' do
32
- expect( Net::SSH ).to receive( :start ).with( ip, user, ssh_opts ).once.and_return true
32
+ expect( Net::SSH ).to receive( :start ).with( vmhostname, user, ssh_opts ).once.and_return true
33
+ connection.connect
33
34
  connection.connect
34
35
  end
35
36
 
36
- it 'attempts to connect by vmhostname address if ip connection fails' do
37
- expect( Net::SSH ).to receive( :start ).with( ip, user, ssh_opts).and_return(false)
38
- expect( Net::SSH ).to receive( :start ).with( vmhostname, user, ssh_opts).and_return(true).once
37
+ it 'attempts to connect by ip address if vmhostname connection fails' do
38
+ expect( Net::SSH ).to receive( :start ).with( vmhostname, user, ssh_opts).and_return(false)
39
+ expect( Net::SSH ).to receive( :start ).with( ip, user, ssh_opts).and_return(true).once
39
40
  expect( Net::SSH ).to receive( :start ).with( hostname, user, ssh_opts).never
40
41
  connection.connect
41
42
  end
@@ -52,7 +53,7 @@ module Beaker
52
53
 
53
54
  it 'runs ssh close' do
54
55
  mock_ssh = Object.new
55
- expect( Net::SSH ).to receive( :start ).with( ip, user, ssh_opts) { mock_ssh }
56
+ expect( Net::SSH ).to receive( :start ).with( vmhostname, user, ssh_opts) { mock_ssh }
56
57
  connection.connect
57
58
 
58
59
  allow( mock_ssh).to receive( :closed? ).once.and_return(false)
@@ -62,7 +63,7 @@ module Beaker
62
63
 
63
64
  it 'sets the @ssh variable to nil' do
64
65
  mock_ssh = Object.new
65
- expect( Net::SSH ).to receive( :start ).with( ip, user, ssh_opts) { mock_ssh }
66
+ expect( Net::SSH ).to receive( :start ).with( vmhostname, user, ssh_opts) { mock_ssh }
66
67
  connection.connect
67
68
 
68
69
  allow( mock_ssh).to receive( :closed? ).once.and_return(false)
@@ -75,7 +76,7 @@ module Beaker
75
76
  it 'calls ssh shutdown & re-raises if ssh close fails with an unexpected Error' do
76
77
  mock_ssh = Object.new
77
78
  allow( mock_ssh ).to receive( :close ) { raise StandardError }
78
- expect( Net::SSH ).to receive( :start ).with( ip, user, ssh_opts) { mock_ssh }
79
+ expect( Net::SSH ).to receive( :start ).with( vmhostname, user, ssh_opts) { mock_ssh }
79
80
  connection.connect
80
81
 
81
82
  allow( mock_ssh).to receive( :closed? ).once.and_return(false)
@@ -89,7 +90,7 @@ module Beaker
89
90
  describe '#execute' do
90
91
  it 'retries if failed with a retryable exception' do
91
92
  mock_ssh = Object.new
92
- expect( Net::SSH ).to receive( :start ).with( ip, user, ssh_opts) { mock_ssh }
93
+ expect( Net::SSH ).to receive( :start ).with( vmhostname, user, ssh_opts) { mock_ssh }
93
94
  connection.connect
94
95
 
95
96
  allow( subject ).to receive( :close )
@@ -101,7 +102,7 @@ module Beaker
101
102
 
102
103
  it 'raises an error if it fails both times' do
103
104
  mock_ssh = Object.new
104
- expect( Net::SSH ).to receive( :start ).with( ip, user, ssh_opts) { mock_ssh }
105
+ expect( Net::SSH ).to receive( :start ).with( vmhostname, user, ssh_opts) { mock_ssh }
105
106
  connection.connect
106
107
 
107
108
  allow( subject ).to receive( :close )
@@ -114,7 +115,7 @@ module Beaker
114
115
  describe '#request_terminal_for' do
115
116
  it 'fails correctly by raising Net::SSH::Exception' do
116
117
  mock_ssh = Object.new
117
- expect( Net::SSH ).to receive( :start ).with( ip, user, ssh_opts) { mock_ssh }
118
+ expect( Net::SSH ).to receive( :start ).with( vmhostname, user, ssh_opts) { mock_ssh }
118
119
  connection.connect
119
120
 
120
121
  mock_channel = Object.new
@@ -127,7 +128,7 @@ module Beaker
127
128
  describe '#register_stdout_for' do
128
129
  before :each do
129
130
  @mock_ssh = Object.new
130
- expect( Net::SSH ).to receive( :start ).with( ip, user, ssh_opts) { @mock_ssh }
131
+ expect( Net::SSH ).to receive( :start ).with( vmhostname, user, ssh_opts) { @mock_ssh }
131
132
  connection.connect
132
133
 
133
134
  @data = '7 of clubs'
@@ -163,7 +164,7 @@ module Beaker
163
164
 
164
165
  before :each do
165
166
  @mock_ssh = Object.new
166
- expect( Net::SSH ).to receive( :start ).with( ip, user, ssh_opts) { @mock_ssh }
167
+ expect( Net::SSH ).to receive( :start ).with( vmhostname, user, ssh_opts) { @mock_ssh }
167
168
  connection.connect
168
169
 
169
170
  @data = '3 of spades'
@@ -202,7 +203,7 @@ module Beaker
202
203
 
203
204
  it 'assigns the output\'s exit code correctly from the data' do
204
205
  mock_ssh = Object.new
205
- expect( Net::SSH ).to receive( :start ).with( ip, user, ssh_opts) { mock_ssh }
206
+ expect( Net::SSH ).to receive( :start ).with( vmhostname, user, ssh_opts) { mock_ssh }
206
207
  connection.connect
207
208
 
208
209
  data = '10 of jeromes'
@@ -235,7 +236,7 @@ module Beaker
235
236
  @mock_scp = Object.new
236
237
  allow( @mock_scp ).to receive( :upload! )
237
238
  allow( @mock_ssh ).to receive( :scp ).and_return( @mock_scp )
238
- expect( Net::SSH ).to receive( :start ).with( ip, user, ssh_opts) { @mock_ssh }
239
+ expect( Net::SSH ).to receive( :start ).with( vmhostname, user, ssh_opts) { @mock_ssh }
239
240
  connection.connect
240
241
  end
241
242
 
@@ -262,7 +263,7 @@ module Beaker
262
263
  @mock_scp = Object.new
263
264
  allow( @mock_scp ).to receive( :download! )
264
265
  allow( @mock_ssh ).to receive( :scp ).and_return( @mock_scp )
265
- expect( Net::SSH ).to receive( :start ).with( ip, user, ssh_opts) { @mock_ssh }
266
+ expect( Net::SSH ).to receive( :start ).with( vmhostname, user, ssh_opts) { @mock_ssh }
266
267
  connection.connect
267
268
  end
268
269
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: beaker
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.21.0
4
+ version: 3.21.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Puppet