beaker-puppet 2.0.0 → 3.0.1
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 +4 -4
- data/.github/workflows/release.yml +2 -2
- data/.github/workflows/test.yml +3 -3
- data/.github_changelog_generator +3 -0
- data/.rubocop_todo.yml +52 -7
- data/CHANGELOG.md +409 -335
- data/CODEOWNERS +1 -0
- data/README.md +4 -13
- data/Rakefile +1 -1
- data/acceptance/tests/stub_host.rb +1 -1
- data/beaker-puppet.gemspec +3 -3
- data/lib/beaker-puppet/helpers/puppet_helpers.rb +20 -95
- data/lib/beaker-puppet/install_utils/foss_utils.rb +10 -194
- data/lib/beaker-puppet/install_utils/puppet_utils.rb +0 -17
- data/lib/beaker-puppet/version.rb +1 -1
- data/release-prep.sh +11 -0
- data/setup/aio/010_Install_Puppet_Agent.rb +22 -8
- data/setup/common/040_ValidateSignCert.rb +4 -11
- data/setup/gem/010_GemInstall.rb +1 -1
- data/spec/beaker-puppet/helpers/puppet_helpers_spec.rb +1 -251
- data/spec/beaker-puppet/install_utils/foss_utils_spec.rb +34 -463
- data/spec/beaker-puppet/install_utils/puppet_utils_spec.rb +0 -23
- data/tasks/ci.rake +27 -19
- metadata +11 -6
data/CODEOWNERS
CHANGED
@@ -0,0 +1 @@
|
|
1
|
+
* @puppetlabs/phoenix @puppetlabs/unicorn
|
data/README.md
CHANGED
@@ -1,12 +1,11 @@
|
|
1
1
|
# beaker-puppet: The Puppet-Specific Beaker Library
|
2
2
|
|
3
|
-
[](https://github.com/puppetlabs/beaker-puppet/blob/master/LICENSE)
|
4
|
+
[](https://github.com/puppetlabs/beaker-puppet/actions/workflows/test.yml)
|
5
|
+
[](https://codecov.io/gh/puppetlabs/beaker-puppet)
|
6
|
+
[](https://github.com/puppetlabs/beaker-puppet/actions/workflows/release.yml)
|
7
7
|
[](https://rubygems.org/gems/beaker-puppet)
|
8
8
|
[](https://rubygems.org/gems/beaker-puppet)
|
9
|
-
[](#transfer-notice)
|
10
9
|
|
11
10
|
The purpose of this library is to hold all puppet-specific info & DSL methods.
|
12
11
|
This includes all helper & installer methods.
|
@@ -79,14 +78,6 @@ file, or you can provide a beaker-hostgenerator value to the `TEST_TARGET`
|
|
79
78
|
environment variable. You can also specify the tests that get executed with the
|
80
79
|
`TESTS` environment variable.
|
81
80
|
|
82
|
-
## Transfer Notice
|
83
|
-
|
84
|
-
This plugin was originally authored by [Puppet Inc](http://puppet.com).
|
85
|
-
The maintainer preferred that Puppet Community take ownership of the module for future improvement and maintenance.
|
86
|
-
Existing pull requests and issues were transferred over, please fork and continue to contribute here.
|
87
|
-
|
88
|
-
Previously: https://github.com/puppetlabs/beaker
|
89
|
-
|
90
81
|
## License
|
91
82
|
|
92
83
|
This gem is licensed under the Apache-2 license.
|
data/Rakefile
CHANGED
@@ -189,7 +189,7 @@ else
|
|
189
189
|
GitHubChangelogGenerator::RakeTask.new :changelog do |config|
|
190
190
|
config.header = "# Changelog\n\nAll notable changes to this project will be documented in this file."
|
191
191
|
config.exclude_labels = %w[duplicate question invalid wontfix wont-fix skip-changelog]
|
192
|
-
config.user = '
|
192
|
+
config.user = 'puppetlabs'
|
193
193
|
config.project = 'beaker-puppet'
|
194
194
|
config.future_release = "#{Gem::Specification.load("#{config.project}.gemspec").version}"
|
195
195
|
end
|
data/beaker-puppet.gemspec
CHANGED
@@ -11,7 +11,7 @@ Gem::Specification.new do |s|
|
|
11
11
|
s.description = 'For use for the Beaker acceptance testing tool'
|
12
12
|
s.license = 'Apache-2.0'
|
13
13
|
|
14
|
-
s.required_ruby_version = '>= 2.7'
|
14
|
+
s.required_ruby_version = '>= 2.7', '< 3.2'
|
15
15
|
|
16
16
|
s.files = `git ls-files`.split("\n")
|
17
17
|
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
@@ -23,12 +23,12 @@ Gem::Specification.new do |s|
|
|
23
23
|
s.add_development_dependency 'rake', '~> 13.0'
|
24
24
|
s.add_development_dependency 'rspec', '~> 3.0'
|
25
25
|
s.add_development_dependency 'rspec-its', '~> 1.3'
|
26
|
-
s.add_development_dependency 'voxpupuli-rubocop', '~> 1.
|
26
|
+
s.add_development_dependency 'voxpupuli-rubocop', '~> 2.1.0'
|
27
27
|
|
28
28
|
# Acceptance Testing Dependencies
|
29
29
|
s.add_development_dependency 'beaker-vmpooler', '~> 1.4'
|
30
30
|
|
31
31
|
# Run time dependencies
|
32
|
-
s.add_runtime_dependency 'beaker', '~>
|
32
|
+
s.add_runtime_dependency 'beaker', '~> 5.0'
|
33
33
|
s.add_runtime_dependency 'oga', '~> 3.4'
|
34
34
|
end
|
@@ -81,21 +81,13 @@ module Beaker
|
|
81
81
|
# Test Puppet running in a certain run mode with specific options.
|
82
82
|
# This ensures the following steps are performed:
|
83
83
|
# 1. The pre-test Puppet configuration is backed up
|
84
|
-
# 2.
|
84
|
+
# 2. Lay down a new Puppet configuraton file
|
85
85
|
# 3. Puppet is started or restarted in the specified run mode
|
86
86
|
# 4. Ensure Puppet has started correctly
|
87
87
|
# 5. Further tests are yielded to
|
88
88
|
# 6. Revert Puppet to the pre-test state
|
89
89
|
# 7. Testing artifacts are saved in a folder named for the test
|
90
90
|
#
|
91
|
-
# @note Whether Puppet is started or restarted depends on what kind of
|
92
|
-
# server you're running. Passenger and puppetserver are restarted before.
|
93
|
-
# Webrick is started before and stopped after yielding, unless you're using
|
94
|
-
# service scripts, then it'll behave like passenger & puppetserver.
|
95
|
-
# Passenger and puppetserver (or webrick using service scripts)
|
96
|
-
# restart after yielding by default. You can stop this from happening
|
97
|
-
# by setting the :restart_when_done flag of the conf_opts argument.
|
98
|
-
#
|
99
91
|
# @param [Host] host One object that act like Host
|
100
92
|
#
|
101
93
|
# @param [Hash{Symbol=>String}] conf_opts Represents puppet settings.
|
@@ -112,22 +104,11 @@ module Beaker
|
|
112
104
|
#
|
113
105
|
# These will only be applied when starting a FOSS
|
114
106
|
# master, as a pe master is just bounced.
|
115
|
-
# @option conf_opts [Hash] :__service_args__ A special setting of options
|
116
|
-
# for controlling how the puppet master service is
|
117
|
-
# handled. The only setting currently is
|
118
|
-
# :bypass_service_script, which if set true will
|
119
|
-
# force stopping and starting a webrick master
|
120
|
-
# using the start_puppet_from_source_* methods,
|
121
|
-
# even if it seems the host has passenger.
|
122
|
-
# This is needed in FOSS tests to initialize
|
123
|
-
# SSL.
|
124
107
|
# @option conf_opts [Boolean] :restart_when_done determines whether a restart
|
125
108
|
# should be run after the test has been yielded to.
|
126
109
|
# Will stop puppet if false. Default behavior
|
127
110
|
# is to restart, but you can override this on the
|
128
111
|
# host or with this option.
|
129
|
-
# (Note: only works for passenger & puppetserver
|
130
|
-
# masters (or webrick using the service scripts))
|
131
112
|
# @param [File] testdir The temporary directory which will hold backup
|
132
113
|
# configuration, and other test artifacts.
|
133
114
|
#
|
@@ -156,12 +137,11 @@ module Beaker
|
|
156
137
|
end
|
157
138
|
|
158
139
|
cmdline_args = conf_opts[:__commandline_args__]
|
159
|
-
service_args = conf_opts[:__service_args__] || {}
|
160
140
|
restart_when_done = true
|
161
141
|
restart_when_done = host[:restart_when_done] if host.has_key?(:restart_when_done)
|
162
142
|
restart_when_done = conf_opts.fetch(:restart_when_done, restart_when_done)
|
163
143
|
conf_opts = conf_opts.reject do |k, v|
|
164
|
-
%i[__commandline_args__
|
144
|
+
%i[__commandline_args__ restart_when_done].include?(k)
|
165
145
|
end
|
166
146
|
|
167
147
|
curl_retries = host['master-start-curl-retries'] || options['master-start-curl-retries']
|
@@ -202,13 +182,8 @@ module Beaker
|
|
202
182
|
puppet_config(host, 'confdir', section: 'master'),
|
203
183
|
testdir,
|
204
184
|
'puppet.conf')
|
205
|
-
lay_down_new_puppet_conf
|
206
|
-
|
207
|
-
if host.use_service_scripts? && !service_args[:bypass_service_script]
|
208
|
-
bounce_service(host, host['puppetservice'], curl_retries)
|
209
|
-
else
|
210
|
-
puppet_master_started = start_puppet_from_source_on!(host, cmdline_args)
|
211
|
-
end
|
185
|
+
lay_down_new_puppet_conf(host, conf_opts, testdir)
|
186
|
+
bounce_service(host, host['puppetservice'], curl_retries)
|
212
187
|
|
213
188
|
yield self if block_given?
|
214
189
|
|
@@ -229,20 +204,11 @@ module Beaker
|
|
229
204
|
raise(original_exception)
|
230
205
|
ensure
|
231
206
|
begin
|
232
|
-
|
233
|
-
|
234
|
-
|
235
|
-
bounce_service(host, host['puppetservice'], curl_retries)
|
236
|
-
else
|
237
|
-
host.exec puppet_resource('service', host['puppetservice'], 'ensure=stopped')
|
238
|
-
end
|
207
|
+
restore_puppet_conf_from_backup(host, backup_file)
|
208
|
+
if restart_when_done
|
209
|
+
bounce_service(host, host['puppetservice'], curl_retries)
|
239
210
|
else
|
240
|
-
|
241
|
-
stop_puppet_from_source_on(host)
|
242
|
-
else
|
243
|
-
dump_puppet_log(host)
|
244
|
-
end
|
245
|
-
restore_puppet_conf_from_backup(host, backup_file)
|
211
|
+
host.exec puppet_resource('service', host['puppetservice'], 'ensure=stopped')
|
246
212
|
end
|
247
213
|
rescue Exception => teardown_exception
|
248
214
|
begin
|
@@ -281,19 +247,6 @@ module Beaker
|
|
281
247
|
end
|
282
248
|
end
|
283
249
|
|
284
|
-
# @!visibility private
|
285
|
-
def start_puppet_from_source_on!(host, args = '')
|
286
|
-
host.exec(puppet('master', args))
|
287
|
-
|
288
|
-
logger.debug 'Waiting for the puppet master to start'
|
289
|
-
raise Beaker::DSL::FailTest, 'Puppet master did not start in a timely fashion' unless port_open_within?(
|
290
|
-
host, 8140, 10
|
291
|
-
)
|
292
|
-
|
293
|
-
logger.debug 'The puppet master has started'
|
294
|
-
true
|
295
|
-
end
|
296
|
-
|
297
250
|
# @!visibility private
|
298
251
|
def stop_puppet_from_source_on(host)
|
299
252
|
pid = host.exec(Command.new('cat `puppet config print --section master pidfile`')).stdout.chomp
|
@@ -355,19 +308,12 @@ module Beaker
|
|
355
308
|
def bounce_service(host, service, curl_retries = nil, port = nil)
|
356
309
|
curl_retries = 120 if curl_retries.nil?
|
357
310
|
port = options[:puppetserver_port] if port.nil?
|
358
|
-
|
359
|
-
|
360
|
-
apachectl_path = host.is_pe? ? "#{host['puppetsbindir']}/#{service}" : service
|
361
|
-
host.exec(Command.new("#{apachectl_path} graceful"))
|
362
|
-
else
|
363
|
-
result = host.exec(Command.new("service #{service} reload"),
|
364
|
-
acceptable_exit_codes: [0, 1, 3])
|
365
|
-
return result if result.exit_code == 0
|
311
|
+
result = host.exec(Command.new("service #{service} reload"), acceptable_exit_codes: [0, 1, 3])
|
312
|
+
return result if result.exit_code == 0
|
366
313
|
|
367
|
-
|
368
|
-
|
314
|
+
host.exec puppet_resource('service', service, 'ensure=stopped')
|
315
|
+
host.exec puppet_resource('service', service, 'ensure=running')
|
369
316
|
|
370
|
-
end
|
371
317
|
curl_with_retries(" #{service} ", host, "https://localhost:#{port}", [35, 60], curl_retries)
|
372
318
|
end
|
373
319
|
|
@@ -819,28 +765,17 @@ module Beaker
|
|
819
765
|
def sign_certificate_for(host = [])
|
820
766
|
hostnames = []
|
821
767
|
hosts = host.is_a?(Array) ? host : [host]
|
822
|
-
puppet_version = on(master, puppet('--version')).stdout.chomp
|
823
768
|
hosts.each do |current_host|
|
824
769
|
if [master, dashboard, database].include? current_host
|
825
|
-
on
|
826
|
-
|
827
|
-
if version_is_less(puppet_version, '5.99')
|
828
|
-
on master, puppet("cert --allow-dns-alt-names sign #{current_host}"), acceptable_exit_codes: [0, 24]
|
829
|
-
else
|
830
|
-
on master, "puppetserver ca sign --certname #{current_host}"
|
831
|
-
end
|
770
|
+
on(current_host, puppet('agent -t'), acceptable_exit_codes: [0, 1, 2])
|
771
|
+
on(master, "puppetserver ca sign --certname #{current_host}")
|
832
772
|
else
|
833
773
|
hostnames << Regexp.escape(current_host.node_name)
|
834
774
|
end
|
835
775
|
end
|
836
776
|
|
837
777
|
if hostnames.size < 1
|
838
|
-
|
839
|
-
on master, puppet('cert --sign --all --allow-dns-alt-names'),
|
840
|
-
acceptable_exit_codes: [0, 24]
|
841
|
-
else
|
842
|
-
on master, 'puppetserver ca sign --all', acceptable_exit_codes: [0, 24]
|
843
|
-
end
|
778
|
+
on(master, 'puppetserver ca sign --all', acceptable_exit_codes: [0, 24])
|
844
779
|
return
|
845
780
|
end
|
846
781
|
|
@@ -852,21 +787,11 @@ module Beaker
|
|
852
787
|
fail_test("Failed to sign cert for #{hostnames}")
|
853
788
|
hostnames.clear
|
854
789
|
end
|
855
|
-
|
856
|
-
|
857
|
-
|
858
|
-
|
859
|
-
|
860
|
-
hostnames.clear
|
861
|
-
break
|
862
|
-
end
|
863
|
-
else
|
864
|
-
on master, 'puppetserver ca sign --all', acceptable_exit_codes: [0, 24]
|
865
|
-
out = on(master, 'puppetserver ca list --all').stdout
|
866
|
-
if out !~ /.*Requested.*/ && hostnames.all? { |hostname| out =~ /\b#{hostname}\b/ }
|
867
|
-
hostnames.clear
|
868
|
-
break
|
869
|
-
end
|
790
|
+
on(master, 'puppetserver ca sign --all', acceptable_exit_codes: [0, 24])
|
791
|
+
out = on(master, 'puppetserver ca list --all').stdout
|
792
|
+
if out !~ /.*Requested.*/ && hostnames.all? { |hostname| out =~ /\b#{hostname}\b/ }
|
793
|
+
hostnames.clear
|
794
|
+
break
|
870
795
|
end
|
871
796
|
|
872
797
|
sleep next_sleep
|
@@ -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 !~ /^(fedora|el|redhat|centos|debian|ubuntu|huaweios|cisco_nexus|cisco_ios_xr|sles)$/
|
1151
|
+
if variant !~ /^(amazon|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 =~ /^(fedora|el|redhat|centos)$/
|
1165
|
+
dev_builds_url = opts[:dev_builds_url] if variant =~ /^(amazon|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`)
|
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
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
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
|
-
|
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
|
-
|
13
|
-
|
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
|
-
|
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
|
38
|
+
on(agents, puppet('agent --test'), acceptable_exit_codes: [0, 2])
|
46
39
|
end
|
47
40
|
end
|
48
41
|
end
|