beaker 1.6.2 → 1.7.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/.gitignore +9 -2
- data/lib/beaker/cli.rb +12 -2
- data/lib/beaker/dsl/helpers.rb +3 -3
- data/lib/beaker/dsl/install_utils.rb +16 -19
- data/lib/beaker/host.rb +1 -1
- data/lib/beaker/hypervisor/vagrant.rb +13 -19
- data/lib/beaker/logger.rb +8 -8
- data/lib/beaker/options/command_line_parser.rb +13 -8
- data/lib/beaker/options/presets.rb +1 -1
- data/lib/beaker/shared/host_handler.rb +1 -1
- data/lib/beaker/test_suite.rb +1 -1
- data/lib/beaker/utils/setup_helper.rb +1 -1
- data/lib/beaker/version.rb +1 -1
- data/spec/beaker/dsl/helpers_spec.rb +4 -3
- data/spec/beaker/dsl/install_utils_spec.rb +19 -8
- data/spec/beaker/host_spec.rb +1 -1
- data/spec/beaker/hypervisor/vagrant_spec.rb +20 -11
- data/spec/beaker/logger_spec.rb +28 -4
- data/spec/beaker/shared/host_handler_spec.rb +1 -1
- data/spec/beaker/utils/setup_helper_spec.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
YjhhNzM3MzA5MGZmZTdjMDg5MGI1YmVlMDY1ZGI2NWFmMTUyZGE5YQ==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
MTgxNDk2NTBkMWY0NzA2MDc0NGIwMjQzM2IxZjBlY2M0NGE3NWYxMA==
|
7
7
|
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
YWQ0ZGI3Yzk2NmQ5NDdlZDUzMmJkMzFiOGUyNjk0MzFkNmEwNjBlN2FhYTZj
|
10
|
+
N2I3NjM3Zjk1NDM5MjhjMWEwZWFjNTQxZWFjNTljMDllZjA3NjAzZmUyMzg4
|
11
|
+
ZThiMzBmM2U1ZjYxN2I0ZDUxYWIwNThhNzAxYTQxZjAyZWE0MGY=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
ZWQwYmYxMGIxZjliYjA4NTNkZmZlNjI0MWEzNjcxNDI1ZGNlMDk0NDcyODg4
|
14
|
+
ZDI0MDdiMmZhNzE4NDY4ZGE3MDQwMTZlOTRjNjQ4M2ZiMmQzZmE4NDlhNTY0
|
15
|
+
ZWQzYTgyMThmYzNlYTkwZWYzNTliM2RmZjJlMzlmOGZkYTA3NDg=
|
data/.gitignore
CHANGED
data/lib/beaker/cli.rb
CHANGED
@@ -15,16 +15,23 @@ module Beaker
|
|
15
15
|
@options = @options_parser.parse_args
|
16
16
|
@logger = Beaker::Logger.new(@options)
|
17
17
|
@options[:logger] = @logger
|
18
|
+
@execute = true
|
18
19
|
|
19
20
|
if @options[:help]
|
20
21
|
@logger.notify(@options_parser.usage)
|
21
|
-
|
22
|
+
@execute = false
|
23
|
+
return
|
22
24
|
end
|
23
25
|
if @options[:version]
|
24
26
|
@logger.notify(VERSION_STRING % Beaker::Version::STRING)
|
25
|
-
|
27
|
+
@execute = false
|
28
|
+
return
|
26
29
|
end
|
27
30
|
@logger.info(@options.dump)
|
31
|
+
if @options[:parse_only]
|
32
|
+
@execute = false
|
33
|
+
return
|
34
|
+
end
|
28
35
|
|
29
36
|
#add additional paths to the LOAD_PATH
|
30
37
|
if not @options[:load_path].empty?
|
@@ -81,6 +88,9 @@ module Beaker
|
|
81
88
|
|
82
89
|
def execute!
|
83
90
|
|
91
|
+
if !@execute
|
92
|
+
return
|
93
|
+
end
|
84
94
|
begin
|
85
95
|
trap(:INT) do
|
86
96
|
@logger.warn "Interrupt received; exiting..."
|
data/lib/beaker/dsl/helpers.rb
CHANGED
@@ -675,14 +675,14 @@ module Beaker
|
|
675
675
|
#
|
676
676
|
def apply_manifest_on(host, manifest, opts = {}, &block)
|
677
677
|
if host.is_a?(Array)
|
678
|
-
host.
|
678
|
+
return host.map do |h|
|
679
679
|
apply_manifest_on(h, manifest, opts, &block)
|
680
680
|
end
|
681
|
-
return
|
682
681
|
end
|
683
682
|
|
684
683
|
on_options = {}
|
685
|
-
on_options[:acceptable_exit_codes] = Array(opts
|
684
|
+
on_options[:acceptable_exit_codes] = Array(opts[:acceptable_exit_codes])
|
685
|
+
|
686
686
|
args = ["--verbose"]
|
687
687
|
args << "--parseonly" if opts[:parseonly]
|
688
688
|
args << "--trace" if opts[:trace]
|
@@ -131,8 +131,8 @@ module Beaker
|
|
131
131
|
|
132
132
|
#Create the PE install command string based upon the host and options settings
|
133
133
|
# @param [Host] host The host that PE is to be installed on
|
134
|
+
# For UNIX machines using the full PE installer, the host object must have the 'pe_installer' field set correctly.
|
134
135
|
# @param [Hash{Symbol=>String}] options The options
|
135
|
-
# @option options [String] :installer The name of the installer to use for upgrading/installing
|
136
136
|
# @option options [String] :pe_ver_win Default PE version to install or upgrade to on Windows hosts
|
137
137
|
# (Othersie uses individual Windows hosts pe_ver)
|
138
138
|
# @option options [String :pe_ver Default PE version to install or upgrade to
|
@@ -150,7 +150,7 @@ module Beaker
|
|
150
150
|
elsif host['roles'].include? 'frictionless' and ! version_is_less(version, '3.2.0')
|
151
151
|
"cd #{host['working_dir']} && curl -kO https://#{master}:8140/packages/#{version}/install.bash && bash install.bash"
|
152
152
|
else
|
153
|
-
"cd #{host['working_dir']}/#{host['dist']} && ./#{
|
153
|
+
"cd #{host['working_dir']}/#{host['dist']} && ./#{host['pe_installer']} -a #{host['working_dir']}/answers"
|
154
154
|
end
|
155
155
|
end
|
156
156
|
|
@@ -258,7 +258,6 @@ module Beaker
|
|
258
258
|
# (Otherwise uses individual hosts pe_ver)
|
259
259
|
# @option options [String] :pe_ver_win Default PE version to install or upgrade to on Windows hosts
|
260
260
|
# (Otherwise uses individual Windows hosts pe_ver)
|
261
|
-
# @option options [String] :installer ('puppet-enterprise-installer') The name of the installer to use for upgrading/installing
|
262
261
|
# @option options [Symbol] :type (:install) One of :upgrade or :install
|
263
262
|
#
|
264
263
|
#
|
@@ -268,7 +267,6 @@ module Beaker
|
|
268
267
|
# @api private
|
269
268
|
#
|
270
269
|
def do_install hosts, options = {}
|
271
|
-
options[:installer] = options[:installer] || 'puppet-enterprise-installer'
|
272
270
|
options[:type] = options[:type] || :install
|
273
271
|
hostcert='uname | grep -i sunos > /dev/null && hostname || hostname -s'
|
274
272
|
master_certname = on(master, hostcert).stdout.strip
|
@@ -278,6 +276,7 @@ module Beaker
|
|
278
276
|
# Set PE distribution for all the hosts, create working dir
|
279
277
|
use_all_tar = ENV['PE_USE_ALL_TAR'] == 'true'
|
280
278
|
hosts.each do |host|
|
279
|
+
host['pe_installer'] ||= 'puppet-enterprise-installer'
|
281
280
|
if host['platform'] !~ /windows/
|
282
281
|
platform = use_all_tar ? 'all' : host['platform']
|
283
282
|
version = options[:pe_ver] || host['pe_ver']
|
@@ -452,12 +451,13 @@ module Beaker
|
|
452
451
|
def install_pe
|
453
452
|
#process the version files if necessary
|
454
453
|
hosts.each do |host|
|
454
|
+
host['pe_dir'] ||= options[:pe_dir]
|
455
455
|
if host['platform'] =~ /windows/
|
456
456
|
host['pe_ver'] = host['pe_ver'] ||
|
457
|
-
Beaker::Options::PEVersionScraper.load_pe_version(host[:pe_dir]
|
457
|
+
Beaker::Options::PEVersionScraper.load_pe_version(host[:pe_dir], options[:pe_version_file_win])
|
458
458
|
else
|
459
459
|
host['pe_ver'] = host['pe_ver'] ||
|
460
|
-
Beaker::Options::PEVersionScraper.load_pe_version(host[:pe_dir]
|
460
|
+
Beaker::Options::PEVersionScraper.load_pe_version(host[:pe_dir], options[:pe_version_file])
|
461
461
|
end
|
462
462
|
end
|
463
463
|
do_install sorted_hosts
|
@@ -466,31 +466,28 @@ module Beaker
|
|
466
466
|
#Upgrade PE based upon host configuration and options
|
467
467
|
# @param [String] path A path (either local directory or a URL to a listing of PE builds).
|
468
468
|
# Will contain a LATEST file indicating the latest build to install.
|
469
|
+
# This is ignored if a pe_upgrade_ver and pe_upgrade_dir are specified
|
470
|
+
# in the host configuration file.
|
469
471
|
# @example
|
470
472
|
# upgrade_pe("http://neptune.puppetlabs.lan/3.0/ci-ready/")
|
471
473
|
#
|
472
474
|
# @note Install file names are assumed to be of the format puppet-enterprise-VERSION-PLATFORM.(tar)|(tar.gz)
|
473
475
|
# for Unix like systems and puppet-enterprise-VERSION.msi for Windows systems.
|
474
476
|
# @api dsl
|
475
|
-
def upgrade_pe path
|
476
|
-
version = Options::PEVersionScraper.load_pe_version(path, options[:pe_version_file])
|
477
|
-
version_win = Options::PEVersionScraper.load_pe_version(path, options[:pe_version_file_win])
|
478
|
-
pre_30 = version_is_less(version, '3.0')
|
479
|
-
if pre_30
|
480
|
-
do_install(sorted_hosts, {:type => :upgrade, :pe_dir => path, :pe_ver => version, :pe_ver_win => version_win, :installer => 'puppet-enterprise-upgrader'})
|
481
|
-
else
|
482
|
-
do_install(sorted_hosts, {:type => :upgrade, :pe_dir => path, :pe_ver => version, :pe_ver_win => version_win})
|
483
|
-
end
|
484
|
-
#at this point we've completed a successful upgrade, update the host pe_ver to reflect that
|
477
|
+
def upgrade_pe path=nil
|
485
478
|
hosts.each do |host|
|
479
|
+
host['pe_dir'] = host['pe_upgrade_dir'] || path
|
486
480
|
if host['platform'] =~ /windows/
|
487
|
-
host['pe_ver'] =
|
481
|
+
host['pe_ver'] = host['pe_upgrade_ver'] || Options::PEVersionScraper.load_pe_version(host['pe_dir'], options[:pe_version_file_win])
|
488
482
|
else
|
489
|
-
host['pe_ver'] =
|
483
|
+
host['pe_ver'] = host['pe_upgrade_ver'] || Options::PEVersionScraper.load_pe_version(host['pe_dir'], options[:pe_version_file])
|
484
|
+
end
|
485
|
+
if version_is_less(host['pe_ver'], '3.0')
|
486
|
+
host['pe_installer'] ||= 'puppet-enterprise-upgrader'
|
490
487
|
end
|
491
488
|
end
|
489
|
+
do_install(sorted_hosts, {:type => :upgrade})
|
492
490
|
end
|
493
|
-
|
494
491
|
end
|
495
492
|
end
|
496
493
|
end
|
data/lib/beaker/host.rb
CHANGED
@@ -158,7 +158,7 @@ module Beaker
|
|
158
158
|
if options[:silent]
|
159
159
|
output_callback = nil
|
160
160
|
else
|
161
|
-
@logger.debug "\n#{log_prefix} $ #{cmdline}"
|
161
|
+
@logger.debug "\n#{log_prefix} #{Time.new.strftime('%H:%M:%S')}$ #{cmdline}"
|
162
162
|
output_callback = logger.method(:host_output)
|
163
163
|
end
|
164
164
|
|
@@ -18,7 +18,7 @@ module Beaker
|
|
18
18
|
"10.255.#{rand_chunk}.#{rand_chunk}"
|
19
19
|
end
|
20
20
|
|
21
|
-
def make_vfile hosts
|
21
|
+
def make_vfile hosts, options = {}
|
22
22
|
#HACK HACK HACK - add checks here to ensure that we have box + box_url
|
23
23
|
#generate the VagrantFile
|
24
24
|
v_file = "Vagrant.configure(\"2\") do |c|\n"
|
@@ -34,7 +34,7 @@ module Beaker
|
|
34
34
|
@logger.debug "created Vagrantfile for VagrantHost #{host.name}"
|
35
35
|
end
|
36
36
|
v_file << " c.vm.provider :virtualbox do |vb|\n"
|
37
|
-
v_file << " vb.customize [\"modifyvm\", :id, \"--memory\", \"1024\"]\n"
|
37
|
+
v_file << " vb.customize [\"modifyvm\", :id, \"--memory\", \"#{options['vagrant_memsize'] ||= '1024'}\"]\n"
|
38
38
|
v_file << " end\n"
|
39
39
|
v_file << "end\n"
|
40
40
|
File.open(@vagrant_file, 'w') do |f|
|
@@ -65,11 +65,11 @@ module Beaker
|
|
65
65
|
def set_ssh_config host, user
|
66
66
|
f = Tempfile.new("#{host.name}")
|
67
67
|
ssh_config = Dir.chdir(@vagrant_path) do
|
68
|
-
|
69
|
-
if
|
70
|
-
raise "Failed to
|
68
|
+
result = `vagrant ssh-config #{host.name}`
|
69
|
+
if $?.to_i != 0
|
70
|
+
raise "Failed to vagrant ssh-config for #{host.name}"
|
71
71
|
end
|
72
|
-
|
72
|
+
result
|
73
73
|
end
|
74
74
|
#replace hostname with ip
|
75
75
|
ssh_config = ssh_config.gsub(/#{host.name}/, host['ip']) unless not host['ip']
|
@@ -117,7 +117,7 @@ module Beaker
|
|
117
117
|
#make sure that any old boxes are dead dead dead
|
118
118
|
vagrant_cmd("destroy --force") if File.file?(@vagrant_file)
|
119
119
|
|
120
|
-
make_vfile @vagrant_hosts
|
120
|
+
make_vfile @vagrant_hosts, @options
|
121
121
|
|
122
122
|
vagrant_cmd("up")
|
123
123
|
else #set host ip of already up boxes
|
@@ -155,18 +155,12 @@ module Beaker
|
|
155
155
|
|
156
156
|
def vagrant_cmd(args)
|
157
157
|
Dir.chdir(@vagrant_path) do
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
raise "Failed to exec 'vagrant #{args}'"
|
165
|
-
end
|
166
|
-
exit_status = wait_thr.value
|
167
|
-
}
|
168
|
-
if exit_status != 0
|
169
|
-
raise "Failed to execute vagrant_cmd ( #{args} )"
|
158
|
+
result = `vagrant #{args} 2>&1`
|
159
|
+
result.each_line do |line|
|
160
|
+
@logger.debug(line)
|
161
|
+
end
|
162
|
+
if $?.to_i != 0
|
163
|
+
raise "Failed to exec 'vagrant #{args}'"
|
170
164
|
end
|
171
165
|
end
|
172
166
|
end
|
data/lib/beaker/logger.rb
CHANGED
@@ -51,18 +51,18 @@ module Beaker
|
|
51
51
|
options = args.last.is_a?(Hash) ? args.pop : {}
|
52
52
|
@color = options[:color]
|
53
53
|
case options[:log_level]
|
54
|
-
when /debug/i
|
54
|
+
when /debug/i, :debug
|
55
55
|
@log_level = :debug
|
56
|
-
when
|
56
|
+
when /verbose/i, :verbose
|
57
57
|
@log_level = :verbose
|
58
|
-
when /info/i
|
58
|
+
when /info/i, :info
|
59
59
|
@log_level = :info
|
60
|
-
when /notify/i
|
60
|
+
when /notify/i, :notify
|
61
61
|
@log_level = :notify
|
62
|
-
when /warn/i
|
62
|
+
when /warn/i, :warn
|
63
63
|
@log_level = :warn
|
64
64
|
else
|
65
|
-
@log_level = :
|
65
|
+
@log_level = :verbose
|
66
66
|
end
|
67
67
|
@destinations = []
|
68
68
|
|
@@ -129,11 +129,11 @@ module Beaker
|
|
129
129
|
end
|
130
130
|
|
131
131
|
# Custom reporting for messages generated by host SUTs.
|
132
|
-
# Will not print unless we are at {LOG_LEVELS} '
|
132
|
+
# Will not print unless we are at {LOG_LEVELS} 'verbose' or higher.
|
133
133
|
# Strips any color codes already in the provided messages, then adds logger color codes before reporting
|
134
134
|
# @param args[Array<String>] Strings to be reported
|
135
135
|
def host_output *args
|
136
|
-
return unless
|
136
|
+
return unless is_verbose?
|
137
137
|
strings = strip_colors_from args
|
138
138
|
string = strings.join
|
139
139
|
optionally_color GREY, string, false
|
@@ -135,11 +135,6 @@ module Beaker
|
|
135
135
|
@cmd_options[:log_level] = val
|
136
136
|
end
|
137
137
|
|
138
|
-
opts.on '--[no-]debug',
|
139
|
-
'DEPRECATED, use --log-level' do |bool|
|
140
|
-
@cmd_options[:log_level] = bool ? 'debug' : 'info'
|
141
|
-
end
|
142
|
-
|
143
138
|
opts.on '-d', '--[no-]dry-run',
|
144
139
|
'Report what would happen on targets',
|
145
140
|
'(default: false)' do |bool|
|
@@ -179,14 +174,24 @@ module Beaker
|
|
179
174
|
@cmd_options[:version] = true
|
180
175
|
end
|
181
176
|
|
182
|
-
opts.on
|
183
|
-
|
184
|
-
@cmd_options[:hosts_file] = file
|
177
|
+
opts.on('--parse-only', 'Display beaker parsed options and exit' ) do
|
178
|
+
@cmd_options[:parse_only] = true
|
185
179
|
end
|
186
180
|
|
187
181
|
opts.on('--help', 'Display this screen' ) do
|
188
182
|
@cmd_options[:help] = true
|
189
183
|
end
|
184
|
+
|
185
|
+
opts.on '-c', '--config FILE',
|
186
|
+
'DEPRECATED, use --hosts' do |file|
|
187
|
+
@cmd_options[:hosts_file] = file
|
188
|
+
end
|
189
|
+
|
190
|
+
opts.on '--[no-]debug',
|
191
|
+
'DEPRECATED, use --log-level' do |bool|
|
192
|
+
@cmd_options[:log_level] = bool ? 'debug' : 'info'
|
193
|
+
end
|
194
|
+
|
190
195
|
end
|
191
196
|
|
192
197
|
end
|
@@ -22,7 +22,7 @@ module Beaker
|
|
22
22
|
end
|
23
23
|
|
24
24
|
def get_ip(host)
|
25
|
-
host.exec(Command.new("ip a|awk '/
|
25
|
+
host.exec(Command.new("ip a|awk '/global/{print$2}' | cut -d/ -f1 | head -1")).stdout.chomp
|
26
26
|
end
|
27
27
|
|
28
28
|
def set_etc_hosts(host, etc_hosts)
|
data/lib/beaker/test_suite.rb
CHANGED
@@ -247,7 +247,7 @@ module Beaker
|
|
247
247
|
end
|
248
248
|
|
249
249
|
def log_path(name)
|
250
|
-
@@log_dir ||= File.join("log", @start_time.strftime("%F_%
|
250
|
+
@@log_dir ||= File.join("log", @start_time.strftime("%F_%H_%M_%S"))
|
251
251
|
unless File.directory?(@@log_dir) then
|
252
252
|
FileUtils.mkdir_p(@@log_dir)
|
253
253
|
|
@@ -23,7 +23,7 @@ module Beaker
|
|
23
23
|
if master['platform'].include? 'solaris'
|
24
24
|
stdout = master.exec(Command.new("ifconfig -a inet| awk '/broadcast/ {print $2}' | cut -d/ -f1 | head -1")).stdout
|
25
25
|
else
|
26
|
-
stdout = master.exec(Command.new("ip a|awk '/
|
26
|
+
stdout = master.exec(Command.new("ip a|awk '/global/{print$2}' | cut -d/ -f1 | head -1")).stdout
|
27
27
|
end
|
28
28
|
ip=stdout.chomp
|
29
29
|
|
data/lib/beaker/version.rb
CHANGED
@@ -310,7 +310,7 @@ describe ClassMixedWithDSLHelpers do
|
|
310
310
|
subject.apply_manifest_on( agent, 'class { "boo": }')
|
311
311
|
end
|
312
312
|
|
313
|
-
it '
|
313
|
+
it 'operates on an array of hosts' do
|
314
314
|
the_hosts = [master, agent]
|
315
315
|
|
316
316
|
subject.should_receive( :create_remote_file ).twice.and_return( true )
|
@@ -321,10 +321,11 @@ describe ClassMixedWithDSLHelpers do
|
|
321
321
|
|
322
322
|
subject.should_receive( :on ).
|
323
323
|
with( host, 'puppet_command',
|
324
|
-
:acceptable_exit_codes => [0] ).ordered
|
324
|
+
:acceptable_exit_codes => [0, 1] ).ordered
|
325
325
|
end
|
326
326
|
|
327
|
-
subject.apply_manifest_on( the_hosts, 'include foobar')
|
327
|
+
result = subject.apply_manifest_on( the_hosts, 'include foobar', :acceptable_exit_codes => [0,1] )
|
328
|
+
result.should(be_an(Array))
|
328
329
|
end
|
329
330
|
|
330
331
|
it 'adds acceptable exit codes with :catch_failures' do
|
@@ -130,7 +130,9 @@ describe ClassMixedWithDSLInstallUtils do
|
|
130
130
|
end
|
131
131
|
|
132
132
|
it 'generates a unix PE install command for a unix host' do
|
133
|
-
|
133
|
+
the_host = unixhost.dup
|
134
|
+
the_host['pe_installer'] = 'puppet-enterprise-installer'
|
135
|
+
expect( subject.installer_cmd( the_host, {} ) ).to be === "cd /tmp/puppet-enterprise-3.1.0-rc0-230-g36c9e5c-debian-7-i386 && ./puppet-enterprise-installer -a /tmp/answers"
|
134
136
|
end
|
135
137
|
end
|
136
138
|
|
@@ -350,35 +352,44 @@ describe ClassMixedWithDSLInstallUtils do
|
|
350
352
|
it 'calls puppet-enterprise-upgrader for pre 3.0 upgrades' do
|
351
353
|
Beaker::Options::PEVersionScraper.stub( :load_pe_version ).and_return( '2.8' )
|
352
354
|
Beaker::Options::PEVersionScraper.stub( :load_pe_version_win ).and_return( '2.8' )
|
353
|
-
|
355
|
+
the_hosts = [ hosts[0].dup, hosts[1].dup, hosts[2].dup ]
|
356
|
+
subject.stub( :hosts ).and_return( the_hosts )
|
354
357
|
subject.stub( :options ).and_return( {} )
|
355
358
|
version = version_win = '2.8'
|
356
359
|
path = "/path/to/upgradepkg"
|
357
|
-
subject.should_receive( :do_install ).with(
|
360
|
+
subject.should_receive( :do_install ).with( the_hosts, { :type => :upgrade } )
|
358
361
|
subject.upgrade_pe( path )
|
362
|
+
the_hosts.each do |h|
|
363
|
+
expect( h['pe_installer'] ).to be === 'puppet-enterprise-upgrader'
|
364
|
+
end
|
359
365
|
end
|
360
366
|
|
361
367
|
it 'uses standard upgrader for post 3.0 upgrades' do
|
362
368
|
Beaker::Options::PEVersionScraper.stub( :load_pe_version ).and_return( '3.1' )
|
363
369
|
Beaker::Options::PEVersionScraper.stub( :load_pe_version_win ).and_return( '3.1' )
|
364
|
-
|
370
|
+
the_hosts = [ hosts[0].dup, hosts[1].dup, hosts[2].dup ]
|
371
|
+
subject.stub( :hosts ).and_return( the_hosts )
|
365
372
|
subject.stub( :options ).and_return( {} )
|
366
373
|
version = version_win = '3.1'
|
367
374
|
path = "/path/to/upgradepkg"
|
368
|
-
subject.should_receive( :do_install ).with(
|
375
|
+
subject.should_receive( :do_install ).with( the_hosts, { :type => :upgrade } )
|
369
376
|
subject.upgrade_pe( path )
|
377
|
+
the_hosts.each do |h|
|
378
|
+
expect( h['pe_installer'] ).to be nil
|
379
|
+
end
|
370
380
|
end
|
371
381
|
|
372
382
|
it 'updates pe_ver post upgrade' do
|
373
383
|
Beaker::Options::PEVersionScraper.stub( :load_pe_version ).and_return( '2.8' )
|
374
384
|
Beaker::Options::PEVersionScraper.stub( :load_pe_version_win ).and_return( '2.8' )
|
375
|
-
|
385
|
+
the_hosts = [ hosts[0].dup, hosts[1].dup, hosts[2].dup ]
|
386
|
+
subject.stub( :hosts ).and_return( the_hosts )
|
376
387
|
subject.stub( :options ).and_return( {} )
|
377
388
|
version = version_win = '2.8'
|
378
389
|
path = "/path/to/upgradepkg"
|
379
|
-
subject.should_receive( :do_install ).with(
|
390
|
+
subject.should_receive( :do_install ).with( the_hosts, { :type => :upgrade } )
|
380
391
|
subject.upgrade_pe( path )
|
381
|
-
|
392
|
+
the_hosts.each do |h|
|
382
393
|
expect( h['pe_ver'] ).to be === '2.8'
|
383
394
|
end
|
384
395
|
end
|
data/spec/beaker/host_spec.rb
CHANGED
@@ -115,7 +115,7 @@ module Beaker
|
|
115
115
|
it 'logs the amount of time spent executing the command' do
|
116
116
|
result.exit_code = 0
|
117
117
|
|
118
|
-
expect(host.logger).to receive(:debug).with(/
|
118
|
+
expect(host.logger).to receive(:debug).with(/executed in \d\.\d{2} seconds/)
|
119
119
|
|
120
120
|
host.exec(command,{})
|
121
121
|
end
|
@@ -28,6 +28,21 @@ module Beaker
|
|
28
28
|
expect( File.read( File.expand_path( File.join( path, "Vagrantfile") ) ) ).to be === "Vagrant.configure(\"2\") do |c|\n c.vm.define 'vm1' do |v|\n v.vm.hostname = 'vm1'\n v.vm.box = 'vm1_of_my_box'\n v.vm.box_url = 'http://address.for.my.box.vm1'\n v.vm.base_mac = '0123456789'\n v.vm.network :private_network, ip: \"ip.address.for.vm1\", :netmask => \"255.255.0.0\"\n end\n c.vm.define 'vm2' do |v|\n v.vm.hostname = 'vm2'\n v.vm.box = 'vm2_of_my_box'\n v.vm.box_url = 'http://address.for.my.box.vm2'\n v.vm.base_mac = '0123456789'\n v.vm.network :private_network, ip: \"ip.address.for.vm2\", :netmask => \"255.255.0.0\"\n end\n c.vm.define 'vm3' do |v|\n v.vm.hostname = 'vm3'\n v.vm.box = 'vm3_of_my_box'\n v.vm.box_url = 'http://address.for.my.box.vm3'\n v.vm.base_mac = '0123456789'\n v.vm.network :private_network, ip: \"ip.address.for.vm3\", :netmask => \"255.255.0.0\"\n end\n c.vm.provider :virtualbox do |vb|\n vb.customize [\"modifyvm\", :id, \"--memory\", \"1024\"]\n end\nend\n"
|
29
29
|
end
|
30
30
|
|
31
|
+
it "uses the memsize defined per vagrant host" do
|
32
|
+
FakeFS.activate!
|
33
|
+
path = vagrant.instance_variable_get( :@vagrant_path )
|
34
|
+
vagrant.stub( :randmac ).and_return( "0123456789" )
|
35
|
+
|
36
|
+
vagrant.make_vfile( @hosts, {'vagrant_memsize' => 'hello!'} )
|
37
|
+
|
38
|
+
generated_file = File.read( File.expand_path( File.join( path, "Vagrantfile") ) )
|
39
|
+
|
40
|
+
match = generated_file.match(/vb.customize \["modifyvm", :id, "--memory", "hello!"]/)
|
41
|
+
|
42
|
+
expect( match ).to_not be nil
|
43
|
+
|
44
|
+
end
|
45
|
+
|
31
46
|
it "can generate a new /etc/hosts file referencing each host" do
|
32
47
|
|
33
48
|
@hosts.each do |host|
|
@@ -66,8 +81,7 @@ module Beaker
|
|
66
81
|
name = host.name
|
67
82
|
Dir.stub( :chdir ).and_yield()
|
68
83
|
|
69
|
-
|
70
|
-
out.stub( :read ).and_return("Host #{host.name}
|
84
|
+
vagrant.should_receive(:`).and_return("Host #{host.name}
|
71
85
|
HostName 127.0.0.1
|
72
86
|
User vagrant
|
73
87
|
Port 2222
|
@@ -76,12 +90,6 @@ module Beaker
|
|
76
90
|
PasswordAuthentication no
|
77
91
|
IdentityFile /home/root/.vagrant.d/insecure_private_key
|
78
92
|
IdentitiesOnly yes")
|
79
|
-
wait_thr = OpenStruct.new
|
80
|
-
state = mock( 'state' )
|
81
|
-
state.stub( :success? ).and_return( true )
|
82
|
-
wait_thr.value = state
|
83
|
-
|
84
|
-
Open3.stub( :popen3 ).with( 'vagrant', 'ssh-config', host.name ).and_return( [ "", out, "", wait_thr ])
|
85
93
|
|
86
94
|
file = double( 'file' )
|
87
95
|
file.stub( :path ).and_return( '/path/sshconfig' )
|
@@ -139,14 +147,15 @@ module Beaker
|
|
139
147
|
end
|
140
148
|
|
141
149
|
it "can provision a set of hosts" do
|
142
|
-
|
150
|
+
options = vagrant.instance_variable_get( :@options )
|
151
|
+
vagrant.should_receive( :make_vfile ).with( @hosts, options ).once
|
143
152
|
vagrant.should_receive( :vagrant_cmd ).with( "destroy --force" ).never
|
144
153
|
vagrant.provision
|
145
154
|
end
|
146
155
|
|
147
156
|
it "destroys an existing set of hosts before provisioning" do
|
148
|
-
vagrant.make_vfile(@hosts)
|
149
|
-
vagrant.should_receive(:vagrant_cmd).with("destroy --force").once
|
157
|
+
vagrant.make_vfile( @hosts )
|
158
|
+
vagrant.should_receive( :vagrant_cmd ).with( "destroy --force" ).once
|
150
159
|
vagrant.provision
|
151
160
|
end
|
152
161
|
|
data/spec/beaker/logger_spec.rb
CHANGED
@@ -16,7 +16,7 @@ module Beaker
|
|
16
16
|
context 'default for' do
|
17
17
|
its(:destinations) { should include(STDOUT) }
|
18
18
|
its(:color) { should be_nil }
|
19
|
-
its(:log_level) { should be :
|
19
|
+
its(:log_level) { should be :verbose }
|
20
20
|
end
|
21
21
|
end
|
22
22
|
|
@@ -54,6 +54,30 @@ module Beaker
|
|
54
54
|
colorized_logger.optionally_color "\e[00;30m", 'my string'
|
55
55
|
end
|
56
56
|
|
57
|
+
context 'at verbose log_level' do
|
58
|
+
subject( :verbose_logger ) { Logger.new( my_io,
|
59
|
+
:log_level => 'verbose',
|
60
|
+
:quiet => true,
|
61
|
+
:color => true )
|
62
|
+
}
|
63
|
+
|
64
|
+
its( :is_debug? ) { should be_false }
|
65
|
+
its( :is_verbose? ) { should be_true }
|
66
|
+
its( :is_warn? ) { should be_true }
|
67
|
+
|
68
|
+
context 'but print' do
|
69
|
+
before do
|
70
|
+
my_io.stub :puts
|
71
|
+
my_io.should_receive( :print ).at_least :twice
|
72
|
+
end
|
73
|
+
|
74
|
+
it( 'warnings' ) { verbose_logger.warn 'IMA WARNING!' }
|
75
|
+
it( 'successes' ) { verbose_logger.success 'SUCCESS!' }
|
76
|
+
it( 'errors' ) { verbose_logger.error 'ERROR!' }
|
77
|
+
it( 'host_output' ) { verbose_logger.host_output 'ERROR!' }
|
78
|
+
it( 'debugs' ) { verbose_logger.debug 'NOT DEBUGGING!' }
|
79
|
+
end
|
80
|
+
end
|
57
81
|
|
58
82
|
context 'at debug log_level' do
|
59
83
|
subject( :debug_logger ) { Logger.new( my_io,
|
@@ -65,7 +89,6 @@ module Beaker
|
|
65
89
|
its( :is_debug? ) { should be_true }
|
66
90
|
its( :is_warn? ) { should be_true }
|
67
91
|
|
68
|
-
|
69
92
|
context 'successfully print' do
|
70
93
|
before do
|
71
94
|
my_io.stub :puts
|
@@ -82,8 +105,9 @@ module Beaker
|
|
82
105
|
|
83
106
|
context 'at info log_level' do
|
84
107
|
subject( :info_logger ) { Logger.new( my_io,
|
85
|
-
:
|
86
|
-
:
|
108
|
+
:log_level => :info,
|
109
|
+
:quiet => true,
|
110
|
+
:color => true )
|
87
111
|
}
|
88
112
|
|
89
113
|
its( :is_debug? ) { should be_false }
|
@@ -36,7 +36,7 @@ module Beaker
|
|
36
36
|
it "can exec the get_ip command" do
|
37
37
|
host = make_host('name', { :stdout => "192.168.2.130\n" } )
|
38
38
|
|
39
|
-
Command.should_receive( :new ).with( "ip a|awk '/
|
39
|
+
Command.should_receive( :new ).with( "ip a|awk '/global/{print$2}' | cut -d/ -f1 | head -1" ).once
|
40
40
|
|
41
41
|
expect( host_handler.get_ip( host ) ).to be === "192.168.2.130"
|
42
42
|
|
@@ -20,7 +20,7 @@ module Beaker
|
|
20
20
|
path = Beaker::Utils::SetupHelper::ETC_HOSTS_PATH
|
21
21
|
master = setup_helper.only_host_with_role(hosts, :master)
|
22
22
|
|
23
|
-
Command.should_receive( :new ).with( "ip a|awk '/
|
23
|
+
Command.should_receive( :new ).with( "ip a|awk '/global/{print$2}' | cut -d/ -f1 | head -1" ).once
|
24
24
|
Command.should_receive( :new ).with( "cp %s %s.old" % [path, path] ).once
|
25
25
|
Command.should_receive( :new ).with( "cp %s %s.new" % [path, path] ).once
|
26
26
|
Command.should_receive( :new ).with( "grep -v '#{ip} #{master}' %s > %s.new" % [path, path] ).once
|
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: 1.
|
4
|
+
version: 1.7.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Puppetlabs
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-02-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rspec
|