beaker 3.4.0 → 3.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +8 -8
- data/lib/beaker/dsl/helpers/puppet_helpers.rb +9 -3
- data/lib/beaker/dsl/install_utils/foss_utils.rb +15 -8
- data/lib/beaker/host/mac/pkg.rb +3 -2
- data/lib/beaker/host/unix/pkg.rb +3 -2
- data/lib/beaker/hypervisor/openstack.rb +10 -14
- data/lib/beaker/version.rb +1 -1
- data/spec/beaker/dsl/helpers/puppet_helpers_spec.rb +26 -0
- data/spec/beaker/host/mac_spec.rb +13 -9
- data/spec/beaker/hypervisor/openstack_spec.rb +16 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
ZjA4NTNhN2IzZmUxODliZjcwOGEwNzQ1ZTZiZDBmMDg0ZTY3ZTMxMg==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
NjUyZWJiNmU3MDkyYjNmMjIyMjg4MWU3MjE5ZmQxZDZlMTM0MmYxOA==
|
7
7
|
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
YzEzYTAxMDk1NjcyM2FlMDY0MWVlYTQ2ZjY4Njk0YTU2NWU1NDBlZGE0YmQ2
|
10
|
+
M2RkNjkxMDlhMDI2YjJmNzdhM2Y1MjhmNTlmZjczYjUzOGFkY2E2OGI0N2U1
|
11
|
+
ZmNkNDU5N2MzOTE5NWNiZTU0N2QyZDc3ZGFmZTYyODJkMjA0MmQ=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
ZWVjZGY0YjBiYmQ3Y2RlMTljOGVlNjM3NGFkZTBmOGZiNGE4ZWFhMmVhZmFi
|
14
|
+
MTI2ZTUxNzUwNGQ2ODNhNWU2NGEyZGYzNTc1MjdjNWExZTBmNjE4YmRjMzIy
|
15
|
+
NTA1Nzc4MGY5NjIzZDQ5YWRmZThlYzBiODIxOWVlMTZjYTI2YzU=
|
@@ -314,7 +314,7 @@ module Beaker
|
|
314
314
|
#
|
315
315
|
# @param [Host] host Host the service runs on
|
316
316
|
# @param [String] service Name of the service to restart
|
317
|
-
# @param [Fixnum] curl_retries Number of
|
317
|
+
# @param [Fixnum] curl_retries Number of seconds to wait for the restart to complete before failing
|
318
318
|
# @param [Fixnum] port Port to check status at
|
319
319
|
#
|
320
320
|
# @return [Result] Result of last status check
|
@@ -327,8 +327,14 @@ module Beaker
|
|
327
327
|
apachectl_path = host.is_pe? ? "#{host['puppetsbindir']}/#{service}" : service
|
328
328
|
host.exec(Command.new("#{apachectl_path} graceful"))
|
329
329
|
else
|
330
|
-
host.exec
|
331
|
-
|
330
|
+
result = host.exec(Command.new("service #{service} reload"),
|
331
|
+
:acceptable_exit_codes => [0,1,3])
|
332
|
+
if result.exit_code == 0
|
333
|
+
return result
|
334
|
+
else
|
335
|
+
host.exec puppet_resource('service', service, 'ensure=stopped')
|
336
|
+
host.exec puppet_resource('service', service, 'ensure=running')
|
337
|
+
end
|
332
338
|
end
|
333
339
|
curl_with_retries(" #{service} ", host, "https://localhost:#{port}", [35, 60], curl_retries)
|
334
340
|
end
|
@@ -1031,7 +1031,11 @@ module Beaker
|
|
1031
1031
|
# @param [Host, Array<Host>, String, Symbol] hosts One or more hosts to act upon,
|
1032
1032
|
# or a role (String or Symbol) that identifies one or more hosts.
|
1033
1033
|
# @param [Hash{Symbol=>String}] opts An options hash
|
1034
|
-
# @option opts [String] :puppet_agent_version The version of puppet-agent to install
|
1034
|
+
# @option opts [String] :puppet_agent_version The version of puppet-agent to install. This
|
1035
|
+
# parameter is used by puppet with the +SUITE_VERSION+ environment
|
1036
|
+
# variable to provide a `git describe` value to beaker to create a
|
1037
|
+
# build server URL. Note that +puppet_agent_sha+ will still be used
|
1038
|
+
# instead of this if a value is provided for that option
|
1035
1039
|
# @option opts [String] :puppet_agent_sha The sha of puppet-agent to install, defaults to provided
|
1036
1040
|
# puppet_agent_version
|
1037
1041
|
# @option opts [String] :copy_base_local Directory where puppet-agent artifact
|
@@ -1062,15 +1066,19 @@ module Beaker
|
|
1062
1066
|
if not opts[:puppet_agent_version]
|
1063
1067
|
raise "must provide :puppet_agent_version (puppet-agent version) for install_puppet_agent_dev_repo_on"
|
1064
1068
|
end
|
1069
|
+
# TODO consolidate these values as they serve no purpose from beaker's side
|
1070
|
+
# you could provide any values you could to one to the other
|
1071
|
+
puppet_agent_version = opts[:puppet_agent_sha] || opts[:puppet_agent_version]
|
1072
|
+
|
1073
|
+
opts = FOSS_DEFAULT_DOWNLOAD_URLS.merge(opts)
|
1074
|
+
opts[:download_url] = "#{opts[:dev_builds_url]}/puppet-agent/#{ puppet_agent_version }/repos/"
|
1075
|
+
opts[:copy_base_local] ||= File.join('tmp', 'repo_configs')
|
1076
|
+
opts[:puppet_collection] ||= 'PC1'
|
1077
|
+
release_path = opts[:download_url]
|
1065
1078
|
|
1066
1079
|
block_on hosts do |host|
|
1067
1080
|
variant, version, arch, codename = host['platform'].to_array
|
1068
|
-
opts = FOSS_DEFAULT_DOWNLOAD_URLS.merge(opts)
|
1069
|
-
opts[:download_url] = "#{opts[:dev_builds_url]}/puppet-agent/#{ opts[:puppet_agent_sha] || opts[:puppet_agent_version] }/repos/"
|
1070
|
-
opts[:copy_base_local] ||= File.join('tmp', 'repo_configs')
|
1071
|
-
opts[:puppet_collection] ||= 'PC1'
|
1072
1081
|
add_role(host, 'aio') #we are installing agent, so we want aio role
|
1073
|
-
release_path = opts[:download_url]
|
1074
1082
|
copy_dir_local = File.join(opts[:copy_base_local], variant)
|
1075
1083
|
onhost_copy_base = opts[:copy_dir_external] || host.external_copy_base
|
1076
1084
|
|
@@ -1079,9 +1087,8 @@ module Beaker
|
|
1079
1087
|
if arch == 's390x'
|
1080
1088
|
logger.trace("#install_puppet_agent_dev_repo_on: s390x arch detected for host #{host}. using dev package")
|
1081
1089
|
else
|
1082
|
-
sha = opts[:puppet_agent_sha] || opts[:puppet_agent_version]
|
1083
1090
|
opts[:dev_builds_repos] ||= [ opts[:puppet_collection] ]
|
1084
|
-
install_puppetlabs_dev_repo( host, 'puppet-agent',
|
1091
|
+
install_puppetlabs_dev_repo( host, 'puppet-agent', puppet_agent_version, nil, opts )
|
1085
1092
|
host.install_package('puppet-agent')
|
1086
1093
|
logger.trace("#install_puppet_agent_dev_repo_on: install_puppetlabs_dev_repo finished")
|
1087
1094
|
next
|
data/lib/beaker/host/mac/pkg.rb
CHANGED
@@ -65,8 +65,8 @@ module Mac::Pkg
|
|
65
65
|
# @param [String] puppet_agent_version Version of puppet agent to get
|
66
66
|
# @param [Hash{Symbol=>String}] opts Options hash to provide extra values
|
67
67
|
#
|
68
|
-
# @note OSX
|
69
|
-
#
|
68
|
+
# @note OSX does require :download_url to be set on the opts argument
|
69
|
+
# in order to check for builds on the builds server
|
70
70
|
#
|
71
71
|
# @raise [ArgumentError] If one of the two required parameters (puppet_collection,
|
72
72
|
# puppet_agent_version) is either not passed or set to nil
|
@@ -76,6 +76,7 @@ module Mac::Pkg
|
|
76
76
|
error_message = "Must provide %s argument to get puppet agent dev package information"
|
77
77
|
raise ArgumentError, error_message % "puppet_collection" unless puppet_collection
|
78
78
|
raise ArgumentError, error_message % "puppet_agent_version" unless puppet_agent_version
|
79
|
+
raise ArgumentError, error_message % "opts[:download_url]" unless opts[:download_url]
|
79
80
|
|
80
81
|
variant, version, arch, codename = self['platform'].to_array
|
81
82
|
|
data/lib/beaker/host/unix/pkg.rb
CHANGED
@@ -376,8 +376,9 @@ module Unix::Pkg
|
|
376
376
|
# @param [String] puppet_agent_version Version of puppet agent to get
|
377
377
|
# @param [Hash{Symbol=>String}] opts Options hash to provide extra values
|
378
378
|
#
|
379
|
-
# @note Solaris
|
380
|
-
# {#solaris_puppet_agent_dev_package_info}
|
379
|
+
# @note Solaris & OSX do require some options to be set. See
|
380
|
+
# {#solaris_puppet_agent_dev_package_info} &
|
381
|
+
# {Mac::Pkg#puppet_agent_dev_package_info} for more details
|
381
382
|
#
|
382
383
|
# @raise [ArgumentError] If one of the two required parameters (puppet_collection,
|
383
384
|
# puppet_agent_version) is either not passed or set to nil
|
@@ -171,21 +171,17 @@ module Beaker
|
|
171
171
|
end
|
172
172
|
end
|
173
173
|
|
174
|
-
# Get a floating IP address to associate with the instance,
|
175
|
-
# allocate a new one if none are available
|
174
|
+
# Get a floating IP address to associate with the instance, try
|
175
|
+
# to allocate a new one from the specified pool if none are available
|
176
176
|
def get_ip
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
# new one and try again.
|
186
|
-
@compute_client.allocate_address(@options[:floating_ip_pool])
|
187
|
-
ip = @compute_client.addresses.find { |ip| ip.instance_id.nil? }
|
188
|
-
end
|
177
|
+
begin
|
178
|
+
@logger.debug "Creating IP"
|
179
|
+
ip = @compute_client.addresses.create
|
180
|
+
rescue Fog::Compute::OpenStack::NotFound
|
181
|
+
# If there are no more floating IP addresses, allocate a
|
182
|
+
# new one and try again.
|
183
|
+
@compute_client.allocate_address(@options[:floating_ip_pool])
|
184
|
+
ip = @compute_client.addresses.find { |ip| ip.instance_id.nil? }
|
189
185
|
end
|
190
186
|
raise 'Could not find or allocate an address' if not ip
|
191
187
|
ip
|
data/lib/beaker/version.rb
CHANGED
@@ -1045,13 +1045,37 @@ describe ClassMixedWithDSLHelpers do
|
|
1045
1045
|
|
1046
1046
|
describe '#bounce_service' do
|
1047
1047
|
let( :options ) { Beaker::Options::Presets.new.presets }
|
1048
|
+
let( :result ) { double.as_null_object }
|
1048
1049
|
before :each do
|
1049
1050
|
allow( subject ).to receive( :options ) { options }
|
1050
1051
|
end
|
1051
1052
|
|
1053
|
+
it 'requests a reload but not a restart if the reload is successful' do
|
1054
|
+
host = FakeHost.create
|
1055
|
+
allow( result ).to receive( :exit_code ).and_return( 0 )
|
1056
|
+
allow( host ).to receive( :any_exec_result ).and_return( result )
|
1057
|
+
subject.bounce_service( host, 'not_real_service')
|
1058
|
+
expect( host ).to execute_commands_matching(/service not_real_service reload/).exactly( 1 ).times
|
1059
|
+
expect( host ).to execute_commands_matching(/puppet resource service not_real_service ensure=stopped/).exactly( 0 ).times
|
1060
|
+
expect( host ).to execute_commands_matching(/puppet resource service not_real_service ensure=started/).exactly( 0 ).times
|
1061
|
+
end
|
1062
|
+
|
1063
|
+
it 'requests a restart if the reload fails' do
|
1064
|
+
host = FakeHost.create
|
1065
|
+
allow( result ).to receive( :exit_code ).and_return( 1 )
|
1066
|
+
allow( host ).to receive( :any_exec_result ).and_return( result )
|
1067
|
+
expect( subject ).to receive( :curl_with_retries ).with( anything(), anything(), /8140/, anything(), anything() )
|
1068
|
+
subject.bounce_service( host, 'not_real_service')
|
1069
|
+
expect( host ).to execute_commands_matching(/service not_real_service reload/).exactly( 1 ).times
|
1070
|
+
expect( host ).to execute_commands_matching(/puppet resource service not_real_service ensure=stopped/).exactly( 1 ).times
|
1071
|
+
expect( host ).to execute_commands_matching(/puppet resource service not_real_service ensure=running/).exactly( 1 ).times
|
1072
|
+
end
|
1073
|
+
|
1052
1074
|
it 'uses the default port argument if none given' do
|
1053
1075
|
host = hosts[0]
|
1054
1076
|
expect( host ).to receive( :graceful_restarts? ).and_return( false )
|
1077
|
+
allow( result ).to receive( :exit_code ).and_return( 1 )
|
1078
|
+
expect( host ).to receive( :exec ).and_return( result )
|
1055
1079
|
expect( subject ).to receive( :curl_with_retries ).with( anything(), anything(), /8140/, anything(), anything() )
|
1056
1080
|
subject.bounce_service( host, 'not_real_service')
|
1057
1081
|
end
|
@@ -1059,6 +1083,8 @@ describe ClassMixedWithDSLHelpers do
|
|
1059
1083
|
it 'takes the port argument' do
|
1060
1084
|
host = hosts[0]
|
1061
1085
|
expect( host ).to receive( :graceful_restarts? ).and_return( false )
|
1086
|
+
allow( result ).to receive( :exit_code ).and_return( 1 )
|
1087
|
+
expect( host ).to receive( :exec ).and_return( result )
|
1062
1088
|
expect( subject ).to receive( :curl_with_retries ).with( anything(), anything(), /8000/, anything(), anything() )
|
1063
1089
|
subject.bounce_service( host, 'not_real_service', nil, 8000)
|
1064
1090
|
end
|
@@ -14,30 +14,34 @@ module Mac
|
|
14
14
|
|
15
15
|
describe '#puppet_agent_dev_package_info' do
|
16
16
|
it 'raises an error if puppet_collection isn\'t passed' do
|
17
|
-
expect { host.puppet_agent_dev_package_info(nil, 'maybe') }.to raise_error(ArgumentError)
|
17
|
+
expect { host.puppet_agent_dev_package_info(nil, 'maybe', :download_url => '') }.to raise_error(ArgumentError)
|
18
18
|
end
|
19
19
|
|
20
|
-
it 'raises
|
21
|
-
expect { host.puppet_agent_dev_package_info('maybe', nil) }.to raise_error(ArgumentError)
|
20
|
+
it 'raises an error if puppet_agent_version isn\'t passed' do
|
21
|
+
expect { host.puppet_agent_dev_package_info('maybe', nil, :download_url => '') }.to raise_error(ArgumentError)
|
22
|
+
end
|
23
|
+
|
24
|
+
it 'raises an error if opts[:download_url] isn\'t passed' do
|
25
|
+
expect { host.puppet_agent_dev_package_info('', '') }.to raise_error(ArgumentError)
|
22
26
|
end
|
23
27
|
|
24
28
|
it 'returns two strings that include the passed parameters' do
|
25
29
|
allow( host ).to receive( :link_exists? ) { true }
|
26
|
-
return1, return2 = host.puppet_agent_dev_package_info( 'pc1', 'pav1' )
|
30
|
+
return1, return2 = host.puppet_agent_dev_package_info( 'pc1', 'pav1', :download_url => '' )
|
27
31
|
expect( return1 ).to match( /pc1/ )
|
28
32
|
expect( return2 ).to match( /pav1/ )
|
29
33
|
end
|
30
34
|
|
31
35
|
it 'gets the correct file type' do
|
32
36
|
allow( host ).to receive( :link_exists? ) { true }
|
33
|
-
_, return2 = host.puppet_agent_dev_package_info( '
|
37
|
+
_, return2 = host.puppet_agent_dev_package_info( 'pc2', 'pav2', :download_url => '' )
|
34
38
|
expect( return2 ).to match( /\.dmg$/ )
|
35
39
|
end
|
36
40
|
|
37
41
|
it 'adds the version dot correctly if not supplied' do
|
38
42
|
@platform = 'osx-109-x86_64'
|
39
43
|
allow( host ).to receive( :link_exists? ) { true }
|
40
|
-
release_path_end, release_file = host.puppet_agent_dev_package_info( 'PC3', 'pav3' )
|
44
|
+
release_path_end, release_file = host.puppet_agent_dev_package_info( 'PC3', 'pav3', :download_url => '' )
|
41
45
|
expect( release_path_end ).to match( /10\.9/ )
|
42
46
|
expect( release_file ).to match( /10\.9/ )
|
43
47
|
end
|
@@ -45,7 +49,7 @@ module Mac
|
|
45
49
|
it 'runs the correct install for osx platforms (newest link format)' do
|
46
50
|
allow( host ).to receive( :link_exists? ) { true }
|
47
51
|
|
48
|
-
release_path_end, release_file = host.puppet_agent_dev_package_info( 'PC4', 'pav4' )
|
52
|
+
release_path_end, release_file = host.puppet_agent_dev_package_info( 'PC4', 'pav4', :download_url => '' )
|
49
53
|
# verify the mac package name starts the name correctly
|
50
54
|
expect( release_file ).to match( /^puppet-agent-pav4-/ )
|
51
55
|
# verify the "newest hotness" is set correctly for the end of the mac package name
|
@@ -57,7 +61,7 @@ module Mac
|
|
57
61
|
it 'runs the correct install for osx platforms (new link format)' do
|
58
62
|
allow( host ).to receive( :link_exists? ).and_return( false, true )
|
59
63
|
|
60
|
-
release_path_end, release_file = host.puppet_agent_dev_package_info( 'PC7', 'pav7' )
|
64
|
+
release_path_end, release_file = host.puppet_agent_dev_package_info( 'PC7', 'pav7', :download_url => '' )
|
61
65
|
# verify the mac package name starts the name correctly
|
62
66
|
expect( release_file ).to match( /^puppet-agent-pav7-/ )
|
63
67
|
# verify the "new hotness" is set correctly for the end of the mac package name
|
@@ -69,7 +73,7 @@ module Mac
|
|
69
73
|
it 'runs the correct install for osx platforms (old link format)' do
|
70
74
|
allow( host ).to receive( :link_exists? ) { false }
|
71
75
|
|
72
|
-
release_path_end, release_file = host.puppet_agent_dev_package_info( 'PC8', 'pav8' )
|
76
|
+
release_path_end, release_file = host.puppet_agent_dev_package_info( 'PC8', 'pav8', :download_url => '' )
|
73
77
|
# verify the mac package name starts the name correctly
|
74
78
|
expect( release_file ).to match( /^puppet-agent-pav8-/ )
|
75
79
|
# verify the old way is set correctly for the end of the mac package name
|
@@ -88,5 +88,21 @@ module Beaker
|
|
88
88
|
end
|
89
89
|
end
|
90
90
|
|
91
|
+
it 'get_ip always allocates a new floatingip' do
|
92
|
+
# Assume beaker is being executed in parallel N times by travis (or similar).
|
93
|
+
# IPs are allocated (but not associated) before an instance is created; it is
|
94
|
+
# hightly possible the first instance will allocate a new IP and create an ssh
|
95
|
+
# key. While the instance is being created the other N-1 instances come along,
|
96
|
+
# find the unused IP and try to use it as well which causes keyname clashes
|
97
|
+
# and other IP related shenannigans. Ensure we allocate a new IP each and every
|
98
|
+
# time
|
99
|
+
mock_addresses = double().as_null_object
|
100
|
+
mock_ip = double().as_null_object
|
101
|
+
allow(@compute_client).to receive(:addresses).and_return(mock_addresses)
|
102
|
+
allow(mock_addresses).to receive(:create).and_return(mock_ip)
|
103
|
+
expect(mock_addresses).to receive(:create).exactly(3).times
|
104
|
+
(1..3).each { openstack.get_ip }
|
105
|
+
end
|
106
|
+
|
91
107
|
end
|
92
108
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: beaker
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.
|
4
|
+
version: 3.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Puppetlabs
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-11-
|
11
|
+
date: 2016-11-30 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rspec
|