beaker 4.3.0 → 4.4.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 42f1138cc5ec8c7a9061bc89231e3eaeb8eec7f8
4
- data.tar.gz: b9bc35774979598ad0b93cfc6034a5112a47c637
3
+ metadata.gz: 53eff8a2f49c2dc6d030c7c6032225500ba53bc5
4
+ data.tar.gz: 0a3ea2358e01984b5d63dc92c2594fca0aee0209
5
5
  SHA512:
6
- metadata.gz: 58a79da7a9579907481842211a661163c4fd82cf6f4da34c644e32997fb5c2193f7064cfce6832e014c4c9405163176898d4fe94593333530985bfa100bbb2a2
7
- data.tar.gz: 1ef6ae9adb6da65eb28bdc01c7e920b55d633debc1036dfe62d0778b852dbd5d3c394b2829e1709a934acb0f1f0138ca681f5d5324b92614263c4085cf2b4f7c
6
+ metadata.gz: 05ec5313fa43c0ebccad6f5c3957edd6e185c5f8e1f3468b760201b3ab8b2db6a683fbff91cd346cab9f85ccac2fea985ae932c03f1ea7d89ac4ce2173811d44
7
+ data.tar.gz: 4758fd7751f6ad3e5af51f07b74d093d1ddd445f030d82b7147b0f4b2f728b9bd1e77082c608af0608c555ae512583d1c1f5cdda6e1011d9de59484822d561d0
@@ -11,7 +11,19 @@ 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.3.0...master)
14
+ # [Unreleased](https://github.com/puppetlabs/beaker/compare/4.4.0...master)
15
+
16
+ # [4.4.0](https://github.com/puppetlabs/beaker/compare/4.3.0...4.4.0) - 2019.01.09
17
+
18
+ ### Added
19
+
20
+ - Return root considerations for appending on nexus devices (BKR-1526)
21
+ - Permit user environment on osx-10.14 (BKR-1534)
22
+ - Add host helpers for working with files (BKR-1560)
23
+
24
+ ### Changed
25
+
26
+ - Replace ntpdate with crony on RHEL-8 (BKR-1555)
15
27
 
16
28
  # [4.3.0](https://github.com/puppetlabs/beaker/compare/4.2.0...4.3.0) - 2018.12.12
17
29
 
@@ -462,6 +462,54 @@ module Beaker
462
462
  end
463
463
  end
464
464
 
465
+ # Check whether a file exists on the host
466
+ #
467
+ # @param host [Beaker::Host] The target host
468
+ # @param file_path [String] The absolute path of the file
469
+ #
470
+ # @return [Boolean] Whether the file exists on the host (using `test -f`)
471
+ def file_exists_on(host, file_path)
472
+ host.execute(%(test -f "#{file_path}"), accept_all_exit_codes: true) do |result|
473
+ return result.exit_code.zero?
474
+ end
475
+ end
476
+
477
+ # Check whether a directory exists on the host
478
+ #
479
+ # @param host [Beaker::Host] The target host
480
+ # @param dir_path [String] The absolute path of the directory
481
+ #
482
+ # @return [Boolean] Whether the directory exists on the host (using `test -d`)
483
+ def directory_exists_on(host, dir_path)
484
+ host.execute(%(test -d "#{dir_path}"), accept_all_exit_codes: true) do |result|
485
+ return result.exit_code.zero?
486
+ end
487
+ end
488
+
489
+ # Check whether a symlink exists on the host
490
+ #
491
+ # @param host [Beaker::Host] The target host
492
+ # @param link_path [String] The absolute path of the symlink
493
+ #
494
+ # @return [Boolean] Whether the symlink exists on the host (using `test -L`)
495
+ def link_exists_on(host, link_path)
496
+ host.execute(%(test -L "#{link_path}"), accept_all_exit_codes: true) do |result|
497
+ return result.exit_code.zero?
498
+ end
499
+ end
500
+
501
+ # Get the contents of a file on the host
502
+ #
503
+ # @param host [Beaker::Host] The target host
504
+ # @param file_path [String] The absoltue path to the file
505
+ #
506
+ # @return [String] The contents of the file
507
+ def file_contents_on(host, file_path)
508
+ host.execute(%(cat "#{file_path}"), acceptable_exit_codes: [0]) do |result|
509
+ return result.stdout
510
+ end
511
+ end
512
+
465
513
  #Run a curl command on the provided host(s)
466
514
  #
467
515
  # @param [Host, Array<Host>, String, Symbol] host One or more hosts to act upon,
