beaker-puppet 1.29.0 → 2.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (73) hide show
  1. checksums.yaml +4 -4
  2. data/.github/dependabot.yml +9 -0
  3. data/.github/workflows/release.yml +3 -3
  4. data/.github/workflows/test.yml +28 -7
  5. data/.rubocop.yml +5 -0
  6. data/.rubocop_todo.yml +842 -0
  7. data/CHANGELOG.md +39 -0
  8. data/Gemfile +5 -20
  9. data/Rakefile +64 -169
  10. data/acceptance/config/acceptance-options.rb +3 -3
  11. data/acceptance/config/gem/acceptance-options.rb +8 -8
  12. data/acceptance/config/git/acceptance-options.rb +8 -8
  13. data/acceptance/config/pkg/acceptance-options.rb +7 -7
  14. data/acceptance/pre_suite/gem/install.rb +6 -6
  15. data/acceptance/pre_suite/git/install.rb +22 -22
  16. data/acceptance/pre_suite/pkg/install.rb +3 -3
  17. data/acceptance/tests/backwards_compatible.rb +6 -7
  18. data/acceptance/tests/clone_git_repo_on_test.rb +12 -13
  19. data/acceptance/tests/create_tmpdir_on_test.rb +13 -9
  20. data/acceptance/tests/install_smoke_test.rb +5 -4
  21. data/acceptance/tests/stub_host.rb +11 -10
  22. data/acceptance/tests/web_helpers_test.rb +11 -10
  23. data/beaker-puppet.gemspec +16 -23
  24. data/bin/beaker-puppet +2 -4
  25. data/lib/beaker-puppet/helpers/facter_helpers.rb +9 -7
  26. data/lib/beaker-puppet/helpers/host_helpers.rb +10 -7
  27. data/lib/beaker-puppet/helpers/puppet_helpers.rb +151 -160
  28. data/lib/beaker-puppet/helpers/rake_helpers.rb +1 -1
  29. data/lib/beaker-puppet/helpers/tk_helpers.rb +22 -28
  30. data/lib/beaker-puppet/install_utils/aio_defaults.rb +39 -43
  31. data/lib/beaker-puppet/install_utils/ezbake_utils.rb +34 -42
  32. data/lib/beaker-puppet/install_utils/foss_defaults.rb +134 -138
  33. data/lib/beaker-puppet/install_utils/foss_utils.rb +294 -321
  34. data/lib/beaker-puppet/install_utils/module_utils.rb +58 -70
  35. data/lib/beaker-puppet/install_utils/puppet5.rb +30 -35
  36. data/lib/beaker-puppet/install_utils/puppet_utils.rb +58 -68
  37. data/lib/beaker-puppet/install_utils/windows_utils.rb +34 -36
  38. data/lib/beaker-puppet/version.rb +1 -1
  39. data/lib/beaker-puppet/wrappers.rb +13 -14
  40. data/lib/beaker-puppet.rb +4 -5
  41. data/setup/aio/010_Install_Puppet_Agent.rb +5 -6
  42. data/setup/common/000-delete-puppet-when-none.rb +2 -4
  43. data/setup/common/003_solaris_cert_fix.rb +74 -70
  44. data/setup/common/005_redhat_subscription_fix.rb +3 -2
  45. data/setup/common/011_Install_Puppet_Server.rb +7 -9
  46. data/setup/common/012_Finalize_Installs.rb +5 -5
  47. data/setup/common/025_StopFirewall.rb +1 -1
  48. data/setup/common/030_StopSssd.rb +2 -2
  49. data/setup/common/040_ValidateSignCert.rb +10 -12
  50. data/setup/common/045_EnsureMasterStarted.rb +2 -2
  51. data/setup/gem/010_GemInstall.rb +5 -4
  52. data/setup/git/000_EnvSetup.rb +48 -48
  53. data/setup/git/010_TestSetup.rb +13 -12
  54. data/setup/git/020_PuppetUserAndGroup.rb +3 -2
  55. data/setup/git/060_InstallModules.rb +14 -14
  56. data/setup/git/070_InstallCACerts.rb +82 -82
  57. data/spec/beaker-puppet/helpers/facter_helpers_spec.rb +22 -24
  58. data/spec/beaker-puppet/helpers/host_helpers_spec.rb +10 -6
  59. data/spec/beaker-puppet/helpers/puppet_helpers_spec.rb +506 -517
  60. data/spec/beaker-puppet/helpers/tk_helpers_spec.rb +20 -24
  61. data/spec/beaker-puppet/install_utils/ezbake_utils_spec.rb +86 -90
  62. data/spec/beaker-puppet/install_utils/foss_utils_spec.rb +636 -599
  63. data/spec/beaker-puppet/install_utils/module_utils_spec.rb +125 -116
  64. data/spec/beaker-puppet/install_utils/puppet5_spec.rb +159 -165
  65. data/spec/beaker-puppet/install_utils/puppet_utils_spec.rb +92 -77
  66. data/spec/beaker-puppet/install_utils/windows_utils_spec.rb +101 -89
  67. data/spec/beaker-puppet/wrappers_spec.rb +10 -10
  68. data/spec/helpers.rb +85 -91
  69. data/tasks/ci.rake +171 -179
  70. metadata +33 -62
  71. data/setup/common/020_InstallCumulusModules.rb +0 -13
  72. data/setup/common/021_InstallAristaModuleMasters.rb +0 -12
  73. data/setup/common/022_InstallAristaModuleAgents.rb +0 -13
