beaker 4.29.0 → 4.32.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.github/workflows/release.yml +16 -6
- data/.github/workflows/test.yml +12 -9
- data/CHANGELOG.md +41 -16
- data/Gemfile +10 -1
- data/HISTORY.md +502 -0
- data/README.md +26 -9
- data/Rakefile +14 -0
- data/acceptance/tests/base/dsl/helpers/host_helpers/deploy_package_repo_test.rb +2 -2
- data/acceptance/tests/base/host/packages.rb +2 -2
- data/beaker.gemspec +0 -7
- data/docs/tutorials/creating_a_test_environment.md +1 -0
- data/lib/beaker/host/unix/exec.rb +7 -5
- data/lib/beaker/host/unix/file.rb +3 -3
- data/lib/beaker/host/unix/pkg.rb +13 -10
- data/lib/beaker/host.rb +1 -6
- data/lib/beaker/host_prebuilt_steps.rb +10 -7
- data/lib/beaker/local_connection.rb +3 -0
- data/lib/beaker/perf.rb +2 -2
- data/lib/beaker/platform.rb +2 -1
- data/lib/beaker/version.rb +1 -1
- data/spec/beaker/host/unix/file_spec.rb +12 -0
- data/spec/beaker/host/unix/pkg_spec.rb +27 -14
- data/spec/beaker/host/unix_spec.rb +9 -1
- data/spec/beaker/host_prebuilt_steps_spec.rb +38 -0
- data/spec/beaker/host_spec.rb +18 -10
- data/spec/beaker/perf_spec.rb +2 -1
- data/spec/spec_helper.rb +24 -1
- metadata +4 -59
data/README.md
CHANGED
|
@@ -1,5 +1,13 @@
|
|
|
1
1
|
# Beaker
|
|
2
2
|
|
|
3
|
+
[](https://github.com/voxpupuli/beaker/blob/master/LICENSE)
|
|
4
|
+
[](https://github.com/voxpupuli/beaker/actions/workflows/test.yml)
|
|
5
|
+
[](https://codecov.io/gh/voxpupuli/beaker)
|
|
6
|
+
[](https://github.com/voxpupuli/beaker/actions/workflows/release.yml)
|
|
7
|
+
[](https://rubygems.org/gems/beaker)
|
|
8
|
+
[](https://rubygems.org/gems/beaker)
|
|
9
|
+
[](#transfer-notice)
|
|
10
|
+
|
|
3
11
|
Beaker is a test harness focused on acceptance testing via interactions between multiple (virtual) machines. It provides platform abstraction between different Systems Under Test (SUTs), and it can also be used as a virtual machine provisioner - setting up machines, running any commands on those machines, and then exiting.
|
|
4
12
|
|
|
5
13
|
Beaker runs tests written in Ruby, and provides additional Domain-Specific Language (DSL) methods. This gives you access to all standard Ruby along with acceptance testing specific commands.
|
|
@@ -24,10 +32,6 @@ Documentation for Beaker can be found in this repository in
|
|
|
24
32
|
|
|
25
33
|
Beaker functionality has been extended through the use of libraries available as gems. See the [complete list](docs/concepts/beaker_libraries.md) for available gems. See the [beaker-template documentation](https://github.com/puppetlabs/beaker-template/blob/master/README.md) for documentation on creating beaker-libraries.
|
|
26
34
|
|
|
27
|
-
# License
|
|
28
|
-
|
|
29
|
-
See [LICENSE](LICENSE) file.
|
|
30
|
-
|
|
31
35
|
# Support & Issues
|
|
32
36
|
|
|
33
37
|
Please log tickets and issues at our [Beaker Issue Tracker](https://tickets.puppetlabs.com/issues/?jql=project%20%3D%20BKR). In addition there is an active #puppet-dev channel on Freenode.
|
|
@@ -42,11 +46,24 @@ If you'd like to contribute improvements to Beaker, please see [CONTRIBUTING](CO
|
|
|
42
46
|
|
|
43
47
|
For information on project maintainers, please check out our [CODEOWNERS doc](CODEOWNERS).
|
|
44
48
|
|
|
45
|
-
|
|
49
|
+
## Transfer Notice
|
|
50
|
+
|
|
51
|
+
This plugin was originally authored by [Puppet Inc](http://puppet.com).
|
|
52
|
+
The maintainer preferred that Puppet Community take ownership of the module for future improvement and maintenance.
|
|
53
|
+
Existing pull requests and issues were transferred over, please fork and continue to contribute here.
|
|
54
|
+
|
|
55
|
+
Previously: https://github.com/puppetlabs/beaker
|
|
56
|
+
|
|
57
|
+
## License
|
|
46
58
|
|
|
47
|
-
|
|
48
|
-
Historically, the process has been described in [Confluence: Beaker Release Process](https://confluence.puppetlabs.com/display/SRE/Beaker+Release+Process) (apologies, most links in this section are Puppet-internal).
|
|
59
|
+
This gem is licensed under the Apache-2 license.
|
|
49
60
|
|
|
50
|
-
|
|
61
|
+
## Release information
|
|
51
62
|
|
|
52
|
-
To
|
|
63
|
+
To make a new release, please do:
|
|
64
|
+
* update the version in the gemspec file
|
|
65
|
+
* Install gems with `bundle install --with release --path .vendor`
|
|
66
|
+
* generate the changelog with `bundle exec rake changelog`
|
|
67
|
+
* Check if the new version matches the closed issues/PRs in the changelog
|
|
68
|
+
* Create a PR with it
|
|
69
|
+
* After it got merged, push a tag. GitHub actions will do the actual release to rubygems and GitHub Packages
|
data/Rakefile
CHANGED
|
@@ -328,3 +328,17 @@ namespace :docs do
|
|
|
328
328
|
end
|
|
329
329
|
end
|
|
330
330
|
end
|
|
331
|
+
|
|
332
|
+
begin
|
|
333
|
+
require 'rubygems'
|
|
334
|
+
require 'github_changelog_generator/task'
|
|
335
|
+
|
|
336
|
+
GitHubChangelogGenerator::RakeTask.new :changelog do |config|
|
|
337
|
+
config.exclude_labels = %w{duplicate question invalid wontfix wont-fix skip-changelog}
|
|
338
|
+
config.user = 'voxpupuli'
|
|
339
|
+
config.project = 'beaker'
|
|
340
|
+
gem_version = Gem::Specification.load("#{config.project}.gemspec").version
|
|
341
|
+
config.future_release = gem_version
|
|
342
|
+
end
|
|
343
|
+
rescue LoadError
|
|
344
|
+
end
|
|
@@ -97,7 +97,7 @@ test_name "dsl::helpers::host_helpers #deploy_package_repo" do
|
|
|
97
97
|
end
|
|
98
98
|
end
|
|
99
99
|
|
|
100
|
-
confine_block :to, :platform => /sles/i do
|
|
100
|
+
confine_block :to, :platform => /opensuse|sles/i do
|
|
101
101
|
|
|
102
102
|
step "#deploy_package_repo updates zypper repository list on the remote host" do
|
|
103
103
|
Dir.mktmpdir do |local_dir|
|
|
@@ -119,7 +119,7 @@ test_name "dsl::helpers::host_helpers #deploy_package_repo" do
|
|
|
119
119
|
end
|
|
120
120
|
end
|
|
121
121
|
|
|
122
|
-
confine_block :except, :platform => /el-\d|fedora|centos|eos|ubuntu|debian|cumulus|sles/i do
|
|
122
|
+
confine_block :except, :platform => /el-\d|fedora|centos|eos|ubuntu|debian|cumulus|opensuse|sles/i do
|
|
123
123
|
|
|
124
124
|
# OS X, windows (cygwin, powershell), solaris, etc.
|
|
125
125
|
|
|
@@ -5,7 +5,7 @@ def get_host_pkg(host)
|
|
|
5
5
|
case
|
|
6
6
|
when host['platform'] =~ /sles-10/
|
|
7
7
|
Beaker::HostPrebuiltSteps::SLES10_PACKAGES
|
|
8
|
-
when host['platform'] =~ /sles-/
|
|
8
|
+
when host['platform'] =~ /opensuse|sles-/
|
|
9
9
|
Beaker::HostPrebuiltSteps::SLES_PACKAGES
|
|
10
10
|
when host['platform'] =~ /debian/
|
|
11
11
|
Beaker::HostPrebuiltSteps::DEBIAN_PACKAGES
|
|
@@ -53,7 +53,7 @@ hosts.each do |host|
|
|
|
53
53
|
next if host['platform'] =~ /windows/
|
|
54
54
|
package = 'zsh'
|
|
55
55
|
package = 'CSWzsh' if host['platform'] =~ /solaris-10/
|
|
56
|
-
package = 'git' if host['platform'] =~ /sles/
|
|
56
|
+
package = 'git' if host['platform'] =~ /opensuse|sles/
|
|
57
57
|
|
|
58
58
|
if host['platform'] =~ /solaris-11/
|
|
59
59
|
logger.debug("#{package} should be uninstalled on #{host}")
|
data/beaker.gemspec
CHANGED
|
@@ -24,15 +24,8 @@ Gem::Specification.new do |s|
|
|
|
24
24
|
s.add_development_dependency 'rspec', '~> 3.0'
|
|
25
25
|
s.add_development_dependency 'rspec-its'
|
|
26
26
|
s.add_development_dependency 'fakefs', '~> 1.0'
|
|
27
|
-
s.add_development_dependency 'simplecov'
|
|
28
27
|
s.add_development_dependency 'rake', '~> 13.0'
|
|
29
28
|
|
|
30
|
-
# Provisioner dependencies - needed for acceptance tests
|
|
31
|
-
# TODO: figure out how to remove these
|
|
32
|
-
s.add_development_dependency 'beaker-aws', '~> 0.1'
|
|
33
|
-
s.add_development_dependency 'beaker-abs', '~> 0.4'
|
|
34
|
-
s.add_development_dependency 'beaker-vmpooler', '~> 1.0'
|
|
35
|
-
|
|
36
29
|
# Documentation dependencies
|
|
37
30
|
s.add_development_dependency 'yard', '~> 0.9.11'
|
|
38
31
|
|
|
@@ -138,7 +138,9 @@ module Unix::Exec
|
|
|
138
138
|
if self['platform'].include?('solaris') || self['platform'].include?('osx')
|
|
139
139
|
execute("ifconfig -a inet| awk '/broadcast/ {print $2}' | cut -d/ -f1 | head -1").strip
|
|
140
140
|
else
|
|
141
|
-
|
|
141
|
+
|
|
142
|
+
pipe_cmd = "#{self['hypervisor']}".include?('vagrant') ? 'tail' : 'head'
|
|
143
|
+
execute("ip a | awk '/global/{print$2}' | cut -d/ -f1 | #{pipe_cmd} -1").strip
|
|
142
144
|
end
|
|
143
145
|
end
|
|
144
146
|
|
|
@@ -186,8 +188,8 @@ module Unix::Exec
|
|
|
186
188
|
# This is for sles based hosts.
|
|
187
189
|
# @param [String] env_file The ssh environment file to read from
|
|
188
190
|
def mirror_env_to_profile_d env_file
|
|
189
|
-
if self[:platform] =~ /sles-/
|
|
190
|
-
@logger.debug("mirroring environment to /etc/profile.d on sles platform host")
|
|
191
|
+
if self[:platform] =~ /opensuse|sles-/
|
|
192
|
+
@logger.debug("mirroring environment to /etc/profile.d on opensuse/sles platform host")
|
|
191
193
|
cur_env = exec(Beaker::Command.new("cat #{env_file}")).stdout
|
|
192
194
|
shell_env = ''
|
|
193
195
|
cur_env.each_line do |env_line|
|
|
@@ -282,7 +284,7 @@ module Unix::Exec
|
|
|
282
284
|
exec(Beaker::Command.new("systemctl restart sshd.service"))
|
|
283
285
|
when /el-|centos|fedora|redhat|oracle|scientific|eos/
|
|
284
286
|
exec(Beaker::Command.new("/sbin/service sshd restart"))
|
|
285
|
-
when /sles/
|
|
287
|
+
when /opensuse|sles/
|
|
286
288
|
exec(Beaker::Command.new("/usr/sbin/rcsshd restart"))
|
|
287
289
|
when /solaris/
|
|
288
290
|
exec(Beaker::Command.new("svcadm restart svc:/network/ssh:default"))
|
|
@@ -313,7 +315,7 @@ module Unix::Exec
|
|
|
313
315
|
directory = tmpdir()
|
|
314
316
|
exec(Beaker::Command.new("echo 'PermitUserEnvironment yes' | cat - /etc/ssh/sshd_config > #{directory}/sshd_config.permit"))
|
|
315
317
|
exec(Beaker::Command.new("mv #{directory}/sshd_config.permit /etc/ssh/sshd_config"))
|
|
316
|
-
when /sles/
|
|
318
|
+
when /opensuse|sles/
|
|
317
319
|
directory = tmpdir()
|
|
318
320
|
exec(Beaker::Command.new("echo 'PermitUserEnvironment yes' | cat - /etc/ssh/sshd_config > #{directory}/sshd_config.permit"))
|
|
319
321
|
exec(Beaker::Command.new("mv #{directory}/sshd_config.permit /etc/ssh/sshd_config"))
|
|
@@ -90,7 +90,7 @@ module Unix::File
|
|
|
90
90
|
case self['platform']
|
|
91
91
|
when /fedora|el-|redhat|centos/
|
|
92
92
|
'/etc/yum.repos.d/'
|
|
93
|
-
when /sles/
|
|
93
|
+
when /opensuse|sles/
|
|
94
94
|
'/etc/zypp/repos.d/'
|
|
95
95
|
when /debian|ubuntu|cumulus|huaweios/
|
|
96
96
|
'/etc/apt/sources.list.d'
|
|
@@ -113,7 +113,7 @@ module Unix::File
|
|
|
113
113
|
repo_filename = "pl-%s-%s-" % [ package_name, build_version ]
|
|
114
114
|
|
|
115
115
|
case variant
|
|
116
|
-
when /fedora|el|redhat|centos|cisco_nexus|cisco_ios_xr|sles/
|
|
116
|
+
when /fedora|el|redhat|centos|cisco_nexus|cisco_ios_xr|opensuse|sles/
|
|
117
117
|
variant = 'el' if ['centos', 'redhat'].include?(variant)
|
|
118
118
|
|
|
119
119
|
variant = 'redhatfips' if self['packaging_platform'] =~ /redhatfips/
|
|
@@ -154,7 +154,7 @@ module Unix::File
|
|
|
154
154
|
# @return [String] Type of repo (rpm|deb)
|
|
155
155
|
def repo_type
|
|
156
156
|
case self['platform']
|
|
157
|
-
when /fedora|el-|redhat|centos|sles/
|
|
157
|
+
when /fedora|el-|redhat|centos|opensuse|sles/
|
|
158
158
|
'rpm'
|
|
159
159
|
when /debian|ubuntu|cumulus|huaweios/
|
|
160
160
|
'deb'
|
data/lib/beaker/host/unix/pkg.rb
CHANGED
|
@@ -28,7 +28,7 @@ module Unix::Pkg
|
|
|
28
28
|
when /sles-10/
|
|
29
29
|
result = execute("zypper se -i --match-exact #{name}", opts) { |result| result }
|
|
30
30
|
result.stdout =~ /No packages found/ ? (return false) : (return result.exit_code == 0)
|
|
31
|
-
when /sles-/
|
|
31
|
+
when /opensuse|sles-/
|
|
32
32
|
if !self[:sles_rpmkeys_nightly_pl_imported]
|
|
33
33
|
# The `:sles_rpmkeys_nightly_pl_imported` key is only read here at this
|
|
34
34
|
# time. It's just to make sure that we only do the key import once, &
|
|
@@ -85,7 +85,7 @@ module Unix::Pkg
|
|
|
85
85
|
|
|
86
86
|
def install_package(name, cmdline_args = '', version = nil, opts = {})
|
|
87
87
|
case self['platform']
|
|
88
|
-
when /sles-/
|
|
88
|
+
when /opensuse|sles-/
|
|
89
89
|
execute("zypper --non-interactive --gpg-auto-import-keys in #{name}", opts)
|
|
90
90
|
when /el-4/
|
|
91
91
|
@logger.debug("Package installation not supported on rhel4")
|
|
@@ -177,7 +177,7 @@ module Unix::Pkg
|
|
|
177
177
|
|
|
178
178
|
def uninstall_package(name, cmdline_args = '', opts = {})
|
|
179
179
|
case self['platform']
|
|
180
|
-
when /sles-/
|
|
180
|
+
when /opensuse|sles-/
|
|
181
181
|
execute("zypper --non-interactive rm #{name}", opts)
|
|
182
182
|
when /el-4/
|
|
183
183
|
@logger.debug("Package uninstallation not supported on rhel4")
|
|
@@ -207,7 +207,7 @@ module Unix::Pkg
|
|
|
207
207
|
# the package manager
|
|
208
208
|
def upgrade_package(name, cmdline_args = '', opts = {})
|
|
209
209
|
case self['platform']
|
|
210
|
-
when /sles-/
|
|
210
|
+
when /opensuse|sles-/
|
|
211
211
|
execute("zypper --non-interactive --no-gpg-checks up #{name}", opts)
|
|
212
212
|
when /el-4/
|
|
213
213
|
@logger.debug("Package upgrade is not supported on rhel4")
|
|
@@ -302,7 +302,7 @@ module Unix::Pkg
|
|
|
302
302
|
deploy_yum_repo(path, name, version)
|
|
303
303
|
when /ubuntu|debian|cumulus|huaweios/
|
|
304
304
|
deploy_apt_repo(path, name, version)
|
|
305
|
-
when /sles/
|
|
305
|
+
when /opensuse|sles/
|
|
306
306
|
deploy_zyp_repo(path, name, version)
|
|
307
307
|
else
|
|
308
308
|
# solaris, windows
|
|
@@ -424,12 +424,15 @@ module Unix::Pkg
|
|
|
424
424
|
raise ArgumentError, error_message % "puppet_agent_version" unless puppet_agent_version
|
|
425
425
|
|
|
426
426
|
variant, version, arch, codename = self['platform'].to_array
|
|
427
|
+
|
|
427
428
|
case variant
|
|
428
429
|
when /^(solaris)$/
|
|
429
430
|
release_path_end, release_file = solaris_puppet_agent_dev_package_info(
|
|
430
431
|
puppet_collection, puppet_agent_version, opts )
|
|
431
|
-
when /^(sles|aix|el|centos|oracle|redhat|scientific)$/
|
|
432
|
+
when /^(opensuse|sles|aix|el|centos|oracle|redhat|scientific)$/
|
|
432
433
|
variant = 'el' if variant.match(/(?:el|centos|oracle|redhat|scientific)/)
|
|
434
|
+
variant = 'sles' if variant == 'opensuse'
|
|
435
|
+
|
|
433
436
|
if variant == 'aix'
|
|
434
437
|
arch = 'ppc' if arch == 'power'
|
|
435
438
|
version_x, version_y = /^(\d+)\.(\d+)/.match(puppet_agent_version).captures.map(&:to_i)
|
|
@@ -464,7 +467,7 @@ module Unix::Pkg
|
|
|
464
467
|
|
|
465
468
|
variant, version, arch, codename = self['platform'].to_array
|
|
466
469
|
case variant
|
|
467
|
-
when /^(fedora|el|centos|redhat|sles)$/
|
|
470
|
+
when /^(fedora|el|centos|redhat|opensuse|sles)$/
|
|
468
471
|
variant = ((['centos', 'redhat'].include?(variant)) ? 'el' : variant)
|
|
469
472
|
release_file = "/repos/#{variant}/#{version}/#{puppet_collection}/#{arch}/puppet-agent-*.rpm"
|
|
470
473
|
download_file = "puppet-agent-#{variant}-#{version}-#{arch}.tar.gz"
|
|
@@ -524,9 +527,9 @@ module Unix::Pkg
|
|
|
524
527
|
case variant
|
|
525
528
|
when /^(fedora|el|redhat|centos)$/
|
|
526
529
|
command_name = 'yum'
|
|
527
|
-
command_name = 'dnf' if variant == 'fedora' && version > 21
|
|
530
|
+
command_name = 'dnf' if variant == 'fedora' && version.to_i > 21
|
|
528
531
|
execute("#{command_name} --nogpgcheck localinstall -y #{onhost_package_file}")
|
|
529
|
-
when /^(sles)$/
|
|
532
|
+
when /^(opensuse|sles)$/
|
|
530
533
|
execute("zypper --non-interactive --no-gpg-checks in #{onhost_package_file}")
|
|
531
534
|
when /^(debian|ubuntu|cumulus)$/
|
|
532
535
|
execute("dpkg -i --force-all #{onhost_package_file}")
|
|
@@ -552,7 +555,7 @@ module Unix::Pkg
|
|
|
552
555
|
def uncompress_local_tarball(onhost_tar_file, onhost_base_dir, download_file)
|
|
553
556
|
variant, version, arch, codename = self['platform'].to_array
|
|
554
557
|
case variant
|
|
555
|
-
when /^(fedora|el|centos|redhat|sles|debian|ubuntu|cumulus)$/
|
|
558
|
+
when /^(fedora|el|centos|redhat|opensuse|sles|debian|ubuntu|cumulus)$/
|
|
556
559
|
execute("tar -zxvf #{onhost_tar_file} -C #{onhost_base_dir}")
|
|
557
560
|
when /^solaris$/
|
|
558
561
|
# uncompress PE puppet-agent tarball
|
data/lib/beaker/host.rb
CHANGED
|
@@ -211,13 +211,8 @@ module Beaker
|
|
|
211
211
|
end
|
|
212
212
|
|
|
213
213
|
# Returns true if the host is running in FIPS mode.
|
|
214
|
-
#
|
|
215
|
-
# We currently only test FIPS mode on Redhat 7. Other detection
|
|
216
|
-
# modes should be added here if we expand FIPS support to other
|
|
217
|
-
# platforms.
|
|
218
214
|
def fips_mode?
|
|
219
|
-
|
|
220
|
-
when /el-7/
|
|
215
|
+
if self.file_exist?('/proc/sys/crypto/fips_enabled')
|
|
221
216
|
begin
|
|
222
217
|
execute("cat /proc/sys/crypto/fips_enabled") == "1"
|
|
223
218
|
rescue Beaker::Host::CommandFailure
|
|
@@ -13,10 +13,11 @@ module Beaker
|
|
|
13
13
|
SLEEPWAIT = 5
|
|
14
14
|
TRIES = 5
|
|
15
15
|
RHEL8_PACKAGES = ['curl', 'chrony']
|
|
16
|
+
FEDORA_PACKAGES = ['curl', 'chrony']
|
|
16
17
|
UNIX_PACKAGES = ['curl', 'ntpdate']
|
|
17
18
|
FREEBSD_PACKAGES = ['curl', 'perl5|perl']
|
|
18
19
|
OPENBSD_PACKAGES = ['curl']
|
|
19
|
-
ARCHLINUX_PACKAGES = ['curl', 'ntp']
|
|
20
|
+
ARCHLINUX_PACKAGES = ['curl', 'ntp', 'net-tools', 'openssh']
|
|
20
21
|
WINDOWS_PACKAGES = ['curl']
|
|
21
22
|
PSWINDOWS_PACKAGES = []
|
|
22
23
|
SLES10_PACKAGES = ['curl']
|
|
@@ -52,9 +53,9 @@ module Beaker
|
|
|
52
53
|
logger.notify "NTP date succeeded on #{host}"
|
|
53
54
|
else
|
|
54
55
|
case
|
|
55
|
-
when host['platform'] =~ /el-
|
|
56
|
+
when host['platform'] =~ /el-[89]|fedora/
|
|
56
57
|
ntp_command = "chronyc add server #{ntp_server} prefer trust;chronyc makestep;chronyc burst 1/2"
|
|
57
|
-
when host['platform'] =~ /sles-/
|
|
58
|
+
when host['platform'] =~ /opensuse-|sles-/
|
|
58
59
|
ntp_command = "sntp #{ntp_server}"
|
|
59
60
|
when host['platform'] =~ /cisco_nexus/
|
|
60
61
|
ntp_server = host.exec(Command.new("getent hosts #{NTPSERVER} | head -n1 |cut -d \" \" -f1"), :acceptable_exit_codes => [0]).stdout
|
|
@@ -101,11 +102,11 @@ module Beaker
|
|
|
101
102
|
logger = opts[:logger]
|
|
102
103
|
block_on host do |host|
|
|
103
104
|
case
|
|
104
|
-
when host['platform'] =~ /el-
|
|
105
|
+
when host['platform'] =~ /el-[89]/
|
|
105
106
|
check_and_install_packages_if_needed(host, RHEL8_PACKAGES)
|
|
106
107
|
when host['platform'] =~ /sles-10/
|
|
107
108
|
check_and_install_packages_if_needed(host, SLES10_PACKAGES)
|
|
108
|
-
when host['platform'] =~ /sles-/
|
|
109
|
+
when host['platform'] =~ /opensuse|sles-/
|
|
109
110
|
check_and_install_packages_if_needed(host, SLES_PACKAGES)
|
|
110
111
|
when host['platform'] =~ /debian/
|
|
111
112
|
check_and_install_packages_if_needed(host, DEBIAN_PACKAGES)
|
|
@@ -126,7 +127,9 @@ module Beaker
|
|
|
126
127
|
check_and_install_packages_if_needed(host, SOLARIS11_PACKAGES)
|
|
127
128
|
when host['platform'] =~ /archlinux/
|
|
128
129
|
check_and_install_packages_if_needed(host, ARCHLINUX_PACKAGES)
|
|
129
|
-
when host['platform']
|
|
130
|
+
when host['platform'] =~ /fedora/
|
|
131
|
+
check_and_install_packages_if_needed(host, FEDORA_PACKAGES)
|
|
132
|
+
when host['platform'] !~ /debian|aix|solaris|windows|opensuse-|sles-|osx-|cumulus|f5-|netscaler|cisco_/
|
|
130
133
|
check_and_install_packages_if_needed(host, UNIX_PACKAGES)
|
|
131
134
|
end
|
|
132
135
|
end
|
|
@@ -449,7 +452,7 @@ module Beaker
|
|
|
449
452
|
#restart sshd
|
|
450
453
|
if host['platform'] =~ /debian|ubuntu|cumulus/
|
|
451
454
|
host.exec(Command.new("sudo su -c \"service ssh restart\""), {:pty => true})
|
|
452
|
-
elsif host['platform'] =~ /arch|centos
|
|
455
|
+
elsif host['platform'] =~ /arch|(centos|el|redhat)-[789]|fedora-(1[4-9]|2[0-9]|3[0-9])/
|
|
453
456
|
host.exec(Command.new("sudo -E systemctl restart sshd.service"), {:pty => true})
|
|
454
457
|
elsif host['platform'] =~ /centos|el-|redhat|fedora|eos/
|
|
455
458
|
host.exec(Command.new("sudo -E /sbin/service sshd reload"), {:pty => true})
|
|
@@ -53,9 +53,12 @@ module Beaker
|
|
|
53
53
|
result.stdout << std_out
|
|
54
54
|
result.stderr << std_err
|
|
55
55
|
result.exit_code = status.exitstatus
|
|
56
|
+
@logger.info(result.stdout) unless result.stdout.empty?
|
|
57
|
+
@logger.info(result.stderr) unless result.stderr.empty?
|
|
56
58
|
end
|
|
57
59
|
rescue => e
|
|
58
60
|
result.stderr << e.inspect
|
|
61
|
+
@logger.info(result.stderr)
|
|
59
62
|
result.exit_code = 1
|
|
60
63
|
end
|
|
61
64
|
|
data/lib/beaker/perf.rb
CHANGED
|
@@ -4,7 +4,7 @@ module Beaker
|
|
|
4
4
|
|
|
5
5
|
PERF_PACKAGES = ['sysstat']
|
|
6
6
|
# SLES does not treat sysstat as a service that can be started
|
|
7
|
-
PERF_SUPPORTED_PLATFORMS = /debian|ubuntu|redhat|centos|oracle|scientific|fedora|el|eos|cumulus|sles/
|
|
7
|
+
PERF_SUPPORTED_PLATFORMS = /debian|ubuntu|redhat|centos|oracle|scientific|fedora|el|eos|cumulus|opensuse|sles/
|
|
8
8
|
PERF_START_PLATFORMS = /debian|ubuntu|redhat|centos|oracle|scientific|fedora|el|eos|cumulus/
|
|
9
9
|
|
|
10
10
|
# Create the Perf instance and runs setup_perf_on_host on all hosts if --collect-perf-data
|
|
@@ -42,7 +42,7 @@ module Beaker
|
|
|
42
42
|
if host['platform'] =~ /debian|ubuntu|cumulus/
|
|
43
43
|
@logger.perf_output("Modify /etc/default/sysstat on Debian and Ubuntu platforms")
|
|
44
44
|
host.exec(Command.new('sed -i s/ENABLED=\"false\"/ENABLED=\"true\"/ /etc/default/sysstat'))
|
|
45
|
-
elsif host['platform'] =~ /sles/
|
|
45
|
+
elsif host['platform'] =~ /opensuse|sles/
|
|
46
46
|
@logger.perf_output("Creating symlink from /etc/sysstat/sysstat.cron to /etc/cron.d")
|
|
47
47
|
host.exec(Command.new('ln -s /etc/sysstat/sysstat.cron /etc/cron.d'),:acceptable_exit_codes => [0,1])
|
|
48
48
|
end
|
data/lib/beaker/platform.rb
CHANGED
|
@@ -3,7 +3,7 @@ module Beaker
|
|
|
3
3
|
# all String methods while adding several platform-specific use cases.
|
|
4
4
|
class Platform < String
|
|
5
5
|
# Supported platforms
|
|
6
|
-
PLATFORMS = /^(alpine|huaweios|cisco_nexus|cisco_ios_xr|(free|open)bsd|osx|centos|fedora|debian|oracle|redhat|redhatfips|scientific|sles|ubuntu|windows|solaris|aix|archlinux|el|eos|cumulus|f5|netscaler)\-.+\-.+$/
|
|
6
|
+
PLATFORMS = /^(alpine|huaweios|cisco_nexus|cisco_ios_xr|(free|open)bsd|osx|centos|fedora|debian|oracle|redhat|redhatfips|scientific|opensuse|sles|ubuntu|windows|solaris|aix|archlinux|el|eos|cumulus|f5|netscaler)\-.+\-.+$/
|
|
7
7
|
# Platform version numbers vs. codenames conversion hash
|
|
8
8
|
PLATFORM_VERSION_CODES =
|
|
9
9
|
{ :debian => { "bullseye" => "11",
|
|
@@ -69,6 +69,7 @@ module Beaker
|
|
|
69
69
|
# * redhat
|
|
70
70
|
# * redhatfips
|
|
71
71
|
# * scientific
|
|
72
|
+
# * opensuse
|
|
72
73
|
# * sles
|
|
73
74
|
# * ubuntu
|
|
74
75
|
# * windows
|
data/lib/beaker/version.rb
CHANGED
|
@@ -76,6 +76,11 @@ module Beaker
|
|
|
76
76
|
expect( instance.package_config_dir ).to be === '/etc/zypp/repos.d/'
|
|
77
77
|
end
|
|
78
78
|
|
|
79
|
+
it 'returns correctly for opensuse-based platforms' do
|
|
80
|
+
@platform = 'opensuse-15-x86_64'
|
|
81
|
+
expect( instance.package_config_dir ).to be === '/etc/zypp/repos.d/'
|
|
82
|
+
end
|
|
83
|
+
|
|
79
84
|
it 'errors for all other platform types' do
|
|
80
85
|
@platform = 'eos-4-x86_64'
|
|
81
86
|
expect {
|
|
@@ -102,6 +107,13 @@ module Beaker
|
|
|
102
107
|
expect( filename ).to match( /sion7\-sles\-/ )
|
|
103
108
|
end
|
|
104
109
|
|
|
110
|
+
it 'sets the opensuse portion correctly for opensuse platforms' do
|
|
111
|
+
@platform = 'opensuse-15-x86_64'
|
|
112
|
+
allow( instance ).to receive( :is_pe? ) { false }
|
|
113
|
+
filename = instance.repo_filename( 'pkg_name', 'pkg_version7' )
|
|
114
|
+
expect( filename ).to match( /sion7\-opensuse\-/ )
|
|
115
|
+
end
|
|
116
|
+
|
|
105
117
|
it 'builds the filename correctly for el-based platforms' do
|
|
106
118
|
@platform = 'el-21-x86_64'
|
|
107
119
|
allow( instance ).to receive( :is_pe? ) { false }
|
|
@@ -73,6 +73,13 @@ module Beaker
|
|
|
73
73
|
instance.deploy_package_repo(path,name,version)
|
|
74
74
|
end
|
|
75
75
|
|
|
76
|
+
it 'calls #deploy_zyp_repo for opensuse systems' do
|
|
77
|
+
@opts = {'platform' => 'opensuse-is-me'}
|
|
78
|
+
expect(instance).to receive(:deploy_zyp_repo)
|
|
79
|
+
allow(File).to receive(:exists?).with(path).and_return(true)
|
|
80
|
+
instance.deploy_package_repo(path,name,version)
|
|
81
|
+
end
|
|
82
|
+
|
|
76
83
|
it 'raises an error for unsupported systems' do
|
|
77
84
|
@opts = {'platform' => 'windows-is-me'}
|
|
78
85
|
allow(File).to receive(:exists?).with(path).and_return(true)
|
|
@@ -102,6 +109,14 @@ module Beaker
|
|
|
102
109
|
expect( instance ).to receive(:exec).with('', :accept_all_exit_codes => true).and_return(generate_result("hello", {:exit_code => 0})).exactly(2).times
|
|
103
110
|
expect( instance.check_for_package(pkg) ).to be === true
|
|
104
111
|
end
|
|
112
|
+
it "checks correctly on opensuse" do
|
|
113
|
+
@opts = {'platform' => 'opensuse-is-me'}
|
|
114
|
+
pkg = 'sles_package'
|
|
115
|
+
expect( Beaker::Command ).to receive( :new ).with( /^rpmkeys.*nightlies.puppetlabs.com.*/, anything, anything ).and_return('').ordered.once
|
|
116
|
+
expect( Beaker::Command ).to receive(:new).with("zypper --gpg-auto-import-keys se -i --match-exact #{pkg}", [], {:prepend_cmds=>nil, :cmdexe=>false}).and_return('').ordered.once
|
|
117
|
+
expect( instance ).to receive(:exec).with('', :accept_all_exit_codes => true).and_return(generate_result("hello", {:exit_code => 0})).exactly(2).times
|
|
118
|
+
expect( instance.check_for_package(pkg) ).to be === true
|
|
119
|
+
end
|
|
105
120
|
|
|
106
121
|
it "checks correctly on fedora" do
|
|
107
122
|
@opts = {'platform' => 'fedora-is-me'}
|
|
@@ -297,6 +312,7 @@ module Beaker
|
|
|
297
312
|
platforms = { 'solaris-10-x86_64' => ["solaris/10/#{puppet_collection}", "puppet-agent-#{puppet_agent_version}-1.i386.pkg.gz"],
|
|
298
313
|
'solaris-11-x86_64' => ["solaris/11/#{puppet_collection}", "puppet-agent@#{puppet_agent_version},5.11-1.i386.p5p"],
|
|
299
314
|
'sles-11-x86_64' => ["sles/11/#{puppet_collection}/x86_64", "puppet-agent-#{puppet_agent_version}-1.sles11.x86_64.rpm"],
|
|
315
|
+
'opensuse-15-x86_64' => ["sles/15/#{puppet_collection}/x86_64", "puppet-agent-#{puppet_agent_version}-1.sles15.x86_64.rpm"],
|
|
300
316
|
'aix-6.1-power' => ["aix/6.1/#{puppet_collection}/ppc", "puppet-agent-#{puppet_agent_version}-1.aix6.1.ppc.rpm"],
|
|
301
317
|
'el-7-x86_64' => ["el/7/#{puppet_collection}/x86_64", "puppet-agent-#{puppet_agent_version}-1.el7.x86_64.rpm"],
|
|
302
318
|
'centos-7-x86_64' => ["el/7/#{puppet_collection}/x86_64", "puppet-agent-#{puppet_agent_version}-1.el7.x86_64.rpm"],
|
|
@@ -509,14 +525,9 @@ module Beaker
|
|
|
509
525
|
describe '#install_local_package' do
|
|
510
526
|
let( :platform ) { @platform || 'fedora' }
|
|
511
527
|
let( :version ) { @version || 6 }
|
|
512
|
-
let( :platform_mock ) {
|
|
513
|
-
mock = Object.new
|
|
514
|
-
allow( mock ).to receive( :to_array ) { [platform, version, '', ''] }
|
|
515
|
-
mock
|
|
516
|
-
}
|
|
517
528
|
|
|
518
529
|
before :each do
|
|
519
|
-
allow( instance ).to receive( :[] ).with( 'platform' ) {
|
|
530
|
+
allow( instance ).to receive( :[] ).with( 'platform' ) { Beaker::Platform.new("#{platform}-#{version}-x86_64") }
|
|
520
531
|
end
|
|
521
532
|
|
|
522
533
|
it 'Fedora 22-39: uses dnf' do
|
|
@@ -530,7 +541,6 @@ module Beaker
|
|
|
530
541
|
|
|
531
542
|
it 'Fedora 21 uses yum' do
|
|
532
543
|
package_file = 'testing_456.yay'
|
|
533
|
-
platform_mock = Object.new
|
|
534
544
|
[21].each do |version|
|
|
535
545
|
@version = version
|
|
536
546
|
expect( instance ).to receive( :execute ).with( /^yum.*#{package_file}$/ )
|
|
@@ -578,18 +588,13 @@ module Beaker
|
|
|
578
588
|
let( :tar_file ) { 'test.tar.gz' }
|
|
579
589
|
let( :base_dir ) { '/base/dir/fake' }
|
|
580
590
|
let( :download_file ) { 'download_file.txt' }
|
|
581
|
-
let( :platform_mock ) {
|
|
582
|
-
mock = Object.new
|
|
583
|
-
allow( mock ).to receive( :to_array ) { [platform, version, '', ''] }
|
|
584
|
-
mock
|
|
585
|
-
}
|
|
586
591
|
|
|
587
592
|
before :each do
|
|
588
|
-
allow( instance ).to receive( :[] ).with( 'platform' ) {
|
|
593
|
+
allow( instance ).to receive( :[] ).with( 'platform' ) { Beaker::Platform.new("#{platform}-#{version}-x86_64") }
|
|
589
594
|
end
|
|
590
595
|
|
|
591
596
|
it 'rejects unsupported platforms' do
|
|
592
|
-
@platform = '
|
|
597
|
+
@platform = 'cisco_nexus'
|
|
593
598
|
expect {
|
|
594
599
|
instance.uncompress_local_tarball( tar_file, base_dir, download_file )
|
|
595
600
|
}.to raise_error(
|
|
@@ -605,6 +610,14 @@ module Beaker
|
|
|
605
610
|
instance.uncompress_local_tarball( tar_file, base_dir, download_file )
|
|
606
611
|
end
|
|
607
612
|
|
|
613
|
+
it 'untars the file given' do
|
|
614
|
+
@platform = 'opensuse'
|
|
615
|
+
expect( instance ).to receive( :execute ).with(
|
|
616
|
+
/^tar .* #{tar_file} .* #{base_dir}$/
|
|
617
|
+
)
|
|
618
|
+
instance.uncompress_local_tarball( tar_file, base_dir, download_file )
|
|
619
|
+
end
|
|
620
|
+
|
|
608
621
|
context 'on solaris' do
|
|
609
622
|
|
|
610
623
|
before :each do
|
|
@@ -170,6 +170,14 @@ module Unix
|
|
|
170
170
|
expect( release_file ).to be === "puppet-agent-pa_version1-1.sles12.arch.rpm"
|
|
171
171
|
end
|
|
172
172
|
|
|
173
|
+
it 'sets up opensuse platforms correctly' do
|
|
174
|
+
@platform = 'opensuse-15-x86_64'
|
|
175
|
+
release_path_end, release_file = host.puppet_agent_dev_package_info(
|
|
176
|
+
'pa_collection', 'pa_version1' )
|
|
177
|
+
expect( release_path_end ).to be === "sles/15/pa_collection/x86_64"
|
|
178
|
+
expect( release_file ).to be === "puppet-agent-pa_version1-1.sles15.x86_64.rpm"
|
|
179
|
+
end
|
|
180
|
+
|
|
173
181
|
it 'sets the arch correctly on aix-power platforms' do
|
|
174
182
|
@platform = 'aix-6.1-power'
|
|
175
183
|
release_path_end, release_file = host.puppet_agent_dev_package_info(
|
|
@@ -234,4 +242,4 @@ module Unix
|
|
|
234
242
|
end
|
|
235
243
|
end
|
|
236
244
|
end
|
|
237
|
-
end
|
|
245
|
+
end
|
|
@@ -12,6 +12,7 @@ describe Beaker do
|
|
|
12
12
|
let( :unix_only_pkgs ) { Beaker::HostPrebuiltSteps::UNIX_PACKAGES }
|
|
13
13
|
let( :sles_only_pkgs ) { Beaker::HostPrebuiltSteps::SLES_PACKAGES }
|
|
14
14
|
let( :rhel8_packages ) { Beaker::HostPrebuiltSteps::RHEL8_PACKAGES }
|
|
15
|
+
let( :fedora_packages) { Beaker::HostPrebuiltSteps::FEDORA_PACKAGES }
|
|
15
16
|
let( :platform ) { @platform || 'unix' }
|
|
16
17
|
let( :ip ) { "ip.address.0.0" }
|
|
17
18
|
let( :stdout) { @stdout || ip }
|
|
@@ -159,6 +160,15 @@ describe Beaker do
|
|
|
159
160
|
subject.timesync(hosts, options)
|
|
160
161
|
end
|
|
161
162
|
|
|
163
|
+
it "can sync time on Fedora hosts" do
|
|
164
|
+
hosts = make_hosts(:platform => 'fedora-32-x86_64')
|
|
165
|
+
expect(Beaker::Command).to receive(:new)
|
|
166
|
+
.with("chronyc add server #{ntpserver} prefer trust;chronyc makestep;chronyc burst 1/2")
|
|
167
|
+
.exactly(3)
|
|
168
|
+
.times
|
|
169
|
+
subject.timesync(hosts, options)
|
|
170
|
+
end
|
|
171
|
+
|
|
162
172
|
it "can set time server on unix hosts" do
|
|
163
173
|
hosts = make_hosts( { :platform => 'unix' } )
|
|
164
174
|
|
|
@@ -437,6 +447,21 @@ describe Beaker do
|
|
|
437
447
|
|
|
438
448
|
end
|
|
439
449
|
|
|
450
|
+
it "can validate opensuse hosts" do
|
|
451
|
+
@platform = 'opensuse-15-x86_x64'
|
|
452
|
+
|
|
453
|
+
hosts.each do |host|
|
|
454
|
+
sles_only_pkgs.each do |pkg|
|
|
455
|
+
expect( host ).to receive( :check_for_package).with( pkg ).once.and_return( false )
|
|
456
|
+
expect( host ).to receive( :install_package ).with( pkg ).once
|
|
457
|
+
end
|
|
458
|
+
|
|
459
|
+
end
|
|
460
|
+
|
|
461
|
+
subject.validate_host(hosts, options)
|
|
462
|
+
|
|
463
|
+
end
|
|
464
|
+
|
|
440
465
|
it "can validate RHEL8 hosts" do
|
|
441
466
|
@platform = 'el-8-x86_x64'
|
|
442
467
|
|
|
@@ -450,6 +475,19 @@ describe Beaker do
|
|
|
450
475
|
subject.validate_host(hosts, options)
|
|
451
476
|
end
|
|
452
477
|
|
|
478
|
+
it "can validate Fedora hosts" do
|
|
479
|
+
@platform = 'fedora-32-x86_64'
|
|
480
|
+
|
|
481
|
+
hosts.each do |host|
|
|
482
|
+
fedora_packages.each do |pkg|
|
|
483
|
+
expect(host).to receive(:check_for_package).with(pkg).once.and_return(false)
|
|
484
|
+
expect(host).to receive(:install_package).with(pkg).once
|
|
485
|
+
end
|
|
486
|
+
end
|
|
487
|
+
|
|
488
|
+
subject.validate_host(hosts, options)
|
|
489
|
+
end
|
|
490
|
+
|
|
453
491
|
it 'skips validation on cisco hosts' do
|
|
454
492
|
@platform = 'cisco_nexus-7-x86_64'
|
|
455
493
|
expect( subject ).to receive( :check_and_install_packages_if_needed ).never
|