@@ -94,8 +94,8 @@ module Cisco
94
94
  # @return [String] Command string as needed for this host
95
95
  def append_commands(command = '', user_ac = '', opts = {})
96
96
  command.gsub('"') {'\\"'}
97
- # vsh commands and ntpdate commands do not require an appended `"`
98
- return '"' unless command =~ /ntpdate|\/isan\/bin\/vsh/
97
+ # vsh commands, ntpdate or when user is root commands do not require an appended `"`
98
+ return '"' unless command =~ /ntpdate|\/isan\/bin\/vsh/ || self[:user] == 'root'
99
99
  end
100
100
 
101
101
  # Construct the environment string for this command
@@ -21,7 +21,7 @@ module Mac::Exec
21
21
  # (from {#ssh_service_restart})
22
22
  def ssh_permit_user_environment
23
23
  ssh_config_file = '/etc/sshd_config'
24
- ssh_config_file = '/private/etc/ssh/sshd_config' if self['platform'] =~ /osx-10\.*(11|12|13)/
24
+ ssh_config_file = '/private/etc/ssh/sshd_config' if self['platform'] =~ /osx-10\.*(11|12|13|14)/
25
25
 
26
26
  exec(Beaker::Command.new("echo '\nPermitUserEnvironment yes' >> #{ssh_config_file}"))
27
27
  ssh_service_restart()
@@ -12,6 +12,7 @@ module Beaker
12
12
  NTPSERVER = 'pool.ntp.org'
13
13
  SLEEPWAIT = 5
14
14
  TRIES = 5
15
+ RHEL8_PACKAGES = ['curl', 'chrony']
15
16
  UNIX_PACKAGES = ['curl', 'ntpdate']
16
17
  FREEBSD_PACKAGES = ['curl', 'perl5|perl']
17
18
  OPENBSD_PACKAGES = ['curl']
@@ -51,13 +52,15 @@ module Beaker
51
52
  logger.notify "NTP date succeeded on #{host}"
52
53
  else
53
54
  case
54
- when host['platform'] =~ /sles-/
55
- ntp_command = "sntp #{ntp_server}"
56
- when host['platform'] =~ /cisco_nexus/
57
- ntp_server = host.exec(Command.new("getent hosts #{NTPSERVER} | head -n1 |cut -d \" \" -f1"), :acceptable_exit_codes => [0]).stdout
58
- ntp_command = "sudo -E sh -c 'export DCOS_CONTEXT=2;/isan/bin/ntpdate -u -t 20 #{ntp_server}'"
59
- else
60
- ntp_command = "ntpdate -u -t 20 #{ntp_server}"
55
+ when host['platform'] =~ /el-8/
56
+ ntp_command = "chronyc add server #{ntp_server} prefer trust;chronyc makestep;chronyc burst 1/2"
57
+ when host['platform'] =~ /sles-/
58
+ ntp_command = "sntp #{ntp_server}"
59
+ when host['platform'] =~ /cisco_nexus/
60
+ ntp_server = host.exec(Command.new("getent hosts #{NTPSERVER} | head -n1 |cut -d \" \" -f1"), :acceptable_exit_codes => [0]).stdout
61
+ ntp_command = "sudo -E sh -c 'export DCOS_CONTEXT=2;/isan/bin/ntpdate -u -t 20 #{ntp_server}'"
62
+ else
63
+ ntp_command = "ntpdate -u -t 20 #{ntp_server}"
61
64
  end
62
65
  success=false
63
66
  try = 0
@@ -98,6 +101,8 @@ module Beaker
98
101
  logger = opts[:logger]
99
102
  block_on host do |host|
100
103
  case
104
+ when host['platform'] =~ /el-8/
105
+ check_and_install_packages_if_needed(host, RHEL8_PACKAGES)
101
106
  when host['platform'] =~ /sles-10/
102
107
  check_and_install_packages_if_needed(host, SLES10_PACKAGES)
103
108
  when host['platform'] =~ /sles-/
@@ -1,5 +1,5 @@
1
1
  module Beaker
2
2
  module Version
3
- STRING = '4.3.0'
3
+ STRING = '4.4.0'
4
4
  end
5
5
  end
@@ -107,6 +107,7 @@ module Cisco
107
107
 
108
108
  before :each do
109
109
  @platform = 'cisco_nexus-7-x86_64'
110
+ @options = { :user => 'non_root' }
110
111
  end
111
112
 
112
113
  it 'appends `"` for commands' do