@@ -1,4 +1,3 @@
1
- # coding: utf-8
2
1
  require 'timeout'
3
2
  require 'inifile'
4
3
  require 'resolv'
@@ -9,10 +8,9 @@ module Beaker
9
8
  # Methods that help you interact with your puppet installation, puppet must be installed
10
9
  # for these methods to execute correctly
11
10
  module PuppetHelpers
12
-
13
11
  # Return the regular expression pattern for an IPv4 address
14
12
  def ipv4_regex
15
- return /(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)/
13
+ /(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)/
16
14
  end
17
15
 
18
16
  # Return the IP address that given hostname returns when resolved on
@@ -23,8 +21,8 @@ module Beaker
23
21
  #
24
22
  # @return [String, nil] An IP address, or nil.
25
23
  def resolve_hostname_on(host, hostname)
26
- match = curl_on(host, "--verbose #{hostname}", :accept_all_exit_codes => true).stderr.match(ipv4_regex)
27
- return match ? match[0] : nil
24
+ match = curl_on(host, "--verbose #{hostname}", accept_all_exit_codes: true).stderr.match(ipv4_regex)
25
+ match ? match[0] : nil
28
26
  end
29
27
 
30
28
  # @!macro [new] common_opts
@@ -152,13 +150,19 @@ module Beaker
152
150
  # end
153
151
  #
154
152
  def with_puppet_running_on(host, conf_opts, testdir = host.tmpdir(File.basename(@path)), &block)
155
- raise(ArgumentError, "with_puppet_running_on's conf_opts must be a Hash. You provided a #{conf_opts.class}: '#{conf_opts}'") if !conf_opts.kind_of?(Hash)
153
+ unless conf_opts.is_a?(Hash)
154
+ raise(ArgumentError,
155
+ "with_puppet_running_on's conf_opts must be a Hash. You provided a #{conf_opts.class}: '#{conf_opts}'")
156
+ end
157
+
156
158
  cmdline_args = conf_opts[:__commandline_args__]
157
159
  service_args = conf_opts[:__service_args__] || {}
158
160
  restart_when_done = true
159
161
  restart_when_done = host[:restart_when_done] if host.has_key?(:restart_when_done)
160
162
  restart_when_done = conf_opts.fetch(:restart_when_done, restart_when_done)
161
- conf_opts = conf_opts.reject { |k,v| [:__commandline_args__, :__service_args__, :restart_when_done].include?(k) }
163
+ conf_opts = conf_opts.reject do |k, v|
164
+ %i[__commandline_args__ __service_args__ restart_when_done].include?(k)
165
+ end
162
166
 
163
167
  curl_retries = host['master-start-curl-retries'] || options['master-start-curl-retries']
164
168
  logger.debug "Setting curl retries to #{curl_retries}"
@@ -168,29 +172,29 @@ module Beaker
168
172
  vardir = puppet_config(host, 'vardir', section: 'master')
169
173
 
170
174
  if cmdline_args
171
- split_args = cmdline_args.split()
175
+ split_args = cmdline_args.split
172
176
 
173
177
  split_args.each do |arg|
174
178
  case arg
175
179
  when /--confdir=(.*)/
176
- confdir = $1
180
+ confdir = ::Regexp.last_match(1)
177
181
  when /--vardir=(.*)/
178
- vardir = $1
182
+ vardir = ::Regexp.last_match(1)
179
183
  end
180
184
  end
181
185
  end
182
186
 
