beaker 1.11.2 → 1.12.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +8 -8
- data/lib/beaker/dsl/helpers.rb +7 -1
- data/lib/beaker/dsl/install_utils.rb +46 -10
- data/lib/beaker/version.rb +1 -1
- data/spec/beaker/dsl/install_utils_spec.rb +55 -11
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
NWYzNDNkZGNiOTY2ZTlkYTFmNWMwM2ZmYTU2ZTVkYTc4Nzg2MmM0ZA==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
NTg2ODk5ZjczMzM0ZWQzZTk4YzM2ZGZmODYyOGJmOTE4YmRiNmEzZg==
|
7
7
|
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
ZDU3MDhmZTdjZDYxMGQ5MmIyZDdmMWQ5ZDc2MWE5OGJlNmNkODEwM2NkM2Q1
|
10
|
+
NWJlNjg4NDM3MzMwZGI4OTQ4MmZlZjBlM2M1MjE3NjAyMjA4ZDM0OTM5MTMy
|
11
|
+
ZTQ5OGZjNmU2YTdiMzI2OTlmMmNiMGY4NWI4YmM2NGQ2ZWQ2YWU=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
NWViYmEzMmE5OGQxZGNkZGMzODllOWRjN2ZmNGJmMjcwOTZiOThhYTVkNDE4
|
14
|
+
NTI4NzUxZGRhZmUzOGQ2MDYwMDQ4NWI0OTg0Y2EyZDY2YTUyYmYzMTk4MWYy
|
15
|
+
MGY1MTBhOWFmY2QwMDVkM2QyMTdmZTRmODU5N2MxNjA3MmFhYmM=
|
data/lib/beaker/dsl/helpers.rb
CHANGED
@@ -926,7 +926,13 @@ module Beaker
|
|
926
926
|
# that if the script doesn't exist, we should just use `pe-puppet`
|
927
927
|
result = on agent, "[ -e /etc/init.d/pe-puppet-agent ]", :acceptable_exit_codes => [0,1]
|
928
928
|
agent_service = (result.exit_code == 0) ? 'pe-puppet-agent' : 'pe-puppet'
|
929
|
-
|
929
|
+
if agent['platform'] =~ /el-4/
|
930
|
+
# On EL4, the init script does not work correctly with
|
931
|
+
# 'puppet resource service'
|
932
|
+
on agent, "/etc/init.d/#{agent_service} stop"
|
933
|
+
else
|
934
|
+
on agent, puppet_resource('service', agent_service, 'ensure=stopped')
|
935
|
+
end
|
930
936
|
end
|
931
937
|
|
932
938
|
#stops the puppet agent running on the default host
|
@@ -149,10 +149,14 @@ module Beaker
|
|
149
149
|
# on host, "#{installer_cmd(host, opts)} -a #{host['working_dir']}/answers"
|
150
150
|
# @api private
|
151
151
|
def installer_cmd(host, opts)
|
152
|
-
version =
|
152
|
+
version = host['pe_ver'] || opts[:pe_ver]
|
153
153
|
if host['platform'] =~ /windows/
|
154
154
|
version = opts[:pe_ver_win] || host['pe_ver']
|
155
155
|
"cd #{host['working_dir']} && cmd /C 'start /w msiexec.exe /qn /i puppet-enterprise-#{version}.msi PUPPET_MASTER_SERVER=#{master} PUPPET_AGENT_CERTNAME=#{host}'"
|
156
|
+
elsif host['platform'] =~ /osx/
|
157
|
+
version = host['pe_ver'] || opts[:pe_ver]
|
158
|
+
"cd #{host['working_dir']} && hdiutil attach #{host['dist']}.dmg && installer -pkg /Volumes/puppet-enterprise-#{version}/puppet-enterprise-installer-#{version}.pkg -target /"
|
159
|
+
|
156
160
|
# Frictionless install didn't exist pre-3.2.0, so in that case we fall
|
157
161
|
# through and do a regular install.
|
158
162
|
elsif host['roles'].include? 'frictionless' and ! version_is_less(version, '3.2.0')
|
@@ -180,15 +184,39 @@ module Beaker
|
|
180
184
|
end
|
181
185
|
end
|
182
186
|
|
187
|
+
#Determine the PE package to download/upload on a mac host, download/upload that package onto the host.
|
188
|
+
# Assumed file name format: puppet-enterprise-3.3.0-rc1-559-g97f0833-osx-10.9-x86_64.dmg.
|
189
|
+
# @param [Host] host The mac host to download/upload and unpack PE onto
|
190
|
+
# @param [Hash{Symbol=>Symbol, String}] opts The options
|
191
|
+
# @option opts [String] :pe_dir Default directory or URL to pull PE package from
|
192
|
+
# (Otherwise uses individual hosts pe_dir)
|
193
|
+
# @api private
|
194
|
+
def fetch_puppet_on_mac(host, opts)
|
195
|
+
path = host['pe_dir'] || opts[:pe_dir]
|
196
|
+
local = File.directory?(path)
|
197
|
+
filename = "#{host['dist']}"
|
198
|
+
extension = ".dmg"
|
199
|
+
if local
|
200
|
+
if not File.exists?("#{path}/#{filename}#{extension}")
|
201
|
+
raise "attempting installation on #{host}, #{path}/#{filename}#{extension} does not exist"
|
202
|
+
end
|
203
|
+
scp_to host, "#{path}/#{filename}#{extension}", "#{host['working_dir']}/#{filename}#{extension}"
|
204
|
+
else
|
205
|
+
if not link_exists?("#{path}/#{filename}#{extension}")
|
206
|
+
raise "attempting installation on #{host}, #{path}/#{filename}#{extension} does not exist"
|
207
|
+
end
|
208
|
+
on host, "cd #{host['working_dir']}; curl -O #{path}/#{filename}#{extension}"
|
209
|
+
end
|
210
|
+
end
|
211
|
+
|
183
212
|
#Determine the PE package to download/upload on a windows host, download/upload that package onto the host.
|
213
|
+
#Assumed file name format: puppet-enterprise-3.3.0-rc1-559-g97f0833.msi
|
184
214
|
# @param [Host] host The windows host to download/upload and unpack PE onto
|
185
215
|
# @param [Hash{Symbol=>Symbol, String}] opts The options
|
186
216
|
# @option opts [String] :pe_dir Default directory or URL to pull PE package from
|
187
217
|
# (Otherwise uses individual hosts pe_dir)
|
188
|
-
# @option opts [String] :
|
218
|
+
# @option opts [String] :pe_ver_win Default PE version to install or upgrade to
|
189
219
|
# (Otherwise uses individual hosts pe_ver)
|
190
|
-
# @option opts [String] :pe_ver_win Default PE version to install or upgrade to on Windows hosts
|
191
|
-
# (Otherwise uses individual Windows hosts pe_ver)
|
192
220
|
# @api private
|
193
221
|
def fetch_puppet_on_windows(host, opts)
|
194
222
|
path = host['pe_dir'] || opts[:pe_dir]
|
@@ -215,8 +243,6 @@ module Beaker
|
|
215
243
|
# @param [Hash{Symbol=>Symbol, String}] opts The options
|
216
244
|
# @option opts [String] :pe_dir Default directory or URL to pull PE package from
|
217
245
|
# (Otherwise uses individual hosts pe_dir)
|
218
|
-
# @option opts [String] :pe_ver Default PE version to install or upgrade to
|
219
|
-
# (Otherwise uses individual hosts pe_ver)
|
220
246
|
# @api private
|
221
247
|
def fetch_puppet_on_unix(host, opts)
|
222
248
|
path = host['pe_dir'] || opts[:pe_dir]
|
@@ -262,9 +288,10 @@ module Beaker
|
|
262
288
|
# We install Puppet from the master for frictionless installs, so we don't need to *fetch* anything
|
263
289
|
next if host['roles'].include? 'frictionless' and ! version_is_less(opts[:pe_ver] || host['pe_ver'], '3.2.0')
|
264
290
|
|
265
|
-
|
266
|
-
if windows
|
291
|
+
if host['platform'] =~ /windows/
|
267
292
|
fetch_puppet_on_windows(host, opts)
|
293
|
+
elsif host['platform'] =~ /osx/
|
294
|
+
fetch_puppet_on_mac(host, opts)
|
268
295
|
else
|
269
296
|
fetch_puppet_on_unix(host, opts)
|
270
297
|
end
|
@@ -311,10 +338,13 @@ module Beaker
|
|
311
338
|
use_all_tar = ENV['PE_USE_ALL_TAR'] == 'true'
|
312
339
|
hosts.each do |host|
|
313
340
|
host['pe_installer'] ||= 'puppet-enterprise-installer'
|
314
|
-
if host['platform'] !~ /windows/
|
341
|
+
if host['platform'] !~ /windows|osx/
|
315
342
|
platform = use_all_tar ? 'all' : host['platform']
|
316
343
|
version = host['pe_ver'] || opts[:pe_ver]
|
317
344
|
host['dist'] = "puppet-enterprise-#{version}-#{platform}"
|
345
|
+
elsif host['platform'] =~ /osx/
|
346
|
+
version = host['pe_ver'] || opts[:pe_ver]
|
347
|
+
host['dist'] = "puppet-enterprise-#{version}-#{host['platform']}"
|
318
348
|
end
|
319
349
|
host['working_dir'] = "/tmp/" + Time.new.strftime("%Y-%m-%d_%H.%M.%S") #unique working dirs make me happy
|
320
350
|
on host, "mkdir #{host['working_dir']}"
|
@@ -327,6 +357,13 @@ module Beaker
|
|
327
357
|
next if host == database and host != master and host != dashboard and pre30database
|
328
358
|
if host['platform'] =~ /windows/
|
329
359
|
on host, installer_cmd(host, opts)
|
360
|
+
elsif host['platform'] =~ /osx/
|
361
|
+
on host, installer_cmd(host, opts)
|
362
|
+
#set the certname and master
|
363
|
+
on host, puppet("config set server #{master}")
|
364
|
+
on host, puppet("config set certname #{host}")
|
365
|
+
#run once to request cert
|
366
|
+
on host, puppet_agent('-t'), :acceptable_exit_codes => [1]
|
330
367
|
else
|
331
368
|
# We only need answers if we're using the classic installer
|
332
369
|
version = host['pe_ver'] || opts[:pe_ver]
|
@@ -343,7 +380,6 @@ module Beaker
|
|
343
380
|
end
|
344
381
|
end
|
345
382
|
|
346
|
-
|
347
383
|
# If we're installing a database version less than 3.0, ignore the database host
|
348
384
|
install_hosts = hosts.dup
|
349
385
|
install_hosts.delete(database) if pre30database and database != master and database != dashboard
|
data/lib/beaker/version.rb
CHANGED
@@ -12,11 +12,15 @@ describe ClassMixedWithDSLInstallUtils do
|
|
12
12
|
:platform => 'linux',
|
13
13
|
:roles => [ 'agent' ] } ) }
|
14
14
|
let(:hosts) { basic_hosts[0][:roles] = ['master', 'database', 'dashboard']
|
15
|
-
|
16
|
-
|
15
|
+
basic_hosts[1][:platform] = 'windows'
|
16
|
+
basic_hosts[2][:platform] = 'osx-10.9-x86_64'
|
17
|
+
basic_hosts }
|
17
18
|
let(:winhost) { make_host( 'winhost', { :platform => 'windows',
|
18
19
|
:pe_ver => '3.0',
|
19
20
|
:working_dir => '/tmp' } ) }
|
21
|
+
let(:machost) { make_host( 'machost', { :platform => 'osx-10.9-x86_64',
|
22
|
+
:pe_ver => '3.0',
|
23
|
+
:working_dir => '/tmp' } ) }
|
20
24
|
let(:unixhost) { make_host( 'unixhost', { :platform => 'linux',
|
21
25
|
:pe_ver => '3.0',
|
22
26
|
:working_dir => '/tmp',
|
@@ -93,7 +97,7 @@ describe ClassMixedWithDSLInstallUtils do
|
|
93
97
|
|
94
98
|
it 'leaves correctly ordered hosts alone' do
|
95
99
|
subject.stub( :hosts ).and_return( hosts )
|
96
|
-
expect( subject.sorted_hosts ).to be === hosts
|
100
|
+
expect( subject.sorted_hosts ).to be === hosts
|
97
101
|
end
|
98
102
|
end
|
99
103
|
|
@@ -136,6 +140,12 @@ describe ClassMixedWithDSLInstallUtils do
|
|
136
140
|
the_host['pe_installer'] = 'puppet-enterprise-installer'
|
137
141
|
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"
|
138
142
|
end
|
143
|
+
|
144
|
+
it 'generates a osx PE install command for a osx host' do
|
145
|
+
the_host = machost.dup
|
146
|
+
the_host['pe_installer'] = 'puppet-enterprise-installer'
|
147
|
+
expect( subject.installer_cmd( the_host, {} ) ).to be === "cd /tmp && hdiutil attach .dmg && installer -pkg /Volumes/puppet-enterprise-3.0/puppet-enterprise-installer-3.0.pkg -target /"
|
148
|
+
end
|
139
149
|
end
|
140
150
|
|
141
151
|
describe 'fetch_puppet' do
|
@@ -161,7 +171,7 @@ describe ClassMixedWithDSLInstallUtils do
|
|
161
171
|
subject.stub( :link_exists? ) do |arg|
|
162
172
|
if arg =~ /.tar.gz/ #there is no .tar.gz link, only a .tar
|
163
173
|
false
|
164
|
-
else
|
174
|
+
else
|
165
175
|
true
|
166
176
|
end
|
167
177
|
end
|
@@ -186,7 +196,7 @@ describe ClassMixedWithDSLInstallUtils do
|
|
186
196
|
subject.should_receive( :on ).with( unixhost, "cd #{ unixhost['working_dir'] }; curl #{ path }/#{ filename }#{ extension } | gunzip | tar -xvf -" ).once
|
187
197
|
subject.fetch_puppet( [unixhost], {} )
|
188
198
|
end
|
189
|
-
|
199
|
+
|
190
200
|
it 'can push a local PE package to a windows host' do
|
191
201
|
File.stub( :directory? ).and_return( true ) #is local
|
192
202
|
File.stub( :exists? ).and_return( true ) #is present
|
@@ -201,6 +211,32 @@ describe ClassMixedWithDSLInstallUtils do
|
|
201
211
|
|
202
212
|
end
|
203
213
|
|
214
|
+
it 'can download a PE dmg from a URL to a mac host' do
|
215
|
+
File.stub( :directory? ).and_return( false ) #is not local
|
216
|
+
machost['pe_dir'] = 'http://www.path.com/dir/'
|
217
|
+
subject.stub( :link_exists? ).and_return( true ) #is not local
|
218
|
+
subject.stub( :on ).and_return( true )
|
219
|
+
|
220
|
+
path = machost['pe_dir']
|
221
|
+
filename = "#{ machost['dist'] }"
|
222
|
+
extension = '.dmg'
|
223
|
+
subject.should_receive( :on ).with( machost, "cd #{ machost['working_dir'] }; curl -O #{ path }/#{ filename }#{ extension }" ).once
|
224
|
+
subject.fetch_puppet( [machost], {} )
|
225
|
+
end
|
226
|
+
|
227
|
+
it 'can push a PE dmg to a mac host' do
|
228
|
+
File.stub( :directory? ).and_return( true ) #is local
|
229
|
+
machost['pe_dir'] = 'http://www.path.com/dir/'
|
230
|
+
File.stub( :exists? ).and_return( true ) #is present
|
231
|
+
subject.stub( :scp_to ).and_return( true )
|
232
|
+
|
233
|
+
path = machost['pe_dir']
|
234
|
+
filename = "#{ machost['dist'] }"
|
235
|
+
extension = '.dmg'
|
236
|
+
subject.should_receive( :scp_to ).with( machost, "#{ path }/#{ filename }#{ extension }", "#{ machost['working_dir'] }/#{ filename }#{ extension }" ).once
|
237
|
+
subject.fetch_puppet( [machost], {} )
|
238
|
+
end
|
239
|
+
|
204
240
|
it "does nothing for a frictionless agent for PE >= 3.2.0" do
|
205
241
|
unixhost['roles'] << 'frictionless'
|
206
242
|
unixhost['pe_ver'] = '3.2.0'
|
@@ -220,7 +256,12 @@ describe ClassMixedWithDSLInstallUtils do
|
|
220
256
|
subject.stub( :stop_agent_on ).and_return( true )
|
221
257
|
subject.stub( :sleep_until_puppetdb_started ).and_return( true )
|
222
258
|
subject.stub( :wait_for_host_in_dashboard ).and_return( true )
|
223
|
-
subject.stub( :puppet_agent ).and_return
|
259
|
+
subject.stub( :puppet_agent ).and_return do |arg|
|
260
|
+
"puppet agent #{arg}"
|
261
|
+
end
|
262
|
+
subject.stub( :puppet ).and_return do |arg|
|
263
|
+
"puppet #{arg}"
|
264
|
+
end
|
224
265
|
|
225
266
|
subject.stub( :hosts ).and_return( hosts )
|
226
267
|
#determine mastercert
|
@@ -231,11 +272,14 @@ describe ClassMixedWithDSLInstallUtils do
|
|
231
272
|
subject.should_receive( :on ).with( hosts[2], /mkdir/ ).once
|
232
273
|
#create answers file per-host, except windows
|
233
274
|
subject.should_receive( :create_remote_file ).with( hosts[0], /answers/, /q/ ).once
|
234
|
-
subject.should_receive( :create_remote_file ).with( hosts[2], /answers/, /q/ ).once
|
235
275
|
#run installer on all hosts
|
236
276
|
subject.should_receive( :on ).with( hosts[0], /puppet-enterprise-installer/ ).once
|
237
277
|
subject.should_receive( :on ).with( hosts[1], /msiexec.exe/ ).once
|
238
|
-
subject.should_receive( :on ).with( hosts[2], /puppet-enterprise-installer
|
278
|
+
subject.should_receive( :on ).with( hosts[2], / hdiutil attach puppet-enterprise-3.0-osx-10.9-x86_64.dmg && installer -pkg \/Volumes\/puppet-enterprise-3.0\/puppet-enterprise-installer-3.0.pkg -target \// ).once
|
279
|
+
#does extra mac specific commands
|
280
|
+
subject.should_receive( :on ).with( hosts[2], /puppet config set server/ ).once
|
281
|
+
subject.should_receive( :on ).with( hosts[2], /puppet config set certname/ ).once
|
282
|
+
subject.should_receive( :on ).with( hosts[2], /puppet agent -t/, :acceptable_exit_codes => [1] ).once
|
239
283
|
#sign certificate per-host
|
240
284
|
subject.should_receive( :sign_certificate_for ).with( hosts[0] ).once
|
241
285
|
subject.should_receive( :sign_certificate_for ).with( hosts[1] ).once
|
@@ -247,9 +291,9 @@ describe ClassMixedWithDSLInstallUtils do
|
|
247
291
|
#wait for puppetdb to start
|
248
292
|
subject.should_receive( :sleep_until_puppetdb_started ).with( hosts[0] ).once
|
249
293
|
#run each puppet agent once
|
250
|
-
subject.should_receive( :on ).with( hosts[0], /puppet agent/, :acceptable_exit_codes => [0,2] ).once
|
251
|
-
subject.should_receive( :on ).with( hosts[1], /puppet agent/, :acceptable_exit_codes => [0,2] ).once
|
252
|
-
subject.should_receive( :on ).with( hosts[2], /puppet agent/, :acceptable_exit_codes => [0,2] ).once
|
294
|
+
subject.should_receive( :on ).with( hosts[0], /puppet agent -t/, :acceptable_exit_codes => [0,2] ).once
|
295
|
+
subject.should_receive( :on ).with( hosts[1], /puppet agent -t/, :acceptable_exit_codes => [0,2] ).once
|
296
|
+
subject.should_receive( :on ).with( hosts[2], /puppet agent -t/, :acceptable_exit_codes => [0,2] ).once
|
253
297
|
#run rake task on dashboard
|
254
298
|
subject.should_receive( :on ).with( hosts[0], /\/opt\/puppet\/bin\/rake -sf \/opt\/puppet\/share\/puppet-dashboard\/Rakefile .* RAILS_ENV=production/ ).once
|
255
299
|
#wait for all hosts to appear in the dashboard
|
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.12.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-05-
|
11
|
+
date: 2014-05-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: minitest
|