@@ -115,6 +116,13 @@ module Cisco
115
116
  expect( answer_test ).to be === answer_correct
116
117
  end
117
118
 
119
+ it 'returns nil for root user commands' do
120
+ @options = { :user => 'root' }
121
+ answer_correct = nil
122
+ answer_test = host.append_commands( 'fake_command' )
123
+ expect( answer_test ).to be === answer_correct
124
+ end
125
+
118
126
  it 'returns nil when vsh command' do
119
127
  answer_correct = nil
120
128
  answer_test = host.append_commands( '/isan/bin/vsh -c foo' )
@@ -138,6 +146,7 @@ module Cisco
138
146
 
139
147
  before :each do
140
148
  @platform = 'cisco_ios_xr-6-x86_64'
149
+ @options = { :user => 'non_root' }
141
150
  end
142
151
 
143
152
  it 'appends `"` for commands' do
@@ -146,6 +155,13 @@ module Cisco
146
155
  expect( answer_test ).to be === answer_correct
147
156
  end
148
157
 
158
+ it 'returns nil for root user commands' do
159
+ @options = { :user => 'root' }
160
+ answer_correct = nil
161
+ answer_test = host.append_commands( 'fake_command' )
162
+ expect( answer_test ).to be === answer_correct
163
+ end
164
+
149
165
  it 'returns nil when vsh command' do
150
166
  answer_correct = nil
151
167
  answer_test = host.append_commands( '/isan/bin/vsh -c foo' )
@@ -11,6 +11,7 @@ describe Beaker do
11
11
  let( :windows_pkgs ) { Beaker::HostPrebuiltSteps::WINDOWS_PACKAGES }
12
12
  let( :unix_only_pkgs ) { Beaker::HostPrebuiltSteps::UNIX_PACKAGES }
13
13
  let( :sles_only_pkgs ) { Beaker::HostPrebuiltSteps::SLES_PACKAGES }
14
+ let( :rhel8_packages ) { Beaker::HostPrebuiltSteps::RHEL8_PACKAGES }
14
15
  let( :platform ) { @platform || 'unix' }
15
16
  let( :ip ) { "ip.address.0.0" }
16
17
  let( :stdout) { @stdout || ip }
@@ -149,6 +150,15 @@ describe Beaker do
149
150
 
150
151
  end
151
152
 
153
+ it "can sync time on RHEL8 hosts" do
154
+ hosts = make_hosts(:platform => 'el-8-x86_x64')
155
+ expect(Beaker::Command).to receive(:new)
156
+ .with("chronyc add server #{ntpserver} prefer trust;chronyc makestep;chronyc burst 1/2")
157
+ .exactly(3)
158
+ .times
159
+ subject.timesync(hosts, options)
160
+ end
161
+
152
162
  it "can set time server on unix hosts" do
153
163
  hosts = make_hosts( { :platform => 'unix' } )
154
164
 
@@ -177,6 +187,15 @@ describe Beaker do
177
187
  subject.timesync( hosts, options_ntp )
178
188
 
179
189
  end
190
+
191
+ it "can set time server on RHEL8 hosts" do
192
+ hosts = make_hosts(:platform => 'el-8-x86_x64')
193
+ expect(Beaker::Command).to receive(:new)
194
+ .with("chronyc add server #{ntpserver_set} prefer trust;chronyc makestep;chronyc burst 1/2")
195
+ .exactly(3)
196
+ .times
197
+ subject.timesync(hosts, options_ntp)
198
+ end
180
199
  end
181
200
 
182
201
  context "apt_get_update" do
@@ -445,6 +464,19 @@ describe Beaker do
445
464
 
446
465
  end
447
466
 
467
+ it "can validate RHEL8 hosts" do
468
+ @platform = 'el-8-x86_x64'
469
+
470
+ hosts.each do |host|
471
+ rhel8_packages.each do |pkg|
472
+ expect(host).to receive(:check_for_package).with(pkg).once.and_return(false)
473
+ expect(host).to receive(:install_package).with(pkg).once
474
+ end
475
+ end
476
+
477
+ subject.validate_host(hosts, options)
478
+ end
479
+
448
480
  it 'skips validation on cisco hosts' do
449
481
  @platform = 'cisco_nexus-7-x86_64'
450
482
  expect( subject ).to receive( :check_and_install_packages_if_needed ).never
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.3.0
4
+ version: 4.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Puppet
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-12-12 00:00:00.000000000 Z
11
+ date: 2019-01-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rspec