beaker-pe 1.19.0 → 1.20.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 +8 -8
- data/lib/beaker-pe/install/pe_utils.rb +76 -24
- data/lib/beaker-pe/version.rb +1 -1
- data/spec/beaker-pe/install/pe_utils_spec.rb +60 -4
- metadata +2 -2
checksums.yaml
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
---
|
|
2
2
|
!binary "U0hBMQ==":
|
|
3
3
|
metadata.gz: !binary |-
|
|
4
|
-
|
|
4
|
+
OWJmNzE1Yzg4ZjY5OTA2NmQ1ODUyNGU2ODkyNTQ4MWNlMzRhZmM5MA==
|
|
5
5
|
data.tar.gz: !binary |-
|
|
6
|
-
|
|
6
|
+
OGI4MzJjODkyYjQxNGI2MzMwZWNkMWYzOGVhN2RkNjYwOWRjZDc2MA==
|
|
7
7
|
SHA512:
|
|
8
8
|
metadata.gz: !binary |-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
9
|
+
ZTgyZDk2Yzc4OTBkZDY5Nzk2ZjcxZjZlYjU5OGNkMTUzOGJlYjJhNTA3Y2Y4
|
|
10
|
+
NDg5ZGNlNmZiYWIxZWM0MGQzNTQ3MmVhYmVmYjAyYTk4MDc3NDE1MmIzNWUz
|
|
11
|
+
N2VhMjNkMzIyMmQ2YWZlMWE1ZTM3ZTQ1MzA0ZmU1OTBlOGViNDI=
|
|
12
12
|
data.tar.gz: !binary |-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
13
|
+
MDdlMTk5ZTZhMzdlNmQxMDNkY2MyNTI1NTRjNmU4NTkxZDYxZTU4MzFmMWY4
|
|
14
|
+
MDU5Y2U2OThmNDZlYmU0Mjc5ZDAwOTc1N2E3M2M4YjhiYjgzYTI2MjNjNzcx
|
|
15
|
+
OTcxNTQyMGUwYmQ4OGNmYThhMzgzMTViNWIzNWE0MzY2NzdhOWM=
|
|
@@ -81,6 +81,68 @@ module Beaker
|
|
|
81
81
|
special_nodes + real_agents
|
|
82
82
|
end
|
|
83
83
|
|
|
84
|
+
# If host or opts has the :use_puppet_ca_cert flag set, then push the master's
|
|
85
|
+
# ca cert onto the given host at /etc/puppetlabs/puppet/ssl/certs/ca.pem.
|
|
86
|
+
#
|
|
87
|
+
# This in turn allows +frictionless_agent_installer_cmd+ to generate
|
|
88
|
+
# an install which references the cert to verify the master when downloading
|
|
89
|
+
# resources.
|
|
90
|
+
def install_ca_cert_on(host, opts)
|
|
91
|
+
if host[:use_puppet_ca_cert] || opts[:use_puppet_ca_cert]
|
|
92
|
+
@cert_cache_dir ||= Dir.mktmpdir("master_ca_cert")
|
|
93
|
+
local_cert_copy = "#{@cert_cache_dir}/ca.pem"
|
|
94
|
+
step "Copying master ca.pem to agent for secure frictionless install" do
|
|
95
|
+
ca_pem_dir = '/etc/puppetlabs/puppet/ssl/certs'
|
|
96
|
+
ca_pem_path = "#{ca_pem_dir}/ca.pem"
|
|
97
|
+
scp_from(master, ca_pem_path , @cert_cache_dir) unless File.exist?(local_cert_copy)
|
|
98
|
+
on(host, "mkdir -p #{ca_pem_dir}")
|
|
99
|
+
scp_to(host, local_cert_copy, ca_pem_dir)
|
|
100
|
+
end
|
|
101
|
+
end
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
# Generate the command line string needed to from a frictionless puppet-agent
|
|
105
|
+
# install on this host in a PE environment.
|
|
106
|
+
#
|
|
107
|
+
# @param [Host] host The host to install puppet-agent onto
|
|
108
|
+
# @param [Hash] opts The full beaker options
|
|
109
|
+
# @option opts [Boolean] :use_puppet_ca_cert (false) if true the
|
|
110
|
+
# command will reference the local puppet ca cert to verify the master
|
|
111
|
+
# when obtaining the installation script
|
|
112
|
+
# @param [String] pe_version The PE version string for capabilities testing
|
|
113
|
+
# @return [String] of the commands to be executed for the install
|
|
114
|
+
def frictionless_agent_installer_cmd(host, opts, pe_version)
|
|
115
|
+
# PE 3.4 introduced the ability to pass in config options to the bash
|
|
116
|
+
# script in the form of <section>:<key>=<value>
|
|
117
|
+
frictionless_install_opts = []
|
|
118
|
+
if host.has_key?('frictionless_options') and ! version_is_less(pe_version, '3.4.0')
|
|
119
|
+
# since we have options to pass in, we need to tell the bash script
|
|
120
|
+
host['frictionless_options'].each do |section, settings|
|
|
121
|
+
settings.each do |key, value|
|
|
122
|
+
frictionless_install_opts << "#{section}:#{key}=#{value}"
|
|
123
|
+
end
|
|
124
|
+
end
|
|
125
|
+
end
|
|
126
|
+
|
|
127
|
+
pe_debug = host[:pe_debug] || opts[:pe_debug] ? ' -x' : ''
|
|
128
|
+
use_puppet_ca_cert = host[:use_puppet_ca_cert] || opts[:use_puppet_ca_cert]
|
|
129
|
+
|
|
130
|
+
if host['platform'] =~ /windows/ then
|
|
131
|
+
cmd = %Q{powershell -c "cd #{host['working_dir']};[Net.ServicePointManager]::ServerCertificateValidationCallback = {\\$true};\\$webClient = New-Object System.Net.WebClient;\\$webClient.DownloadFile('https://#{master}:8140/packages/current/install.ps1', '#{host['working_dir']}/install.ps1');#{host['working_dir']}/install.ps1 -verbose #{frictionless_install_opts.join(' ')}"}
|
|
132
|
+
else
|
|
133
|
+
curl_opts = %w{--tlsv1 -O}
|
|
134
|
+
if use_puppet_ca_cert
|
|
135
|
+
curl_opts << '--cacert /etc/puppetlabs/puppet/ssl/certs/ca.pem'
|
|
136
|
+
elsif host['platform'] !~ /aix/
|
|
137
|
+
curl_opts << '-k'
|
|
138
|
+
end
|
|
139
|
+
|
|
140
|
+
cmd = "export FRICTIONLESS_TRACE=true; cd #{host['working_dir']} && curl #{curl_opts.join(' ')} https://#{master}:8140/packages/current/install.bash && bash#{pe_debug} install.bash #{frictionless_install_opts.join(' ')}".strip
|
|
141
|
+
end
|
|
142
|
+
|
|
143
|
+
return cmd
|
|
144
|
+
end
|
|
145
|
+
|
|
84
146
|
#Create the PE install command string based upon the host and options settings
|
|
85
147
|
# @param [Host] host The host that PE is to be installed on
|
|
86
148
|
# For UNIX machines using the full PE installer, the host object must have the 'pe_installer' field set correctly.
|
|
@@ -96,28 +158,7 @@ module Beaker
|
|
|
96
158
|
# Frictionless install didn't exist pre-3.2.0, so in that case we fall
|
|
97
159
|
# through and do a regular install.
|
|
98
160
|
if host['roles'].include? 'frictionless' and ! version_is_less(version, '3.2.0')
|
|
99
|
-
|
|
100
|
-
# of <section>:<key>=<value>
|
|
101
|
-
frictionless_install_opts = []
|
|
102
|
-
if host.has_key?('frictionless_options') and ! version_is_less(version, '3.4.0')
|
|
103
|
-
# since we have options to pass in, we need to tell the bash script
|
|
104
|
-
host['frictionless_options'].each do |section, settings|
|
|
105
|
-
settings.each do |key, value|
|
|
106
|
-
frictionless_install_opts << "#{section}:#{key}=#{value}"
|
|
107
|
-
end
|
|
108
|
-
end
|
|
109
|
-
end
|
|
110
|
-
|
|
111
|
-
pe_debug = host[:pe_debug] || opts[:pe_debug] ? ' -x' : ''
|
|
112
|
-
if host['platform'] =~ /windows/ then
|
|
113
|
-
"powershell -c \"cd #{host['working_dir']};[Net.ServicePointManager]::ServerCertificateValidationCallback = {\\$true};\\$webClient = New-Object System.Net.WebClient;\\$webClient.DownloadFile('https://#{master}:8140/packages/current/install.ps1', '#{host['working_dir']}/install.ps1');#{host['working_dir']}/install.ps1 -verbose #{frictionless_install_opts.join(' ')}\""
|
|
114
|
-
elsif host['platform'] =~ /aix/ then
|
|
115
|
-
curl_opts = '--tlsv1 -O'
|
|
116
|
-
"cd #{host['working_dir']} && curl #{curl_opts} https://#{master}:8140/packages/current/install.bash && bash#{pe_debug} install.bash #{frictionless_install_opts.join(' ')}".strip
|
|
117
|
-
else
|
|
118
|
-
curl_opts = '--tlsv1 -kO'
|
|
119
|
-
"cd #{host['working_dir']} && curl #{curl_opts} https://#{master}:8140/packages/current/install.bash && bash#{pe_debug} install.bash #{frictionless_install_opts.join(' ')}".strip
|
|
120
|
-
end
|
|
161
|
+
frictionless_agent_installer_cmd(host, opts, version)
|
|
121
162
|
elsif host['platform'] =~ /osx/
|
|
122
163
|
version = host['pe_ver'] || opts[:pe_ver]
|
|
123
164
|
pe_debug = host[:pe_debug] || opts[:pe_debug] ? ' -verboseR' : ''
|
|
@@ -295,7 +336,7 @@ module Beaker
|
|
|
295
336
|
end
|
|
296
337
|
end
|
|
297
338
|
|
|
298
|
-
#Classify the master so that it can deploy frictionless packages for a given host.
|
|
339
|
+
#Classify the master so that it can deploy frictionless packages for a given host.
|
|
299
340
|
#This function does nothing when using meep for classification.
|
|
300
341
|
# @param [Host] host The host to install pacakges for
|
|
301
342
|
# @api private
|
|
@@ -345,7 +386,16 @@ module Beaker
|
|
|
345
386
|
node_group['classes'][klass] = {}
|
|
346
387
|
|
|
347
388
|
_console_dispatcher.create_new_node_group_model(node_group)
|
|
348
|
-
|
|
389
|
+
# The puppet agent run that will download the agent tarballs to the master can sometimes fail with
|
|
390
|
+
# curl errors if there is a network hiccup. Use beakers `retry_on` method to retry up to
|
|
391
|
+
# three times to avoid failing the entire test pipeline due to a network blip
|
|
392
|
+
retry_opts = {
|
|
393
|
+
:desired_exit_codes => [0,2],
|
|
394
|
+
:max_retries => 3,
|
|
395
|
+
# Beakers retry_on method wants the verbose value to be a string, not a bool.
|
|
396
|
+
:verbose => 'true'
|
|
397
|
+
}
|
|
398
|
+
retry_on(master, puppet("agent -t"), retry_opts)
|
|
349
399
|
end
|
|
350
400
|
end
|
|
351
401
|
end
|
|
@@ -471,6 +521,7 @@ module Beaker
|
|
|
471
521
|
|
|
472
522
|
step "Install agents" do
|
|
473
523
|
block_on(agents, {:run_in_parallel => true}) do |host|
|
|
524
|
+
install_ca_cert_on(host, opts)
|
|
474
525
|
on(host, installer_cmd(host, opts))
|
|
475
526
|
end
|
|
476
527
|
end
|
|
@@ -571,6 +622,7 @@ module Beaker
|
|
|
571
622
|
if host['platform'] != master['platform'] # only need to do this if platform differs
|
|
572
623
|
deploy_frictionless_to_master(host)
|
|
573
624
|
end
|
|
625
|
+
install_ca_cert_on(host, opts)
|
|
574
626
|
on host, installer_cmd(host, opts)
|
|
575
627
|
configure_type_defaults_on(host)
|
|
576
628
|
elsif host['platform'] =~ /osx|eos/
|
data/lib/beaker-pe/version.rb
CHANGED
|
@@ -188,6 +188,62 @@ describe ClassMixedWithDSLInstallUtils do
|
|
|
188
188
|
end
|
|
189
189
|
end
|
|
190
190
|
|
|
191
|
+
describe 'frictionless_agent_installer_cmd' do
|
|
192
|
+
let(:host) do
|
|
193
|
+
the_host = unixhost.dup
|
|
194
|
+
the_host['roles'] = ['frictionless']
|
|
195
|
+
the_host
|
|
196
|
+
end
|
|
197
|
+
|
|
198
|
+
before(:each) do
|
|
199
|
+
expect( subject ).to receive( :master ).and_return( 'testmaster' )
|
|
200
|
+
end
|
|
201
|
+
|
|
202
|
+
it 'generates a unix PE frictionless install command without cert verification' do
|
|
203
|
+
expect( subject.frictionless_agent_installer_cmd( host, {}, '2016.4.0' ) ).to eq("export FRICTIONLESS_TRACE=true; cd /tmp && curl --tlsv1 -O -k https://testmaster:8140/packages/current/install.bash && bash install.bash")
|
|
204
|
+
end
|
|
205
|
+
|
|
206
|
+
it 'generates a unix PE frictionless install command with cert verification' do
|
|
207
|
+
host['use_puppet_ca_cert'] = true
|
|
208
|
+
expect( subject.frictionless_agent_installer_cmd( host, {}, '2016.4.0' ) ).to eq("export FRICTIONLESS_TRACE=true; cd /tmp && curl --tlsv1 -O --cacert /etc/puppetlabs/puppet/ssl/certs/ca.pem https://testmaster:8140/packages/current/install.bash && bash install.bash")
|
|
209
|
+
end
|
|
210
|
+
|
|
211
|
+
it 'generates a unix PE frictionless install command without cert verification on aix' do
|
|
212
|
+
host['platform'] = 'aix-61-power'
|
|
213
|
+
expect( subject.frictionless_agent_installer_cmd( host, {}, '2016.4.0' ) ).to eq("export FRICTIONLESS_TRACE=true; cd /tmp && curl --tlsv1 -O https://testmaster:8140/packages/current/install.bash && bash install.bash")
|
|
214
|
+
end
|
|
215
|
+
|
|
216
|
+
it 'generates a PS1 frictionless install command for windows' do
|
|
217
|
+
host['platform'] = 'windows-2012-64'
|
|
218
|
+
expect( subject.frictionless_agent_installer_cmd( host, {}, '2016.4.0' ) ).to eq(%q{powershell -c "cd /tmp;[Net.ServicePointManager]::ServerCertificateValidationCallback = {\\$true};\\$webClient = New-Object System.Net.WebClient;\\$webClient.DownloadFile('https://testmaster:8140/packages/current/install.ps1', '/tmp/install.ps1');/tmp/install.ps1 -verbose "})
|
|
219
|
+
end
|
|
220
|
+
end
|
|
221
|
+
|
|
222
|
+
describe 'install_ca_cert_on' do
|
|
223
|
+
let(:host) do
|
|
224
|
+
the_host = unixhost.dup
|
|
225
|
+
the_host['roles'] = ['frictionless']
|
|
226
|
+
the_host
|
|
227
|
+
end
|
|
228
|
+
|
|
229
|
+
before(:each) do
|
|
230
|
+
allow( subject ).to receive( :master ).and_return( 'testmaster' )
|
|
231
|
+
end
|
|
232
|
+
|
|
233
|
+
it 'installs ca.pem if use_puppet_ca_cert is true' do
|
|
234
|
+
host['use_puppet_ca_cert'] = true
|
|
235
|
+
expect(Dir).to receive(:mktmpdir).with('master_ca_cert').and_return('/tmp/master_ca_cert_random')
|
|
236
|
+
expect(subject).to receive(:on).with(host, 'mkdir -p /etc/puppetlabs/puppet/ssl/certs')
|
|
237
|
+
expect(subject).to receive(:scp_from).with('testmaster', '/etc/puppetlabs/puppet/ssl/certs/ca.pem', %r{/tmp/master_ca_cert_random})
|
|
238
|
+
expect(subject).to receive(:scp_to).with(host, %r{/tmp/master_ca_cert_random/ca.pem}, '/etc/puppetlabs/puppet/ssl/certs')
|
|
239
|
+
expect( subject.install_ca_cert_on(host, {}) )
|
|
240
|
+
end
|
|
241
|
+
|
|
242
|
+
it 'does nothing if use_puppet_ca_cert is false' do
|
|
243
|
+
expect( subject.install_ca_cert_on(host, {}) ).to be_nil
|
|
244
|
+
end
|
|
245
|
+
end
|
|
246
|
+
|
|
191
247
|
describe 'installer_cmd' do
|
|
192
248
|
|
|
193
249
|
it 'generates a unix PE install command for a unix host' do
|
|
@@ -203,7 +259,7 @@ describe ClassMixedWithDSLInstallUtils do
|
|
|
203
259
|
the_host['pe_ver'] = '3.8.0'
|
|
204
260
|
the_host['pe_installer'] = 'puppet-enterprise-installer'
|
|
205
261
|
the_host['roles'] = ['frictionless']
|
|
206
|
-
expect( subject.installer_cmd( the_host, {} ) ).to be === "cd /tmp && curl --tlsv1 -
|
|
262
|
+
expect( subject.installer_cmd( the_host, {} ) ).to be === "export FRICTIONLESS_TRACE=true; cd /tmp && curl --tlsv1 -O -k https://testmaster:8140/packages/current/install.bash && bash install.bash"
|
|
207
263
|
end
|
|
208
264
|
|
|
209
265
|
it 'generates a unix PE frictionless install command for a unix host with role "frictionless" and "frictionless_options"' do
|
|
@@ -213,7 +269,7 @@ describe ClassMixedWithDSLInstallUtils do
|
|
|
213
269
|
the_host['pe_installer'] = 'puppet-enterprise-installer'
|
|
214
270
|
the_host['roles'] = ['frictionless']
|
|
215
271
|
the_host['frictionless_options'] = { 'main' => { 'dns_alt_names' => 'puppet' } }
|
|
216
|
-
expect( subject.installer_cmd( the_host, {} ) ).to be === "cd /tmp && curl --tlsv1 -
|
|
272
|
+
expect( subject.installer_cmd( the_host, {} ) ).to be === "export FRICTIONLESS_TRACE=true; cd /tmp && curl --tlsv1 -O -k https://testmaster:8140/packages/current/install.bash && bash install.bash main:dns_alt_names=puppet"
|
|
217
273
|
end
|
|
218
274
|
|
|
219
275
|
it 'generates a osx PE install command for a osx host' do
|
|
@@ -250,7 +306,7 @@ describe ClassMixedWithDSLInstallUtils do
|
|
|
250
306
|
the_host['pe_installer'] = 'puppet-enterprise-installer'
|
|
251
307
|
the_host['roles'] = ['frictionless']
|
|
252
308
|
the_host[:pe_debug] = true
|
|
253
|
-
expect( subject.installer_cmd( the_host, {} ) ).to be === "cd /tmp && curl --tlsv1 -
|
|
309
|
+
expect( subject.installer_cmd( the_host, {} ) ).to be === "export FRICTIONLESS_TRACE=true; cd /tmp && curl --tlsv1 -O -k https://testmaster:8140/packages/current/install.bash && bash -x install.bash"
|
|
254
310
|
end
|
|
255
311
|
end
|
|
256
312
|
|
|
@@ -978,7 +1034,7 @@ describe ClassMixedWithDSLInstallUtils do
|
|
|
978
1034
|
let(:node_group) { {} }
|
|
979
1035
|
|
|
980
1036
|
before :each do
|
|
981
|
-
allow(subject).to receive(:
|
|
1037
|
+
allow(subject).to receive(:retry_on)
|
|
982
1038
|
|
|
983
1039
|
allow(subject).to receive(:hosts).and_return([master, agent])
|
|
984
1040
|
allow(Scooter::HttpDispatchers::ConsoleDispatcher).to receive(:new).and_return(dispatcher)
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: beaker-pe
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.
|
|
4
|
+
version: 1.20.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Puppetlabs
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2017-
|
|
11
|
+
date: 2017-07-12 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: rspec
|