beaker-puppet 2.1.0 → 3.0.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.
@@ -98,8 +98,8 @@ module Beaker
98
98
  git_protocol = 'https://'
99
99
  end
100
100
 
101
- repo = git_server == 'github.com' ? "#{git_fork}/#{project_name}.git" : "#{git_fork}-#{project_name}.git"
102
- git_protocol == 'git@' ? "#{git_protocol}#{git_server}:#{repo}" : "#{git_protocol}#{git_server}/#{repo}"
101
+ repo = (git_server == 'github.com') ? "#{git_fork}/#{project_name}.git" : "#{git_fork}-#{project_name}.git"
102
+ (git_protocol == 'git@') ? "#{git_protocol}#{git_server}:#{repo}" : "#{git_protocol}#{git_server}/#{repo}"
103
103
  end
104
104
  alias build_giturl build_git_url
105
105
 
@@ -406,7 +406,7 @@ module Beaker
406
406
  end
407
407
 
408
408
  case host['platform']
409
- when /el-|redhat|fedora|sles|centos|cisco_/
409
+ when /amazon|el-|redhat|fedora|sles|centos|cisco_/
410
410
  package_name = 'puppet-agent'
411
411
  package_name << "-#{opts[:puppet_agent_version]}" if opts[:puppet_agent_version]
412
412
  when /debian|ubuntu|huaweios/
@@ -993,7 +993,7 @@ module Beaker
993
993
  opts = sanitize_opts(opts)
994
994
 
995
995
  case variant
996
- when /^(fedora|el|redhat|centos|sles|cisco_nexus|cisco_ios_xr)$/
996
+ when /^(amazon|fedora|el|redhat|centos|sles|cisco_nexus|cisco_ios_xr)$/
997
997
  variant_url_value = (%w[redhat centos].include?(::Regexp.last_match(1)) ? 'el' : ::Regexp.last_match(1))
998
998
  if variant == 'cisco_nexus'
999
999
  variant_url_value = 'cisco-wrlinux'
@@ -1148,7 +1148,7 @@ module Beaker
1148
1148
  repo_configs_dir = nil,
1149
1149
  opts = options)
1150
1150
  variant, version, arch, codename = host['platform'].to_array
1151
- if variant !~ /^(amazon|fedora|el|redhat|centos|debian|ubuntu|huaweios|cisco_nexus|cisco_ios_xr|sles)$/
1151
+ if variant !~ /^(fedora|el|redhat|centos|debian|ubuntu|huaweios|cisco_nexus|cisco_ios_xr|sles)$/
1152
1152
  raise "No repository installation step for #{variant} yet..."
1153
1153
  end
1154
1154
 
@@ -1162,7 +1162,7 @@ module Beaker
1162
1162
  # url type