183
187
  puppetserver_opts = {
184
- "jruby-puppet" => {
185
- "master-conf-dir" => confdir,
186
- "master-var-dir" => vardir,
188
+ 'jruby-puppet' => {
189
+ 'master-conf-dir' => confdir,
190
+ 'master-var-dir' => vardir,
191
+ },
192
+ 'certificate-authority' => {
193
+ 'allow-subject-alt-names' => true,
187
194
  },
188
- "certificate-authority" => {
189
- "allow-subject-alt-names" => true
190
- }
191
195
  }
192
196
 
193
- puppetserver_conf = File.join("#{host['puppetserver-confdir']}", "puppetserver.conf")
197
+ puppetserver_conf = File.join("#{host['puppetserver-confdir']}", 'puppetserver.conf')
194
198
  modify_tk_config(host, puppetserver_conf, puppetserver_opts)
195
199
  end
196
200
  begin
@@ -201,14 +205,14 @@ module Beaker
201
205
  lay_down_new_puppet_conf host, conf_opts, testdir
202
206
 
203
207
  if host.use_service_scripts? && !service_args[:bypass_service_script]
204
- bounce_service( host, host['puppetservice'], curl_retries )
208
+ bounce_service(host, host['puppetservice'], curl_retries)
205
209
  else
206
- puppet_master_started = start_puppet_from_source_on!( host, cmdline_args )
210
+ puppet_master_started = start_puppet_from_source_on!(host, cmdline_args)
207
211
  end
208
212
 
209
213
  yield self if block_given?
210
214
 
211
- # FIXME: these test-flow-control exceptions should be using throw
215
+ # FIXME: these test-flow-control exceptions should be using throw
212
216
  # they can be caught in test_case. current layout dows not allow it
213
217
  rescue Beaker::DSL::Outcomes::PassTest => early_assertion
214
218
  pass_test(early_assertion)
@@ -223,41 +227,34 @@ module Beaker
223
227
  rescue Exception => early_exception
224
228
  original_exception = RuntimeError.new("PuppetAcceptance::DSL::Helpers.with_puppet_running_on failed (check backtrace for location) because: #{early_exception}\n#{early_exception.backtrace.join("\n")}\n")
225
229
  raise(original_exception)
226
-
227
230
  ensure
228
231
  begin
229
-
230
232
  if host.use_service_scripts? && !service_args[:bypass_service_script]
231
- restore_puppet_conf_from_backup( host, backup_file )
233
+ restore_puppet_conf_from_backup(host, backup_file)
232
234
  if restart_when_done
233
- bounce_service( host, host['puppetservice'], curl_retries )
235
+ bounce_service(host, host['puppetservice'], curl_retries)
234
236
  else
235
237
  host.exec puppet_resource('service', host['puppetservice'], 'ensure=stopped')
236
238
  end
237
239
  else
238
240
  if puppet_master_started
239
- stop_puppet_from_source_on( host )
241
+ stop_puppet_from_source_on(host)
240
242
  else
241
243
  dump_puppet_log(host)
242
244
  end
243
- restore_puppet_conf_from_backup( host, backup_file )
245
+ restore_puppet_conf_from_backup(host, backup_file)
244
246
  end
245
-
246
247
  rescue Exception => teardown_exception
247
248
  begin
248
- if !host.is_pe?
249
- dump_puppet_log(host)
250
- end
249
+ dump_puppet_log(host) unless host.is_pe?
251
250
  rescue Exception => dumping_exception
252
251
  logger.error("Raised during attempt to dump puppet logs: #{dumping_exception}")
253
252
  end
254
253
 
255
- if original_exception
256
- logger.error("Raised during attempt to teardown with_puppet_running_on: #{teardown_exception}\n---\n")
257
- raise original_exception
258
- else
259
- raise teardown_exception
260
- end
254
+ raise teardown_exception unless original_exception
255
+
256
+ logger.error("Raised during attempt to teardown with_puppet_running_on: #{teardown_exception}\n---\n")
257
+ raise original_exception
261
258
  end
262
259
  end
263
260
  end
@@ -265,44 +262,44 @@ module Beaker
265
262
  # Test Puppet running in a certain run mode with specific options,
266
263
  # on the default host
267
264
  # @see #with_puppet_running_on
268
- def with_puppet_running conf_opts, testdir = host.tmpdir(File.basename(@path)), &block
265
+ def with_puppet_running(conf_opts, testdir = host.tmpdir(File.basename(@path)), &block)
269
266
  with_puppet_running_on(default, conf_opts, testdir, &block)
270
267
  end
271
268
 
272
269
  # @!visibility private
273
- def restore_puppet_conf_from_backup( host, backup_file )
270
+ def restore_puppet_conf_from_backup(host, backup_file)
274
271
  puppet_conf = puppet_config(host, 'config', section: 'master')
275
272
 
276
273
  if backup_file
277
- host.exec( Command.new( "if [ -f '#{backup_file}' ]; then " +
274
+ host.exec(Command.new("if [ -f '#{backup_file}' ]; then " +
278
275
  "cat '#{backup_file}' > " +
279
276
  "'#{puppet_conf}'; " +
280
277
  "rm -f '#{backup_file}'; " +
281
- "fi" ) )
278
+ 'fi'))
282
279
  else
283
- host.exec( Command.new( "rm -f '#{puppet_conf}'" ))
280
+ host.exec(Command.new("rm -f '#{puppet_conf}'"))
284
281
  end
285
-
286
282
  end
287
283
 
288
284
  # @!visibility private
289
- def start_puppet_from_source_on! host, args = ''
290
- host.exec( puppet( 'master', args ) )
285
+ def start_puppet_from_source_on!(host, args = '')
286
+ host.exec(puppet('master', args))
291
287
 
292
288
  logger.debug 'Waiting for the puppet master to start'
293
- unless port_open_within?( host, 8140, 10 )
294
- raise Beaker::DSL::FailTest, 'Puppet master did not start in a timely fashion'
295
- end
289
+ raise Beaker::DSL::FailTest, 'Puppet master did not start in a timely fashion' unless port_open_within?(
290
+ host, 8140, 10
291
+ )
292
+
296
293
  logger.debug 'The puppet master has started'
297
- return true
294
+ true
298
295
  end
299
296
 
300
297
  # @!visibility private
301
- def stop_puppet_from_source_on( host )
302
- pid = host.exec( Command.new('cat `puppet config print --section master pidfile`') ).stdout.chomp
303
- host.exec( Command.new( "kill #{pid}" ) )
298
+ def stop_puppet_from_source_on(host)
299
+ pid = host.exec(Command.new('cat `puppet config print --section master pidfile`')).stdout.chomp
300
+ host.exec(Command.new("kill #{pid}"))
304
301
  Timeout.timeout(10) do
305
- while host.exec( Command.new( "kill -0 #{pid}"), :acceptable_exit_codes => [0,1] ).exit_code == 0 do
302
+ while host.exec(Command.new("kill -0 #{pid}"), acceptable_exit_codes: [0, 1]).exit_code == 0
306
303
  # until kill -0 finds no process and we know that puppet has finished cleaning up
307
304
  sleep 1
308
305
  end
@@ -312,40 +309,38 @@ module Beaker
312
309
  # @!visibility private
313
310
  def dump_puppet_log(host)
314
311
  syslogfile = case host['platform']
315
- when /fedora|centos|el|redhat|scientific/ then '/var/log/messages'
316
- when /ubuntu|debian|cumulus/ then '/var/log/syslog'
317
- else return
318
- end
312
+ when /fedora|centos|el|redhat|scientific/ then '/var/log/messages'
313
+ when /ubuntu|debian/ then '/var/log/syslog'
314
+ else return
315
+ end
319
316
 
320
317
  logger.notify "\n*************************"
321
- logger.notify "* Dumping master log *"
322
- logger.notify "*************************"
323
- host.exec( Command.new( "tail -n 100 #{syslogfile}" ), :acceptable_exit_codes => [0,1])
318
+ logger.notify '* Dumping master log *'
319
+ logger.notify '*************************'
320
+ host.exec(Command.new("tail -n 100 #{syslogfile}"), acceptable_exit_codes: [0, 1])
324
321
  logger.notify "*************************\n"
325
322
  end
326
323
 
327
324
  # @!visibility private
328
- def lay_down_new_puppet_conf( host, configuration_options, testdir )
325
+ def lay_down_new_puppet_conf(host, configuration_options, testdir)
329
326
  puppetconf_main = puppet_config(host, 'config', section: 'master')
330
327
  puppetconf_filename = File.basename(puppetconf_main)
331
328
  puppetconf_test = File.join(testdir, puppetconf_filename)
332
329
 
333
- new_conf = puppet_conf_for( host, configuration_options )
330
+ new_conf = puppet_conf_for(host, configuration_options)
334
331
  create_remote_file host, puppetconf_test, new_conf.to_s
335
332
 
336
333
  host.exec(
337
- Command.new( "cat #{puppetconf_test} > #{puppetconf_main}" ),
338
- :silent => true
334
+ Command.new("cat #{puppetconf_test} > #{puppetconf_main}"),
335
+ silent: true,
339
336
  )
340
- host.exec( Command.new( "cat #{puppetconf_main}" ) )
337
+ host.exec(Command.new("cat #{puppetconf_main}"))
341
338
  end
342
339
 
343
340
  # @!visibility private
344
- def puppet_conf_for host, conf_opts
345
- puppetconf = host.exec( Command.new( "cat #{puppet_config(host, 'config', section: 'master')}" ) ).stdout
346
- new_conf = IniFile.new(default: 'main', content: puppetconf).merge( conf_opts )
347
-
348
- new_conf
341
+ def puppet_conf_for(host, conf_opts)
342
+ puppetconf = host.exec(Command.new("cat #{puppet_config(host, 'config', section: 'master')}")).stdout
343
+ IniFile.new(default: 'main', content: puppetconf).merge(conf_opts)
349
344
  end
350
345
 
351
346
  # Restarts the named puppet service
@@ -357,7 +352,7 @@ module Beaker
357
352
  #
358
353
  # @return [Result] Result of last status check
359
354
  # @!visibility private
360
- def bounce_service host, service, curl_retries = nil, port = nil
355
+ def bounce_service(host, service, curl_retries = nil, port = nil)
361
356
  curl_retries = 120 if curl_retries.nil?
362
357
  port = options[:puppetserver_port] if port.nil?
363
358
  if host.graceful_restarts?
@@ -366,13 +361,12 @@ module Beaker
366
361
  host.exec(Command.new("#{apachectl_path} graceful"))
367
362
  else
368
363
  result = host.exec(Command.new("service #{service} reload"),
369
- :acceptable_exit_codes => [0,1,3])
370
- if result.exit_code == 0
371
- return result
372
- else
373
- host.exec puppet_resource('service', service, 'ensure=stopped')
374
- host.exec puppet_resource('service', service, 'ensure=running')
375
- end
364
+ acceptable_exit_codes: [0, 1, 3])
365
+ return result if result.exit_code == 0
366
+
367
+ host.exec puppet_resource('service', service, 'ensure=stopped')
368
+ host.exec puppet_resource('service', service, 'ensure=running')
369
+
376
370
  end
