beaker 4.16.0 → 4.17.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/CHANGELOG.md +8 -1
- data/CODEOWNERS +1 -0
- data/lib/beaker/dsl/helpers/host_helpers.rb +70 -11
- data/lib/beaker/host/unix/exec.rb +2 -2
- data/lib/beaker/host_prebuilt_steps.rb +1 -1
- data/lib/beaker/ssh_connection.rb +22 -12
- data/lib/beaker/version.rb +1 -1
- data/spec/beaker/host/unix/pkg_spec.rb +4 -0
- data/spec/helpers.rb +5 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 724a2edd64014e6c3c6632ed80a24aa1f4e0f01125c7b982aefdcafdeb9ad900
|
4
|
+
data.tar.gz: 8b61f356b1c6d1334e0b446f65cbbda6282df6b55d6bd233504b37942188c242
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4e10fa9a68e4c58564beb932c09b69dc690af1f0264977d4d723dcf49fa30183456b0ab46c08177ab30c5dde65dccb8a0b2347ee690a218d09c1bf03fbcd17dc
|
7
|
+
data.tar.gz: 4b6e854ad6713186601dff573c51397bcbfb47f07bb0d44fedbac8341d14313bf3b65168495e701a49e7d780bf922c9d2786f2f549027ec7e672d8382293bf80
|
data/CHANGELOG.md
CHANGED
@@ -11,7 +11,14 @@ Tracking in this Changelog began for this project in version 3.25.0.
|
|
11
11
|
If you're looking for changes from before this, refer to the project's
|
12
12
|
git logs & PR history.
|
13
13
|
|
14
|
-
# [Unreleased](https://github.com/puppetlabs/beaker/compare/4.
|
14
|
+
# [Unreleased](https://github.com/puppetlabs/beaker/compare/4.17.0...master)
|
15
|
+
|
16
|
+
# [4.17.0](https://github.com/puppetlabs/beaker/compare/4.16.0...4.17.0) - 2020-02-20
|
17
|
+
|
18
|
+
### Added
|
19
|
+
|
20
|
+
- Windows support in `host_helpers` ([#1622](https://github.com/puppetlabs/beaker/pull/1622))
|
21
|
+
- EL 8 support ([#1623](https://github.com/puppetlabs/beaker/pull/1623))
|
15
22
|
|
16
23
|
# [4.16.0](https://github.com/puppetlabs/beaker/compare/4.15.0...4.16.0) - 2020-02-05
|
17
24
|
|
data/CODEOWNERS
CHANGED
@@ -431,7 +431,7 @@ module Beaker
|
|
431
431
|
# @return nil
|
432
432
|
def add_system32_hosts_entry(host, opts = {})
|
433
433
|
if host.is_powershell?
|
434
|
-
hosts_file =
|
434
|
+
hosts_file = 'C:\Windows\System32\Drivers\etc\hosts'
|
435
435
|
host_entry = "#{opts['ip']}`t`t#{opts['name']}"
|
436
436
|
on host, powershell("\$text = \\\"#{host_entry}\\\"; Add-Content -path '#{hosts_file}' -value \$text")
|
437
437
|
else
|
@@ -462,6 +462,28 @@ module Beaker
|
|
462
462
|
end
|
463
463
|
end
|
464
464
|
|
465
|
+
# Return a Hash with the Alternate Data Stream (ADS) name as well as the
|
466
|
+
# base file path
|
467
|
+
#
|
468
|
+
# @param file_path [String] The full path with the ADS attached
|
469
|
+
#
|
470
|
+
# @return [Hash] The base file path and ADS name
|
471
|
+
def win_ads_path(file_path)
|
472
|
+
ads_path = {
|
473
|
+
path: file_path,
|
474
|
+
ads: nil
|
475
|
+
}
|
476
|
+
|
477
|
+
split_path = file_path.split(':')
|
478
|
+
|
479
|
+
if split_path.size > 2
|
480
|
+
ads_path[:ads] = split_path.pop
|
481
|
+
ads_path[:path] = split_path.join(':')
|
482
|
+
end
|
483
|
+
|
484
|
+
return ads_path
|
485
|
+
end
|
486
|
+
|
465
487
|
# Check whether a file exists on the host
|
466
488
|
#
|
467
489
|
# @param host [Beaker::Host] The target host
|
@@ -469,9 +491,22 @@ module Beaker
|
|
469
491
|
#
|
470
492
|
# @return [Boolean] Whether the file exists on the host (using `test -f`)
|
471
493
|
def file_exists_on(host, file_path)
|
472
|
-
host
|
473
|
-
|
494
|
+
if host['platform'] =~ /windows/
|
495
|
+
command = %(Test-Path #{file_path})
|
496
|
+
|
497
|
+
if file_path.include?(':')
|
498
|
+
split_path = win_ads_path(file_path)
|
499
|
+
|
500
|
+
command = %(Test-Path #{split_path[:path]})
|
501
|
+
command += %( -AND Get-Item -path #{split_path[:path]} -stream #{split_path[:ads]}) if split_path[:ads]
|
502
|
+
end
|
503
|
+
|
504
|
+
command = powershell(command)
|
505
|
+
else
|
506
|
+
command = %(test -f "#{file_path}")
|
474
507
|
end
|
508
|
+
|
509
|
+
return on(host, command, { :accept_all_exit_codes => true}).exit_code.zero?
|
475
510
|
end
|
476
511
|
|
477
512
|
# Check whether a directory exists on the host
|
@@ -481,9 +516,15 @@ module Beaker
|
|
481
516
|
#
|
482
517
|
# @return [Boolean] Whether the directory exists on the host (using `test -d`)
|
483
518
|
def directory_exists_on(host, dir_path)
|
484
|
-
host
|
485
|
-
|
519
|
+
if host['platform'] =~ /windows/
|
520
|
+
dir_path = "#{dir_path}\\" unless (dir_path[-1].chr == '\\')
|
521
|
+
|
522
|
+
command = Command.new(%{IF exist "#{dir_path}" ( exit 0 ) ELSE ( exit 1 )}, [], { :cmdexe => true })
|
523
|
+
else
|
524
|
+
command = Command.new(%(test -d "#{dir_path}"), [])
|
486
525
|
end
|
526
|
+
|
527
|
+
return on(host, command, { :accept_all_exit_codes => true }).exit_code.zero?
|
487
528
|
end
|
488
529
|
|
489
530
|
# Check whether a symlink exists on the host
|
@@ -493,9 +534,10 @@ module Beaker
|
|
493
534
|
#
|
494
535
|
# @return [Boolean] Whether the symlink exists on the host (using `test -L`)
|
495
536
|
def link_exists_on(host, link_path)
|
496
|
-
|
497
|
-
|
498
|
-
|
537
|
+
# Links are weird on windows, fall back to seeing if the file exists
|
538
|
+
return file_exists_on(host, link_path) if host['platform'] =~ /windows/
|
539
|
+
|
540
|
+
return on(host, Command.new(%(test -L "#{link_path}"), accept_all_exit_codes: true)).exit_code.zero?
|
499
541
|
end
|
500
542
|
|
501
543
|
# Get the contents of a file on the host
|
@@ -505,12 +547,29 @@ module Beaker
|
|
505
547
|
#
|
506
548
|
# @return [String] The contents of the file
|
507
549
|
def file_contents_on(host, file_path)
|
508
|
-
|
509
|
-
|
550
|
+
file_contents = nil
|
551
|
+
|
552
|
+
split_path = win_ads_path(file_path)
|
553
|
+
|
554
|
+
if file_exists_on(host, split_path[:path])
|
555
|
+
if host['platform'] =~ /windows/
|
556
|
+
file_path.gsub!('/', '\\')
|
557
|
+
|
558
|
+
command = %{Get-Content -Raw -Path #{file_path}}
|
559
|
+
command += %{ -Stream #{split_path[:ads]}} if split_path[:ads]
|
560
|
+
|
561
|
+
file_contents = on(host, powershell(command))&.stdout&.strip
|
562
|
+
else
|
563
|
+
file_contents = on(host, %(cat "#{file_path}"))&.stdout&.strip
|
564
|
+
end
|
565
|
+
else
|
566
|
+
logger.warn("File '#{file_path}' on '#{host} does not exist")
|
510
567
|
end
|
568
|
+
|
569
|
+
return file_contents
|
511
570
|
end
|
512
571
|
|
513
|
-
#Run a curl command on the provided host(s)
|
572
|
+
# Run a curl command on the provided host(s)
|
514
573
|
#
|
515
574
|
# @param [Host, Array<Host>, String, Symbol] host One or more hosts to act upon,
|
516
575
|
# or a role (String or Symbol) that identifies one or more hosts.
|
@@ -226,7 +226,7 @@ module Unix::Exec
|
|
226
226
|
case self['platform']
|
227
227
|
when /debian|ubuntu|cumulus|huaweios/
|
228
228
|
exec(Beaker::Command.new("service ssh restart"))
|
229
|
-
when /el-7|centos-7|redhat-7|oracle-7|scientific-7|eos-7|fedora-(1[4-9]|2[0-9]|3[0-9])|archlinux-/
|
229
|
+
when /el-7|centos-7|redhat-7|oracle-7|scientific-7|eos-7|el-8|centos-8|redhat-8|oracle-8|fedora-(1[4-9]|2[0-9]|3[0-9])|archlinux-/
|
230
230
|
exec(Beaker::Command.new("systemctl restart sshd.service"))
|
231
231
|
when /el-|centos|fedora|redhat|oracle|scientific|eos/
|
232
232
|
exec(Beaker::Command.new("/sbin/service sshd restart"))
|
@@ -252,7 +252,7 @@ module Unix::Exec
|
|
252
252
|
directory = tmpdir()
|
253
253
|
exec(Beaker::Command.new("echo 'PermitUserEnvironment yes' | cat - /etc/ssh/sshd_config > #{directory}/sshd_config.permit"))
|
254
254
|
exec(Beaker::Command.new("mv #{directory}/sshd_config.permit /etc/ssh/sshd_config"))
|
255
|
-
when /el-7|centos-7|redhat-7|oracle-7|scientific-7|eos-7/
|
255
|
+
when /el-7|centos-7|redhat-7|oracle-7|scientific-7|eos-7|el-8|centos-8|redhat-8|oracle-8/
|
256
256
|
directory = tmpdir()
|
257
257
|
exec(Beaker::Command.new("echo 'PermitUserEnvironment yes' | cat - /etc/ssh/sshd_config > #{directory}/sshd_config.permit"))
|
258
258
|
exec(Beaker::Command.new("mv #{directory}/sshd_config.permit /etc/ssh/sshd_config"))
|
@@ -450,7 +450,7 @@ module Beaker
|
|
450
450
|
#restart sshd
|
451
451
|
if host['platform'] =~ /debian|ubuntu|cumulus/
|
452
452
|
host.exec(Command.new("sudo su -c \"service ssh restart\""), {:pty => true})
|
453
|
-
elsif host['platform'] =~ /arch|centos-7|el-7|redhat-7|fedora-(1[4-9]|2[0-9]|3[0-9])/
|
453
|
+
elsif host['platform'] =~ /arch|centos-7|el-7|redhat-7|centos-8|el-8|redhat-8|fedora-(1[4-9]|2[0-9]|3[0-9])/
|
454
454
|
host.exec(Command.new("sudo -E systemctl restart sshd.service"), {:pty => true})
|
455
455
|
elsif host['platform'] =~ /centos|el-|redhat|fedora|eos/
|
456
456
|
host.exec(Command.new("sudo -E /sbin/service sshd reload"), {:pty => true})
|
@@ -69,19 +69,21 @@ module Beaker
|
|
69
69
|
begin
|
70
70
|
@logger.debug "Attempting ssh connection to #{host}, user: #{user}, opts: #{ssh_opts}"
|
71
71
|
Net::SSH.start(host, user, ssh_opts)
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
72
|
+
rescue *RETRYABLE_EXCEPTIONS => e
|
73
|
+
if try <= max_connection_tries
|
74
|
+
@logger.warn "Try #{try} -- Host #{host} unreachable: #{e.class.name} - #{e.message}" unless options[:silent]
|
75
|
+
@logger.warn "Trying again in #{wait} seconds" unless options[:silent]
|
76
|
+
|
77
|
+
sleep wait
|
77
78
|
(last_wait, wait) = wait, last_wait + wait
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
79
|
+
try += 1
|
80
|
+
|
81
|
+
retry
|
82
|
+
else
|
83
|
+
@logger.warn "Failed to connect to #{host}, after #{try} attempts" unless options[:silent]
|
84
|
+
nil
|
85
|
+
end
|
86
|
+
end
|
85
87
|
end
|
86
88
|
|
87
89
|
# Connect to the host, creating a new connection if required
|
@@ -287,6 +289,10 @@ module Beaker
|
|
287
289
|
result.stdout = "\n"
|
288
290
|
|
289
291
|
begin
|
292
|
+
# This is probably windows with an environment variable so we need to
|
293
|
+
# expand it.
|
294
|
+
target = self.execute(%{echo "#{target}"}).output.strip.gsub('"','') if target.include?('%')
|
295
|
+
|
290
296
|
@ssh.scp.upload! source, target, local_opts do |ch, name, sent, total|
|
291
297
|
result.stdout << "\tcopying %s: %10d/%d\n" % [name, sent, total]
|
292
298
|
end
|
@@ -319,6 +325,10 @@ module Beaker
|
|
319
325
|
result.stdout = "\n"
|
320
326
|
|
321
327
|
begin
|
328
|
+
# This is probably windows with an environment variable so we need to
|
329
|
+
# expand it.
|
330
|
+
source = self.execute(%{echo "#{source}"}).output.strip.gsub('"','') if source.include?('%')
|
331
|
+
|
322
332
|
@ssh.scp.download! source, target, local_opts do |ch, name, sent, total|
|
323
333
|
result.stdout << "\tcopying %s: %10d/%d\n" % [name, sent, total]
|
324
334
|
end
|
data/lib/beaker/version.rb
CHANGED
@@ -303,6 +303,10 @@ module Beaker
|
|
303
303
|
'oracle-7-x86_64' => ["el/7/#{puppet_collection}/x86_64", "puppet-agent-#{puppet_agent_version}-1.el7.x86_64.rpm"],
|
304
304
|
'redhat-7-x86_64' => ["el/7/#{puppet_collection}/x86_64", "puppet-agent-#{puppet_agent_version}-1.el7.x86_64.rpm"],
|
305
305
|
'scientific-7-x86_64' => ["el/7/#{puppet_collection}/x86_64", "puppet-agent-#{puppet_agent_version}-1.el7.x86_64.rpm"],
|
306
|
+
'el-8-x86_64' => ["el/8/#{puppet_collection}/x86_64", "puppet-agent-#{puppet_agent_version}-1.el8.x86_64.rpm"],
|
307
|
+
'centos-8-x86_64' => ["el/8/#{puppet_collection}/x86_64", "puppet-agent-#{puppet_agent_version}-1.el8.x86_64.rpm"],
|
308
|
+
'oracle-8-x86_64' => ["el/8/#{puppet_collection}/x86_64", "puppet-agent-#{puppet_agent_version}-1.el8.x86_64.rpm"],
|
309
|
+
'redhat-8-x86_64' => ["el/8/#{puppet_collection}/x86_64", "puppet-agent-#{puppet_agent_version}-1.el8.x86_64.rpm"],
|
306
310
|
}
|
307
311
|
platforms.each do |p, v|
|
308
312
|
it "accomodates platform #{p} without erroring" do
|
data/spec/helpers.rb
CHANGED
@@ -137,7 +137,11 @@ module PlatformHelpers
|
|
137
137
|
'redhat-7',
|
138
138
|
'oracle-7',
|
139
139
|
'scientific-7',
|
140
|
-
'eos-7'
|
140
|
+
'eos-7',
|
141
|
+
'el-8',
|
142
|
+
'centos-8',
|
143
|
+
'redhat-8',
|
144
|
+
'oracle-8'].concat(FEDORASYSTEMD)
|
141
145
|
|
142
146
|
FEDORASYSTEMV = (1..13).to_a.collect! { |i| "fedora-#{i}" }
|
143
147
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: beaker
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 4.
|
4
|
+
version: 4.17.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Puppet
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-02-
|
11
|
+
date: 2020-02-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rspec
|