1163
1163
  _, protocol, hostname = opts[:dev_builds_url].partition %r{.*://}
1164
1164
  dev_builds_url = protocol + hostname
1165
- dev_builds_url = opts[:dev_builds_url] if variant =~ /^(amazon|fedora|el|redhat|centos)$/
1165
+ dev_builds_url = opts[:dev_builds_url] if variant =~ /^(fedora|el|redhat|centos)$/
1166
1166
 
1167
1167
  install_repo_configs(host, dev_builds_url, package_name,
1168
1168
  build_version, platform_configs_dir)
@@ -1195,193 +1195,6 @@ module Beaker
1195
1195
  configure_type_defaults_on(host)
1196
1196
  end
1197
1197
 
1198
- # Install development repo of the puppet-agent on the given host(s). Downloaded from
1199
- # location of the form DEV_BUILDS_URL/puppet-agent/AGENT_VERSION/repos
1200
- #
1201
- # @param [Host, Array<Host>, String, Symbol] hosts One or more hosts to act upon,
1202
- # or a role (String or Symbol) that identifies one or more hosts.
1203
- # @param [Hash{Symbol=>String}] opts An options hash
1204
- # @option opts [String] :puppet_agent_version The version of puppet-agent to install. This
1205
- # parameter is used by puppet with the +SUITE_VERSION+ environment
1206
- # variable to provide a `git describe` value to beaker to create a
1207
- # build server URL. Note that +puppet_agent_sha+ will still be used
1208
- # instead of this if a value is provided for that option
1209
- # @option opts [String] :puppet_agent_sha The sha of puppet-agent to install, defaults to provided
1210
- # puppet_agent_version
1211
- # @option opts [String] :copy_base_local Directory where puppet-agent artifact
1212
- # will be stored locally
1213
- # (default: 'tmp/repo_configs')
1214
- # @option opts [String] :copy_dir_external Directory where puppet-agent
1215
- # artifact will be pushed to on the external machine
1216
- # (default: '/root')
1217
- # @option opts [String] :puppet_collection Defaults to 'PC1'
1218
- # @option opts [String] :dev_builds_url Base URL to pull artifacts from
1219
- # @option opts [String] :copy_base_local Directory where puppet-agent artifact
1220
- # will be stored locally
1221
- # (default: 'tmp/repo_configs')
1222
- # @option opts [String] :copy_dir_external Directory where puppet-agent
1223
- # artifact will be pushed to on the external machine
1224
- # (default: '/root')
1225
- #
1226
- # @note on windows, the +:ruby_arch+ host parameter can determine in addition
1227
- # to other settings whether the 32 or 64bit install is used
1228
- #
1229
- # @example
1230
- # install_puppet_agent_dev_repo_on(host, { :puppet_agent_sha => 'd3377feaeac173aada3a2c2cedd141eb610960a7', :puppet_agent_version => '1.1.1.225.gd3377fe' })
1231
- #
1232
- # @return nil
1233
- def install_puppet_agent_dev_repo_on(hosts, global_opts)
1234
- global_opts[:puppet_agent_version] ||= global_opts[:version] # backward compatability
1235
- unless global_opts[:puppet_agent_version]
1236
- raise 'must provide :puppet_agent_version (puppet-agent version) for install_puppet_agent_dev_repo_on'
1237
- end
1238
-
1239
- block_on hosts do |host|
1240
- opts = global_opts.dup
1241
-
1242
- # TODO: consolidate these values as they serve no purpose from beaker's side
1243
- # you could provide any values you could to one to the other
1244
- puppet_agent_version = opts[:puppet_agent_sha] || opts[:puppet_agent_version]
1245
-
1246
- opts = sanitize_opts(opts)
1247
- opts[:download_url] = "#{opts[:dev_builds_url]}/puppet-agent/#{puppet_agent_version}/repos/"
1248
- opts[:copy_base_local] ||= File.join('tmp', 'repo_configs')
1249
- opts[:puppet_collection] ||= 'PC1'
1250
-
1251
- release_path = opts[:download_url]
1252
-
1253
- variant, version, arch, codename = host['platform'].to_array
1254
- add_role(host, 'aio') # we are installing agent, so we want aio role
1255
- copy_dir_local = File.join(opts[:copy_base_local], variant)
1256
- onhost_copy_base = opts[:copy_dir_external] || host.external_copy_base
1257
-
1258
- case variant
1259
- when /^(fedora|el|redhat|centos|debian|ubuntu|huaweios|cisco_nexus|cisco_ios_xr)$/
1260
- if arch == 's390x' || host['hypervisor'] == 'ec2'
1261
- logger.trace("#install_puppet_agent_dev_repo_on: unsupported host #{host} for repo detected. using dev package")
1262
- else
1263
- install_puppetlabs_dev_repo(host, 'puppet-agent', puppet_agent_version, nil, opts)
1264
- host.install_package('puppet-agent')
1265
- logger.trace('#install_puppet_agent_dev_repo_on: install_puppetlabs_dev_repo finished')
1266
- next
1267
- end
1268
- when /^(eos|osx|windows|solaris|sles|aix)$/
1269
- # Download installer package file & run install manually.
1270
- # Done below, so that el hosts with s390x arch or on ec2 can use this
1271
- # workflow as well
1272
- else
1273
- raise "No repository installation step for #{variant} yet..."
1274
- end
1275
-
1276
- release_path_end, release_file = host.puppet_agent_dev_package_info(
1277
- opts[:puppet_collection], opts[:puppet_agent_version], opts
1278
- )
1279
- release_path << release_path_end
1280
- logger.trace('#install_puppet_agent_dev_repo_on: dev_package_info, continuing...')
1281
-
1282
- if variant =~ /eos/
1283
- host.get_remote_file("#{release_path}/#{release_file}")
1284
- else
1285
- onhost_copied_file = File.join(onhost_copy_base, release_file)
1286
- fetch_http_file(release_path, release_file, copy_dir_local)
1287
- scp_to host, File.join(copy_dir_local, release_file), onhost_copy_base
1288
- end
1289
-
1290
- case variant
1291
- when /^eos/
1292
- host.install_from_file(release_file)
1293
- when /^(sles|aix|fedora|el|redhat|centos)$/
1294
- # NOTE: AIX does not support repo management. This block assumes
1295
- # that the desired rpm has been mirrored to the 'repos' location.
1296
- # NOTE: the AIX 7.1 package will only install on 7.2 with
1297
- # --ignoreos. This is a bug in package building on AIX 7.1's RPM
1298
- aix_72_ignoreos_hack = '--ignoreos' if variant == 'aix' && version == '7.2'
1299
- on host, "rpm -ivh #{aix_72_ignoreos_hack} #{onhost_copied_file}"
1300
- when /^windows$/
1301
- result = on host, "echo #{onhost_copied_file}"
1302
- onhost_copied_file = result.raw_output.chomp
1303
- msi_opts = { debug: host[:pe_debug] || opts[:pe_debug] }
1304
- install_msi_on(host, onhost_copied_file, {}, msi_opts)
1305
- when /^osx$/
1306
- host.install_package("puppet-agent-#{opts[:puppet_agent_version]}*")
1307
- when /^solaris$/
1308
- host.solaris_install_local_package(release_file, onhost_copy_base)
1309
- end
1310
- configure_type_defaults_on(host)
1311
- end
1312
- end
1313
- alias install_puppetagent_dev_repo install_puppet_agent_dev_repo_on
1314
-
1315
- # Install shared repo of the puppet-agent on the given host(s). Downloaded from
1316
- # location of the form PE_PROMOTED_BUILDS_URL/PE_VER/puppet-agent/AGENT_VERSION/repo
1317
- #
1318
- # @param [Host, Array<Host>, String, Symbol] hosts One or more hosts to act upon,
1319
- # or a role (String or Symbol) that identifies one or more hosts.
1320
- # @param [Hash{Symbol=>String}] opts An options hash
1321
- # @option opts [String] :puppet_agent_version The version of puppet-agent to install, defaults to 'latest'
1322
- # @option opts [String] :pe_ver The version of PE (will also use host['pe_ver']), defaults to '4.0'
1323
- # @option opts [String] :copy_base_local Directory where puppet-agent artifact
1324
- # will be stored locally
1325
- # (default: 'tmp/repo_configs')
1326
- # @option opts [String] :copy_dir_external Directory where puppet-agent
1327
- # artifact will be pushed to on the external machine
1328
- # (default: '/root')
1329
- # @option opts [String] :puppet_collection Defaults to 'PC1'
1330
- # @option opts [String] :pe_promoted_builds_url Base URL to pull artifacts from
1331
- #
1332
- # @note on windows, the +:ruby_arch+ host parameter can determine in addition
1333
- # to other settings whether the 32 or 64bit install is used
1334
- #
1335
- # @example
1336
- # install_puppet_agent_pe_promoted_repo_on(host, { :puppet_agent_version => '1.1.0.227', :pe_ver => '4.0.0-rc1'})
1337
- #
1338
- # @return nil
1339
- def install_puppet_agent_pe_promoted_repo_on(hosts, opts)
1340
- opts[:puppet_agent_version] ||= 'latest'
1341
-
1342
- block_on hosts do |host|
1343
- pe_ver = host[:pe_ver] || opts[:pe_ver] || '4.0.0-rc1'
1344
- opts = sanitize_opts(opts)
1345
- opts[:download_url] =
1346
- "#{opts[:pe_promoted_builds_url]}/puppet-agent/#{pe_ver}/#{opts[:puppet_agent_version]}/repos"
1347
- opts[:copy_base_local] ||= File.join('tmp', 'repo_configs')
1348
- opts[:copy_dir_external] ||= host.external_copy_base
1349
- opts[:puppet_collection] ||= puppet_collection_for(:puppet_agent, opts[:puppet_agent_version])
1350
- add_role(host, 'aio') # we are installing agent, so we want aio role
1351
- release_path = opts[:download_url]
1352
- variant, version, arch, codename = host['platform'].to_array
1353
- copy_dir_local = File.join(opts[:copy_base_local], variant)
1354
- onhost_copy_base = opts[:copy_dir_external]
1355
-
1356
- release_path_end, release_file, download_file =
1357
- host.pe_puppet_agent_promoted_package_info(
1358
- opts[:puppet_collection], opts
1359
- )
1360
- release_path << release_path_end
1361
-
1362
- onhost_copied_download = File.join(onhost_copy_base, download_file)
1363
- onhost_copied_file = File.join(onhost_copy_base, release_file)
1364
- fetch_http_file(release_path, download_file, copy_dir_local)
1365
- scp_to host, File.join(copy_dir_local, download_file), onhost_copy_base
1366
-
1367
- if variant == 'windows'
1368
- result = on host, "echo #{onhost_copied_file}"
1369
- onhost_copied_file = result.raw_output.chomp
1370
- opts = { debug: host[:pe_debug] || opts[:pe_debug] }
1371
- # couldn't pull this out, because it's relying on
1372
- # {Beaker::DSL::InstallUtils::WindowsUtils} methods,
1373
- # which I didn't want to attack right now. TODO
1374
- install_msi_on(host, onhost_copied_file, {}, opts)
1375
- else
1376
- host.pe_puppet_agent_promoted_package_install(
1377
- onhost_copy_base, onhost_copied_download,
1378
- onhost_copied_file, download_file, opts
1379
- )
1380
- end
1381
- configure_type_defaults_on(host)
1382
- end
1383
- end
1384
-
1385
1198
  # This method will install a pem file certificate on a windows host
1386
1199
  #
1387
1200
  # @param [Host] host A host object
@@ -1518,7 +1331,10 @@ module Beaker
1518
1331
  end
1519
1332
 
1520
1333
  # delete any residual files
1521
- on(host, 'find / -name "*puppet*" -print | xargs rm -rf')
1334
+ result = on(host, 'find / -name "*puppet*" -print | xargs rm -rf', accept_all_exit_codes: true)
1335
+ unless result.exit_code == 0
1336
+ logger.notify("Attempt to clean residual puppet files errored, but can maybe be ignored.\n #{result.stderr}")
1337
+ end
1522
1338
  end
1523
1339
  end
1524
1340
 
@@ -65,23 +65,6 @@ module Beaker
65
65
  end
66
66
  end
67
67
 
68
- # Given an agent_version, return the puppet collection associated with that agent version
69
- #
70
- # @param [String] agent_version version string or 'latest'
71
- # @deprecated This method returns 'PC1' as the latest puppet collection;
72
- # this is incorrect. Use {#puppet_collection_for} instead.
73
- def get_puppet_collection(agent_version = 'latest')
74
- collection = 'PC1'
75
- if agent_version != 'latest'
76
- if !version_is_less(agent_version, '5.5.4') and version_is_less(agent_version, '5.99')
77
- collection = 'puppet5'
78
- elsif !version_is_less(agent_version, '5.99')
79
- collection = 'puppet6'
80
- end
81
- end
82
- collection
83
- end
84
-
85
68
  # Determine the puppet collection that matches a given package version. The package
86
69
  # must be one of
87
70
  # * :puppet_agent (you can get this version from the `aio_agent_version_fact`)
@@ -1,3 +1,3 @@
1
1
  module BeakerPuppet
2
- VERSION = '2.1.0'
2
+ VERSION = '3.0.0'
3
3
  end
data/release-prep.sh ADDED
@@ -0,0 +1,11 @@
1
+ #!/usr/bin/env bash
2
+
3
+ # Update Gemfile.lock
4
+ docker run -t --rm \
5
+ -v $(pwd):/app \
6
+ ruby:3.1.4 \
7
+ /bin/bash -c 'apt-get update -qq && apt-get install -y --no-install-recommends git make netbase && cd /app && gem install bundler && bundle install --jobs 3; echo "LOCK_FILE_UPDATE_EXIT_CODE=$?"'
8
+
9
+ docker run -t --rm -e CHANGELOG_GITHUB_TOKEN -v $(pwd):/usr/local/src/your-app \
10
+ githubchangeloggenerator/github-changelog-generator:1.16.2 \
11
+ github_changelog_generator --future-release $(grep VERSION lib/beaker-puppet/version.rb |rev |cut -d "'" -f 2 |rev)
@@ -1,16 +1,30 @@
1
1
  test_name 'Install Puppet Agent Packages' do
2
- opts = {
3
- nightly_builds_url: ENV.fetch('NIGHTLY_BUILDS_URL', nil),
4
- dev_builds_url: ENV.fetch('DEV_BUILDS_URL', nil),
5
- puppet_agent_version: ENV.fetch('SHA', nil),
6
- puppet_collection: ENV.fetch('RELEASE_STREAM', nil),
7
- }
2
+ agents.each do |agent|
3
+ path = ENV.fetch('DEV_BUILD_PATH', nil)
4
+ if path
5
+ raise ArgumentError, "The path #{path} does not exist" unless File.exist?(path)
6
+
7
+ basename = File.basename(path)
8
+ scp_to(agent, path, basename)
8
9
 
9
- install_puppet_agent_on(hosts, opts)
10
+ # configure locations for ruby, puppet, config files, etc
11
+ add_aio_defaults_on(agent)
12
+ agent.install_package(basename)
13
+ else
14
+ opts = {
15
+ nightly_builds_url: ENV.fetch('NIGHTLY_BUILDS_URL', nil),
16
+ dev_builds_url: ENV.fetch('DEV_BUILDS_URL', nil),
17
+ puppet_agent_version: ENV.fetch('SHA', nil),
18
+ puppet_collection: ENV.fetch('RELEASE_STREAM', nil),
19
+ }
20
+
21
+ install_puppet_agent_on(hosts, opts)
22
+ end
23
+ end
10
24
 
11
25
  # make sure install is sane, beaker has already added puppet and ruby
12
26
  # to PATH in ~/.ssh/environment
13
- agents.each do |agent|
27
+ agents.each do |agent| # rubocop:disable Style/CombinableLoops
14
28
  on agent, puppet('--version')
15
29
  ruby = ruby_command(agent)
16
30
  on agent, "#{ruby} --version"
@@ -7,15 +7,9 @@ test_name 'Validate Sign Cert' do
7
7
  skip_test 'not testing with puppetserver' unless @options['is_puppetserver']
8
8
  hostname = on(master, 'facter hostname').stdout.strip
9
9
  fqdn = on(master, 'facter fqdn').stdout.strip
10
- puppet_version = on(master, puppet('--version')).stdout.chomp
11
10
 
12
- if master.use_service_scripts?
13
- step 'Ensure puppet is stopped'
14
- # Passenger, in particular, must be shutdown for the cert setup steps to work,
15
- # but any running puppet master will interfere with webrick starting up and
16
- # potentially ignore the puppet.conf changes.
17
- on(master, puppet('resource', 'service', master['puppetservice'], 'ensure=stopped'))
18
- end
11
+ step 'Ensure puppet is stopped'
12
+ on(master, puppet('resource', 'service', master['puppetservice'], 'ensure=stopped'))
19
13
 
20
14
  step 'Clear SSL on all hosts'
21
15
  hosts.each do |host|
@@ -38,11 +32,10 @@ test_name 'Validate Sign Cert' do
38
32
  },
39
33
  }
40
34
 
41
- # In Puppet 6, we want to be using an intermediate CA
42
- on master, 'puppetserver ca setup' if !version_is_less(puppet_version, '5.99') && !master['use_existing_container']
35
+ on(master, 'puppetserver ca setup')
43
36
  with_puppet_running_on(master, master_opts) do
44
37
  step 'Agents: Run agent --test with autosigning enabled to get cert'
45
- on agents, puppet('agent --test'), acceptable_exit_codes: [0, 2]
38
+ on(agents, puppet('agent --test'), acceptable_exit_codes: [0, 2])
46
39
  end
47
40
  end
48
41
  end
@@ -19,7 +19,7 @@ agents.each do |agent|
19
19
  on(agent, "rm -rf '#{default_dir}'")
20
20
 
21
21
  arch = agent[:ruby_arch] || 'x86'
22
- gem_arch = arch == 'x64' ? 'x64-mingw32' : 'x86-mingw32'
22
+ gem_arch = (arch == 'x64') ? 'x64-mingw32' : 'x86-mingw32'
23
23
  url = "#{base_url}/puppet-#{gem_version}-#{gem_arch}.gem"
24
24
  else
25
25
  url = "#{base_url}/puppet-#{gem_version}.gem"