377
371
  curl_with_retries(" #{service} ", host, "https://localhost:#{port}", [35, 60], curl_retries)
378
372
  end
@@ -454,7 +448,7 @@ module Beaker
454
448
  # object, or nil. Check {Beaker::Shared::HostManager#run_block_on} for
455
449
  # more details on this.
456
450
  def apply_manifest_on(host, manifest, opts = {}, &block)
457
- block_on host, opts do | host |
451
+ block_on host, opts do |host|
458
452
  on_options = {}
459
453
  on_options[:acceptable_exit_codes] = Array(opts[:acceptable_exit_codes])
460
454
 
@@ -475,7 +469,8 @@ module Beaker
475
469
  # "... an exit code of '2' means there were changes, an exit code of
476
470
  # '4' means there were failures during the transaction, and an exit
477
471
  # code of '6' means there were both changes and failures."
478
- if [opts[:catch_changes],opts[:catch_failures],opts[:expect_failures],opts[:expect_changes]].compact.length > 1
472
+ if [opts[:catch_changes], opts[:catch_failures], opts[:expect_failures],
473
+ opts[:expect_changes],].compact.length > 1
479
474
  raise(ArgumentError,
480
475
  'Cannot specify more than one of `catch_failures`, ' +
481
476
  '`catch_changes`, `expect_failures`, or `expect_changes` ' +
@@ -515,15 +510,13 @@ module Beaker
515
510
  # that they want to set for the puppet command. If so, we set the final
516
511
  # value of *args to a new hash with just one entry (the value of which
517
512
  # is our environment variables hash)
518
- if opts.has_key?(:environment)
519
- puppet_apply_opts['ENV'] = opts[:environment]
520
- end
513
+ puppet_apply_opts['ENV'] = opts[:environment] if opts.has_key?(:environment)
521
514
 
522
- file_path = host.tmpfile(%(apply_manifest_#{Time.now.strftime("%H%M%S%L")}.pp))
515
+ file_path = host.tmpfile(%(apply_manifest_#{Time.now.strftime('%H%M%S%L')}.pp))
523
516
  create_remote_file(host, file_path, manifest + "\n")
524
517
 
525
518
  if host[:default_apply_opts].respond_to? :merge
526
- puppet_apply_opts = host[:default_apply_opts].merge( puppet_apply_opts )
519
+ puppet_apply_opts = host[:default_apply_opts].merge(puppet_apply_opts)
527
520
  end
528
521
 
529
522
  on host, puppet('apply', file_path, puppet_apply_opts), on_options, &block
@@ -537,9 +530,9 @@ module Beaker
537
530
  end
538
531
 
539
532
  # @deprecated
540
- def run_agent_on(host, arg='--no-daemonize --verbose --onetime --test',
541
- options={}, &block)
542
- block_on host do | host |
533
+ def run_agent_on(host, arg = '--no-daemonize --verbose --onetime --test',
534
+ options = {}, &block)
535
+ block_on host do |host|
543
536
  on host, puppet_agent(arg), options, &block
544
537
  end
545
538
  end
@@ -557,11 +550,11 @@ module Beaker
557
550
  # @param alias_spec [Hash{String=>Array[String]] an hash containing the host to alias(es) mappings to apply
558
551
  # @example Stub puppetlabs.com on the master to 127.0.0.1 with an alias example.com
559
552
  # stub_hosts_on(master, {'puppetlabs.com' => '127.0.0.1'}, {'puppetlabs.com' => ['example.com']})
560
- def stub_hosts_on(machine, ip_spec, alias_spec={})
561
- block_on machine do | host |
553
+ def stub_hosts_on(machine, ip_spec, alias_spec = {})
554
+ block_on machine do |host|
562
555
  ip_spec.each do |address, ip|
563
556
  aliases = alias_spec[address] || []
564
- manifest =<<-EOS.gsub /^\s+/, ""
557
+ manifest = <<-EOS.gsub /^\s+/, ''
565
558
  host { '#{address}':
566
559
  \tensure => present,
567
560
  \tip => '#{ip}',
@@ -569,13 +562,13 @@ module Beaker
569
562
  }
570
563
  EOS
571
564
  logger.notify("Stubbing address #{address} to IP #{ip} on machine #{host}")
572
- apply_manifest_on( host, manifest )
565
+ apply_manifest_on(host, manifest)
573
566
  end
574
567
 
575
568
  teardown do
576
569
  ip_spec.each do |address, ip|
577
570
  logger.notify("Unstubbing address #{address} to IP #{ip} on machine #{host}")
578
- on( host, puppet('resource', 'host', address, 'ensure=absent') )
571
+ on(host, puppet('resource', 'host', address, 'ensure=absent'))
579
572
  end
580
573
  end
581
574
  end
@@ -593,35 +586,32 @@ module Beaker
593
586
  # with_host_stubbed_on(master, {'forgeapi.puppetlabs.com' => '127.0.0.1'}, {'forgeapi.puppetlabs.com' => ['forgeapi.example.com']}) do
594
587
  # puppet( "module install puppetlabs-stdlib" )
595
588
  # end
596
- def with_host_stubbed_on(host, ip_spec, alias_spec={}, &block)
597
- begin
598
- block_on host do |host|
599
- # this code is duplicated from the `stub_hosts_on` method. The
600
- # `stub_hosts_on` method itself is not used here because this
601
- # method is used by modules tests using `beaker-rspec`. Since
602
- # the `stub_hosts_on` method contains a `teardown` step, it is
603
- # incompatible with `beaker_rspec`.
604
- ip_spec.each do |address, ip|
605
- aliases = alias_spec[address] || []
606
- manifest =<<-EOS.gsub /^\s+/, ""
589
+ def with_host_stubbed_on(host, ip_spec, alias_spec = {}, &block)
590
+ block_on host do |host|
591
+ # this code is duplicated from the `stub_hosts_on` method. The
592
+ # `stub_hosts_on` method itself is not used here because this
593
+ # method is used by modules tests using `beaker-rspec`. Since
594
+ # the `stub_hosts_on` method contains a `teardown` step, it is
595
+ # incompatible with `beaker_rspec`.
596
+ ip_spec.each do |address, ip|
597
+ aliases = alias_spec[address] || []
598
+ manifest = <<-EOS.gsub /^\s+/, ''
607
599
  host { '#{address}':
608
600
  \tensure => present,
609
601
  \tip => '#{ip}',
610
602
  \thost_aliases => #{aliases},
611
603
  }
612
- EOS
613
- logger.notify("Stubbing address #{address} to IP #{ip} on machine #{host}")
614
- apply_manifest_on( host, manifest )
615
- end
604
+ EOS
605
+ logger.notify("Stubbing address #{address} to IP #{ip} on machine #{host}")
606
+ apply_manifest_on(host, manifest)
616
607
  end
608
+ end
617
609
 
618
- block.call
619
-
620
- ensure
621
- ip_spec.each do |address, ip|
622
- logger.notify("Unstubbing address #{address} to IP #{ip} on machine #{host}")
623
- on( host, puppet('resource', 'host', address, 'ensure=absent') )
624
- end
610
+ block.call
611
+ ensure
612
+ ip_spec.each do |address, ip|
613
+ logger.notify("Unstubbing address #{address} to IP #{ip} on machine #{host}")
614
+ on(host, puppet('resource', 'host', address, 'ensure=absent'))
625
615
  end
626
616
  end
627
617
 
@@ -648,14 +638,16 @@ module Beaker
648
638
  # @param forge_host [String] The URL to use as the forge alias, will default to using :forge_host in the
649
639
  # global options hash
650
640
  def stub_forge_on(machine, forge_host = nil)
651
- #use global options hash
641
+ # use global options hash
652
642
  primary_forge_name = 'forge.puppetlabs.com'
653
643
  forge_host ||= options[:forge_host]
654
644
  forge_ip = resolve_hostname_on(machine, forge_host)
655
645
  raise "Failed to resolve forge host '#{forge_host}'" unless forge_ip
646
+
656
647
  @forge_ip ||= forge_ip
657
- block_on machine do | host |
658
- stub_hosts_on(host, {primary_forge_name => @forge_ip}, {primary_forge_name => ['forge.puppet.com','forgeapi.puppetlabs.com','forgeapi.puppet.com']})
648
+ block_on machine do |host|
649
+ stub_hosts_on(host, { primary_forge_name => @forge_ip },
650
+ { primary_forge_name => ['forge.puppet.com', 'forgeapi.puppetlabs.com', 'forgeapi.puppet.com'] })
659
651
  end
660
652
  end
661
653
 
@@ -671,14 +663,16 @@ module Beaker
671
663
  # @param host [String] the host to perform the stub on
672
664
  # @param forge_host [String] The URL to use as the forge alias, will default to using :forge_host in the
673
665
  # global options hash
674
- def with_forge_stubbed_on( host, forge_host = nil, &block )
675
- #use global options hash
666
+ def with_forge_stubbed_on(host, forge_host = nil, &block)
667
+ # use global options hash
676
668
  primary_forge_name = 'forge.puppetlabs.com'
677
669
  forge_host ||= options[:forge_host]
678
670
  forge_ip = resolve_hostname_on(host, forge_host)
679
671
  raise "Failed to resolve forge host '#{forge_host}'" unless forge_ip
672
+
680
673
  @forge_ip ||= forge_ip
681
- with_host_stubbed_on( host, {primary_forge_name => @forge_ip}, {primary_forge_name => ['forge.puppet.com','forgeapi.puppetlabs.com','forgeapi.puppet.com']}, &block )
674
+ with_host_stubbed_on(host, { primary_forge_name => @forge_ip },
675
+ { primary_forge_name => ['forge.puppet.com', 'forgeapi.puppetlabs.com', 'forgeapi.puppet.com'] }, &block)
682
676
  end
683
677
 
684
678
  # This wraps `with_forge_stubbed_on` and provides it the default host
@@ -686,8 +680,8 @@ module Beaker
686
680
  #
687
681
  # @deprecated this method should not be used because stubbing the host
688
682
  # breaks TLS validation.
689
- def with_forge_stubbed( forge_host = nil, &block )
690
- with_forge_stubbed_on( default, forge_host, &block )
683
+ def with_forge_stubbed(forge_host = nil, &block)
684
+ with_forge_stubbed_on(default, forge_host, &block)
691
685
  end
692
686
 
693
687
  # This wraps the method `stub_hosts` and makes the stub specific to
@@ -698,7 +692,7 @@ module Beaker
698
692
  #
699
693
  # @see #stub_forge_on
700
694
  def stub_forge(forge_host = nil)
701
- #use global options hash
695
+ # use global options hash
702
696
  forge_host ||= options[:forge_host]
703
697
  stub_forge_on(default, forge_host)
704
698
  end
@@ -714,7 +708,7 @@ module Beaker
714
708
  nonssl_port = options[:puppetdb_port_nonssl] if nonssl_port.nil?
715
709
  ssl_port = options[:puppetdb_port_ssl] if ssl_port.nil?
716
710
  pe_ver = host['pe_ver'] || '0'
717
- if version_is_less(pe_ver, '2016.1.0') then
711
+ if version_is_less(pe_ver, '2016.1.0')
718
712
  # the status endpoint was introduced in puppetdb 4.0. The earliest
719
713
  # PE release with the 4.x pdb version was 2016.1.0
720
714
  endpoint = 'pdb/meta/v1/version'
@@ -725,8 +719,8 @@ module Beaker
725
719
  end
726
720
  retry_on(host,
727
721
  "curl -m 1 http://localhost:#{nonssl_port}/#{endpoint} | grep '#{expected_regex}'",
728
- {:max_retries => 120})
729
- curl_with_retries("start puppetdb (ssl)",
722
+ { max_retries: 120 })
723
+ curl_with_retries('start puppetdb (ssl)',
730
724
  host, "https://#{host.node_name}:#{ssl_port}", [35, 60])
731
725
  end
732
726
 
@@ -738,7 +732,7 @@ module Beaker
738
732
  # @return [Result] Result of the last HTTPS status check
739
733
  def sleep_until_puppetserver_started(host, port = nil)
740
734
  port = options[:puppetserver_port] if port.nil?
741
- curl_with_retries("start puppetserver (ssl)",
735
+ curl_with_retries('start puppetserver (ssl)',
742
736
  host, "https://#{host.node_name}:#{port}", [35, 60])
743
737
  end
744
738
 
@@ -750,22 +744,22 @@ module Beaker
750
744
  # @return [Result] Result of the last HTTPS status check
751
745
  def sleep_until_nc_started(host, port = nil)
752
746
  port = options[:nodeclassifier_port] if port.nil?
753
- curl_with_retries("start nodeclassifier (ssl)",
747
+ curl_with_retries('start nodeclassifier (ssl)',
754
748
  host, "https://#{host.node_name}:#{port}", [35, 60])
755
749
  end
756
750
 
757
- #stops the puppet agent running on the host
751
+ # stops the puppet agent running on the host
758
752
  # @param [Host, Array<Host>, String, Symbol] agent One or more hosts to act upon,
759
753
  # or a role (String or Symbol) that identifies one or more hosts.
760
754
  # @param [Hash{Symbol=>String}] opts Options to alter execution.
761
755
  # @option opts [Boolean] :run_in_parallel Whether to run on each host in parallel.
762
756
  def stop_agent_on(agent, opts = {})
763
- block_on agent, opts do | host |
757
+ block_on agent, opts do |host|
764
758
  vardir = host.puppet_configprint['vardir']
765
759
 
766
760
  # In 4.0 this was changed to just be `puppet`
767
761
  agent_service = 'puppet'
768
- if !aio_version?(host)
762
+ unless aio_version?(host)
769
763
  # The agent service is `pe-puppet` everywhere EXCEPT certain linux distros on PE 2.8
770
764
  # In all the case that it is different, this init script will exist. So we can assume
771
765
  # that if the script doesn't exist, we should just use `pe-puppet`
@@ -778,37 +772,34 @@ module Beaker
778
772
  # the init script or system on that particular configuration.
779
773
  avoid_puppet_at_all_costs = false
780
774
  avoid_puppet_at_all_costs ||= host['platform'] =~ /el-4/
781
- avoid_puppet_at_all_costs ||= host['pe_ver'] && version_is_less(host['pe_ver'], '3.2') && host['platform'] =~ /sles/
775
+ avoid_puppet_at_all_costs ||= host['pe_ver'] && version_is_less(host['pe_ver'],
776
+ '3.2') && host['platform'] =~ /sles/
782
777
 
783
778
  if avoid_puppet_at_all_costs
784
779
  # When upgrading, puppet is already stopped. On EL4, this causes an exit code of '1'
785
- on host, "/etc/init.d/#{agent_service} stop", :acceptable_exit_codes => [0, 1]
780
+ on host, "/etc/init.d/#{agent_service} stop", acceptable_exit_codes: [0, 1]
786
781
  else
787
782
  on host, puppet_resource('service', agent_service, 'ensure=stopped')
788
783
  end
789
784
 
790
- #Ensure that a puppet run that was started before the last lock check is completed
785
+ # Ensure that a puppet run that was started before the last lock check is completed
791
786
  agent_running = true
792
787
  while agent_running
793
788
  agent_running = host.file_exist?("#{vardir}/state/agent_catalog_run.lock")
794
- if agent_running
795
- sleep 2
796
- end
789
+ sleep 2 if agent_running
797
790
  end
798
-
799
791
  end
800
792
  end
801
793
 
802
- #stops the puppet agent running on the default host
794
+ # stops the puppet agent running on the default host
803
795
  # @see #stop_agent_on
804
796
  def stop_agent
805
797
  stop_agent_on(default)
806
798
  end
807
799
 
808
- #wait for a given host to appear in the dashboard
800
+ # wait for a given host to appear in the dashboard
809
801
  # @deprecated this method should be removed in the next release since we don't believe the check is necessary.
810
802
  def wait_for_host_in_dashboard(host)
811
-
812
803
  hostname = host.node_name
813
804
  hostcert = dashboard.puppet['hostcert']
814
805
  key = dashboard.puppet['hostprivkey']
@@ -829,26 +820,26 @@ module Beaker
829
820
  hostnames = []
830
821
  hosts = host.is_a?(Array) ? host : [host]
831
822
  puppet_version = on(master, puppet('--version')).stdout.chomp
832
- hosts.each{ |current_host|
823
+ hosts.each do |current_host|
833
824
  if [master, dashboard, database].include? current_host
834
- on current_host, puppet( 'agent -t' ), :acceptable_exit_codes => [0,1,2]
825
+ on current_host, puppet('agent -t'), acceptable_exit_codes: [0, 1, 2]
835
826
 
836
827
  if version_is_less(puppet_version, '5.99')
837
- on master, puppet("cert --allow-dns-alt-names sign #{current_host}" ), :acceptable_exit_codes => [0,24]
828
+ on master, puppet("cert --allow-dns-alt-names sign #{current_host}"), acceptable_exit_codes: [0, 24]
838
829
  else
839
830
  on master, "puppetserver ca sign --certname #{current_host}"
840
831
  end
841
832
  else
842
- hostnames << Regexp.escape( current_host.node_name )
833
+ hostnames << Regexp.escape(current_host.node_name)
843
834
  end
844
- }
835
+ end
845
836
 
846
837
  if hostnames.size < 1
847
838
  if version_is_less(puppet_version, '5.99')
848
- on master, puppet("cert --sign --all --allow-dns-alt-names"),
849
- :acceptable_exit_codes => [0,24]
839
+ on master, puppet('cert --sign --all --allow-dns-alt-names'),
840
+ acceptable_exit_codes: [0, 24]
850
841
  else
851
- on master, 'puppetserver ca sign --all', :acceptable_exit_codes => [0, 24]
842
+ on master, 'puppetserver ca sign --all', acceptable_exit_codes: [0, 24]
852
843
  end
853
844
  return
854
845
  end
@@ -856,21 +847,21 @@ module Beaker
856
847
  while hostnames.size > 0
857
848
  last_sleep = 0
858
849
  next_sleep = 1
859
- (0..10).each do |i|
850
+ 11.times do |i|
860
851
  if i == 10
861
852
  fail_test("Failed to sign cert for #{hostnames}")
862
853
  hostnames.clear
863
854
  end
864
855
 
865
856
  if version_is_less(puppet_version, '5.99')
866
- on master, puppet("cert --sign --all --allow-dns-alt-names"), :acceptable_exit_codes => [0,24]
867
- out = on(master, puppet("cert --list --all")).stdout
857
+ on master, puppet('cert --sign --all --allow-dns-alt-names'), acceptable_exit_codes: [0, 24]
858
+ out = on(master, puppet('cert --list --all')).stdout
868
859
  if hostnames.all? { |hostname| out =~ /\+ "?#{hostname}"?/ }
869
860
  hostnames.clear
870
861
  break
871
862
  end
872
863
  else
873
- on master, 'puppetserver ca sign --all', :acceptable_exit_codes => [0, 24]
864
+ on master, 'puppetserver ca sign --all', acceptable_exit_codes: [0, 24]
874
865
  out = on(master, 'puppetserver ca list --all').stdout
875
866
  if out !~ /.*Requested.*/ && hostnames.all? { |hostname| out =~ /\b#{hostname}\b/ }
876
867
  hostnames.clear
@@ -879,14 +870,14 @@ module Beaker
879
870
  end
880
871
 
881
872
  sleep next_sleep
882
- (last_sleep, next_sleep) = next_sleep, last_sleep+next_sleep
873
+ (last_sleep, next_sleep) = next_sleep, last_sleep + next_sleep
883
874
  end
884
875
  end
885
876
  host
886
877
  end
887
878
 
888
- #prompt the master to sign certs then check to confirm the cert for the default host is signed
889
- #@see #sign_certificate_for
879
+ # prompt the master to sign certs then check to confirm the cert for the default host is signed
880
+ # @see #sign_certificate_for
890
881
  def sign_certificate
891
882
  sign_certificate_for(default)
892
883
  end
@@ -907,14 +898,14 @@ module Beaker
907
898
  # @note While tempting, this method should not be "optimized" to coalesce calls to
908
899
  # chown user:group when both options are passed, as doing so will muddy the spec.
909
900
  def create_tmpdir_on(hosts, path_prefix = '', user = nil, group = nil)
910
- block_on hosts do | host |
901
+ block_on hosts do |host|
911
902
  # create the directory
912
903
  dir = host.tmpdir(path_prefix)
913
904
  # only chown if explicitly passed; don't make assumptions about perms
914
905
  # only `chown user` for cleaner codepaths
915
906
  if user
916
907
  # ensure user exists
917
- if not host.user_get(user).success?
908
+ unless host.user_get(user).success?
918
909
  # clean up
919
910
  host.rm_rf("#{dir}")
920
911
  raise "User #{user} does not exist on #{host}."
@@ -926,7 +917,7 @@ module Beaker
926
917
  # only chgrp if explicitly passed; don't make assumptions about perms
927
918
  if group
928
919
  # ensure group exists
929
- if not host.group_get(group).success?
920
+ unless host.group_get(group).success?
930
921
  # clean up
931
922
  # on host, "rmdir #{dir}"
932
923
  host.rm_rf(dir)
@@ -953,7 +944,7 @@ module Beaker
953
944
  # if this puppet command returns a non-zero exit code.
954
945
  #
955
946
  # @return [String] Returns the name of the newly-created dir.
956
- def create_tmpdir_for_user(host, name='/tmp/beaker', user=nil)
947
+ def create_tmpdir_for_user(host, name = '/tmp/beaker', user = nil)
957
948
  user ||= puppet_config(host, 'user', section: 'master')
958
949
  create_tmpdir_on(host, name, user)
959
950
  end