beaker-pe 1.26.0 → 1.27.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- NjRjNWVlOTY5MzVhNjQyZWJmNDE0OTU0OTQ5Mjc3NzIzOGNjNThjZA==
4
+ ZGIxMzQ2NjExMDg5MGJlODU2YWYxNmFiYTZjYmE0MDcxNTVkZGRjYw==
5
5
  data.tar.gz: !binary |-
6
- MTAzNDEyYTMzNzFmYmMzOTdmZDRiNjRmYWQ3ODhjYzdhOWY1YmIwOQ==
6
+ OGQzMmQ1N2FiNjNjNjMwYjIwYTdkZDIzMzgwYjkwMDNjOGU5ZmJlOQ==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- ZDQwMDdiZWI0NjliMzA1ZDQ5ZDJmNDcxMGFlNDUzNDA3MTI4ZThkMzRkM2E4
10
- NzQyYjE3NjlmMmY1OGY0ZWVmMTY4M2Q5NDEyN2MxM2JmY2FjN2Y3NzNiZTVh
11
- ZGUzOTZhNWI1MjdhYTk2MTEwNmJlZWY1Njg1YmRlZTI0ZmQ2NjE=
9
+ ZDc4N2Y3OTk3MTc3ZDMyMThiMTdjOGU5ZmY3MGYxYTdlMGYwM2EyNWE4NzRh
10
+ NzMyNTY5NzM4OTBjODgyMjc2ZjExMTFhZDQyZDc3ZDU3ZGJkZTc3ZWM5MTBh
11
+ ZWY1NTQ3M2NiNzAxYWFhMTFmZjk1NjQ1ZGVjOGNhMzAxYWFlZmQ=
12
12
  data.tar.gz: !binary |-
13
- OTBjNmY0MWI1NGIwNzU0MDVhNzhjNmI5MmJlNGFhNDNiOTkzNTI5MWFjYTBh
14
- OWY0ZjcxZGY2NWM2NGQxZmIyMzU0NzBlY2FlNWQxOWYxYzE1ZjQyYWU5ZWU3
15
- ZTAwMDAxOTU4ZGQ4YmQ5ZDJlZTMyYjZkZmMyMWU4ZTJmZWNjNzU=
13
+ Y2MwOWVhNjFiNzBhNzEwN2U5OGZlYzgwOWY1MGE0NTUxM2YyYWRlYmNjZGY5
14
+ YjE2MjM1NDdiOWU3NDgyNTk3YTZiYzZlZjlhN2RkMTIwZDdlYjVlOTU5MjA2
15
+ YjdiOTRjOGI2OTBiNDMyOTljNGIzNThlZjJmY2QyYTRiYzUwZWQ=
@@ -101,6 +101,30 @@ module Beaker
101
101
  end
102
102
  end
103
103
 
104
+ # Return agent nodes with 'lb_connect' role that are not loadbalancers
105
+ def loadbalancer_connecting_agents
106
+ lb_connect_nodes = select_hosts(roles: ['lb_connect'])
107
+ lb_connect_agents = lb_connect_nodes.reject { |h| h['roles'].include?('loadbalancer')}
108
+ end
109
+
110
+ # Returns true if loadbalncer exists and is configured with 'lb_connect' role
111
+ def lb_connect_loadbalancer_exists?
112
+ if any_hosts_as?('loadbalancer')
113
+ lb_node = select_hosts(roles: ['loadbalancer'])
114
+ lb_node.first['roles'].include?('lb_connect')
115
+ end
116
+ end
117
+
118
+ #Returns loadbalancer if host is an agent and loadbalancer has lb_connect role
119
+ #@param [Host] agent host with lb_connect role
120
+ def get_lb_downloadhost(host)
121
+ downloadhost = master
122
+ if !host['roles'].include?('loadbalancer') && lb_connect_loadbalancer_exists?
123
+ downloadhost = loadbalancer
124
+ end
125
+ downloadhost
126
+ end
127
+
104
128
  # Generate the command line string needed to from a frictionless puppet-agent
105
129
  # install on this host in a PE environment.
106
130
  #
@@ -124,6 +148,14 @@ module Beaker
124
148
  end
125
149
  end
126
150
 
151
+ # If this is an agent node configured to connect to the loadbalancer
152
+ # using 'lb_connect' role, then use loadbalancer in the download url
153
+ # instead of master
154
+ downloadhost = master
155
+ if host['roles'].include?('lb_connect')
156
+ downloadhost = get_lb_downloadhost(host)
157
+ end
158
+
127
159
  pe_debug = host[:pe_debug] || opts[:pe_debug] ? ' -x' : ''
128
160
  use_puppet_ca_cert = host[:use_puppet_ca_cert] || opts[:use_puppet_ca_cert]
129
161
 
@@ -135,7 +167,7 @@ module Beaker
135
167
  cert_validator = '[Net.ServicePointManager]::ServerCertificateValidationCallback = {\\$true}'
136
168
  end
137
169
 
138
- cmd = %Q{powershell -c "cd #{host['working_dir']};#{cert_validator};\\$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(' ')}"}
170
+ cmd = %Q{powershell -c "cd #{host['working_dir']};#{cert_validator};\\$webClient = New-Object System.Net.WebClient;\\$webClient.DownloadFile('https://#{downloadhost}:8140/packages/current/install.ps1', '#{host['working_dir']}/install.ps1');#{host['working_dir']}/install.ps1 -verbose #{frictionless_install_opts.join(' ')}"}
139
171
  else
140
172
  curl_opts = %w{--tlsv1 -O}
141
173
  if use_puppet_ca_cert
@@ -144,7 +176,7 @@ module Beaker
144
176
  curl_opts << '-k'
145
177
  end
146
178
 
147
- cmd = "FRICTIONLESS_TRACE='true'; export FRICTIONLESS_TRACE; 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
179
+ cmd = "FRICTIONLESS_TRACE='true'; export FRICTIONLESS_TRACE; cd #{host['working_dir']} && curl #{curl_opts.join(' ')} https://#{downloadhost}:8140/packages/current/install.bash && bash#{pe_debug} install.bash #{frictionless_install_opts.join(' ')}".strip
148
180
  end
149
181
 
150
182
  return cmd
@@ -376,33 +408,37 @@ module Beaker
376
408
  else
377
409
  _console_dispatcher = get_console_dispatcher_for_beaker_pe!
378
410
 
379
- # Check if we've already created a frictionless agent node group
380
- # to avoid errors creating the same node group when the beaker hosts file contains
381
- # multiple hosts with the same platform
382
- node_group = _console_dispatcher.get_node_group_by_name('Beaker Frictionless Agent')
383
- if node_group.nil? || node_group.empty?
384
- node_group = {}
385
- node_group['name'] = "Beaker Frictionless Agent"
386
- # Pin the master to the node
387
- node_group['rule'] = [ "and", [ '=', 'name', master.to_s ]]
388
- node_group['classes'] ||= {}
389
- end
411
+ # Add pe_repo packages to 'PE Master' group
412
+ node_group = _console_dispatcher.get_node_group_by_name('PE Master')
390
413
 
391
414
  # add the pe_repo platform class if it's not already present
392
- if ! node_group['classes'].include?(klass)
393
- node_group['classes'][klass] = {}
394
-
395
- _console_dispatcher.create_new_node_group_model(node_group)
396
- # The puppet agent run that will download the agent tarballs to the master can sometimes fail with
397
- # curl errors if there is a network hiccup. Use beakers `retry_on` method to retry up to
398
- # three times to avoid failing the entire test pipeline due to a network blip
399
- retry_opts = {
400
- :desired_exit_codes => [0,2],
401
- :max_retries => 3,
402
- # Beakers retry_on method wants the verbose value to be a string, not a bool.
403
- :verbose => 'true'
404
- }
405
- retry_on(master, puppet("agent -t"), retry_opts)
415
+ if node_group
416
+ if !node_group['classes'].include?(klass)
417
+ node_group['classes'][klass] = {}
418
+ _console_dispatcher.create_new_node_group_model(node_group)
419
+
420
+ # The puppet agent run that will download the agent tarballs to the master can sometimes fail with
421
+ # curl errors if there is a network hiccup. Use beakers `retry_on` method to retry up to
422
+ # three times to avoid failing the entire test pipeline due to a network blip
423
+ retry_opts = {
424
+ :desired_exit_codes => [0,2],
425
+ :max_retries => 3,
426
+ # Beakers retry_on method wants the verbose value to be a string, not a bool.
427
+ :verbose => 'true'
428
+ }
429
+ retry_on(master, puppet("agent -t"), retry_opts)
430
+
431
+ # If we are connecting through loadbalancer, download the agent tarballs to compile masters
432
+ if lb_connect_loadbalancer_exists?
433
+ hosts.each do |h|
434
+ if h['roles'].include?('compile_master')
435
+ retry_on(h, puppet("agent -t"), retry_opts)
436
+ end
437
+ end
438
+ end
439
+ end
440
+ else
441
+ raise "Failed to add pe_repo packages, PE Master node group is not available"
406
442
  end
407
443
  end
408
444
  end
@@ -507,7 +543,7 @@ module Beaker
507
543
  def simple_monolithic_install(master, agents, opts={})
508
544
  step "Performing a standard monolithic install with frictionless agents"
509
545
  all_hosts = [master, *agents]
510
- configure_type_defaults_on(all_hosts)
546
+ configure_type_defaults_on([master])
511
547
 
512
548
  # Set PE distribution on the agents, creates working directories
513
549
  prepare_hosts(all_hosts, opts)
@@ -518,41 +554,11 @@ module Beaker
518
554
  on master, installer_cmd(master, opts)
519
555
  end
520
556
 
521
- step "Setup frictionless installer on the master" do
522
- agents.each do |agent|
523
- # If We're *not* running the classic installer, we want
524
- # to make sure the master has packages for us.
525
- if agent['platform'] != master['platform'] # only need to do this if platform differs
526
- deploy_frictionless_to_master(agent)
527
- end
528
- end
529
- end
530
-
531
- step "Install agents" do
532
- block_on(agents, {:run_in_parallel => true}) do |host|
533
- install_ca_cert_on(host, opts)
534
- on(host, installer_cmd(host, opts))
535
- end
536
- end
537
-
538
- step "Sign agent certificates" do
539
- # This will sign all cert requests
540
- sign_certificate_for(agents)
541
- end
542
-
543
- step "Stop puppet agents to avoid interfering with tests" do
544
- stop_agent_on(all_hosts, :run_in_parallel => true)
545
- end
557
+ install_agents_only_on(agents, opts)
546
558
 
547
559
  step "Run puppet to setup mcollective and pxp-agent" do
548
560
  on(master, puppet_agent('-t'), :acceptable_exit_codes => [0,2])
549
561
  run_puppet_on_non_infrastructure_nodes(all_hosts)
550
-
551
- #Workaround for windows frictionless install, see BKR-943 for the reason
552
- agents.select {|agent| agent['platform'] =~ /windows/}.each do |agent|
553
- client_datadir = agent.puppet['client_datadir']
554
- on(agent, puppet("resource file \"#{client_datadir}\" ensure=absent force=true"))
555
- end
556
562
  end
557
563
 
558
564
  step "Run puppet a second time on the primary to populate services.conf (PE-19054)" do
@@ -1549,6 +1555,52 @@ module Beaker
1549
1555
  end
1550
1556
  end
1551
1557
  end
1558
+
1559
+ # Method to install just the agent nodes
1560
+ # This method can be called only after installing PE on infrastructure nodes
1561
+ # @param [Array] agent only nodes from Beaker hosts
1562
+ # @param [Hash] opts The Beaker options hash
1563
+ def install_agents_only_on(agent_nodes, opts)
1564
+ unless agent_nodes.empty?
1565
+ configure_type_defaults_on(agent_nodes)
1566
+
1567
+ step "Setup frictionless installer on the master" do
1568
+ agent_nodes.each do |agent|
1569
+ # If We're *not* running the classic installer, we want
1570
+ # to make sure the master has packages for us.
1571
+ if agent['platform'] != master['platform'] # only need to do this if platform differs
1572
+ deploy_frictionless_to_master(agent)
1573
+ end
1574
+ end
1575
+ end
1576
+
1577
+ step "Install agents" do
1578
+ block_on(agent_nodes, {:run_in_parallel => true}) do |host|
1579
+ install_ca_cert_on(host, opts)
1580
+ on(host, installer_cmd(host, opts))
1581
+ end
1582
+ end
1583
+
1584
+ step "Sign agent certificates" do
1585
+ # This will sign all cert requests
1586
+ sign_certificate_for(agent_nodes)
1587
+ end
1588
+
1589
+ step "Stop puppet agents to avoid interfering with tests" do
1590
+ stop_agent_on(agent_nodes, :run_in_parallel => true)
1591
+ end
1592
+
1593
+ step "Run puppet on all agent nodes" do
1594
+ on agent_nodes, puppet_agent('-t'), :acceptable_exit_codes => [0,2], :run_in_parallel => true
1595
+ end
1596
+
1597
+ #Workaround for windows frictionless install, see BKR-943
1598
+ agent_nodes.select {|agent| agent['platform'] =~ /windows/}.each do |agent|
1599
+ client_datadir = agent.puppet['client_datadir']
1600
+ on(agent, puppet("resource file \"#{client_datadir}\" ensure=absent force=true"))
1601
+ end
1602
+ end
1603
+ end
1552
1604
  end
1553
1605
  end
1554
1606
  end
@@ -3,7 +3,7 @@ module Beaker
3
3
  module PE
4
4
 
5
5
  module Version
6
- STRING = '1.26.0'
6
+ STRING = '1.27.0'
7
7
  end
8
8
 
9
9
  end
@@ -60,6 +60,17 @@ describe ClassMixedWithDSLInstallUtils do
60
60
  :working_dir => '/tmp',
61
61
  :dist => 'puppet-enterprise-3.7.1-rc0-78-gffc958f-eos-4-i386' } ) }
62
62
 
63
+ let(:lei_hosts) { make_hosts( { :pe_ver => '3.0',
64
+ :platform => 'linux',
65
+ :roles => [ 'agent' ],
66
+ :type => 'pe'}, 4 ) }
67
+ let(:lb_test_hosts) { lei_hosts[0][:roles] = ['master', 'database', 'dashboard']
68
+ lei_hosts[1][:roles] = ['loadbalancer', 'lb_connect']
69
+ lei_hosts[2][:roles] = ['compile_master']
70
+ lei_hosts[3][:roles] = ['frictionless', 'lb_connect']
71
+ lei_hosts[3][:working_dir] = '/tmp'
72
+ lei_hosts }
73
+
63
74
  context '#prep_host_for_upgrade' do
64
75
 
65
76
  it 'sets per host options before global options' do
@@ -188,6 +199,26 @@ describe ClassMixedWithDSLInstallUtils do
188
199
  end
189
200
  end
190
201
 
202
+ describe 'loadbalancer_connecting_agents' do
203
+ it 'no hosts are chosen if there are no agents with lb_connect role' do
204
+ allow( subject ).to receive(:hosts).and_return([])
205
+ end
206
+ it 'chooses agents with lb_connect role' do
207
+ allow( subject ).to receive(:lb_test_hosts).and_return([lb_test_hosts[3]])
208
+ end
209
+
210
+ end
211
+
212
+ describe 'get_lb_downloadhost' do
213
+ it 'choose lb_connect loadbalancer as downloadhost, if there is one' do
214
+ allow( subject ).to receive(:lb_test_hosts[3]).and_return([lb_test_hosts[1]])
215
+ end
216
+ it 'if there is no lb_connect loadbalancer, return master' do
217
+ lei_hosts[1][:roles] = ['loadbalancer']
218
+ allow( subject ).to receive(:lb_test_hosts[3]).and_return([lb_test_hosts[0]])
219
+ end
220
+ end
221
+
191
222
  describe 'frictionless_agent_installer_cmd' do
192
223
  let(:host) do
193
224
  the_host = unixhost.dup
@@ -265,6 +296,18 @@ describe ClassMixedWithDSLInstallUtils do
265
296
  "\""
266
297
  expect( subject.frictionless_agent_installer_cmd( host, {}, '2016.4.0' ) ).to eq(expecting)
267
298
  end
299
+
300
+ it 'generates a frictionless install command with loadbalancer as download host' do
301
+ hosts = lb_test_hosts
302
+ expect( subject ).to receive( :get_lb_downloadhost ).with(lb_test_hosts[3]).and_return( 'testloadbalancer' )
303
+ expecting = [
304
+ "FRICTIONLESS_TRACE='true'",
305
+ "export FRICTIONLESS_TRACE",
306
+ "cd /tmp && curl --tlsv1 -O -k https://testloadbalancer:8140/packages/current/install.bash && bash install.bash"
307
+ ].join("; ")
308
+
309
+ expect( subject.frictionless_agent_installer_cmd( lb_test_hosts[3], {}, '2016.4.0' ) ).to eq(expecting)
310
+ end
268
311
  end
269
312
 
270
313
  describe 'install_ca_cert_on' do
@@ -1079,8 +1122,9 @@ describe ClassMixedWithDSLInstallUtils do
1079
1122
  describe '#deploy_frictionless_to_master' do
1080
1123
  let(:master) { make_host('master', :pe_ver => '2017.2', :platform => 'ubuntu-16.04-x86_64', :roles => ['master', 'database', 'dashboard']) }
1081
1124
  let(:agent) { make_host('agent', :pe_ver => '2017.2', :platform => 'el-7-x86_64', :roles => ['frictionless']) }
1125
+ let(:compile_master) { make_host('agent', :pe_ver => '2017.2', :roles => ['frictionless', 'compile_master']) }
1082
1126
  let(:dispatcher) { double('dispatcher') }
1083
- let(:node_group) { {} }
1127
+ let(:node_group) { { 'classes' => {} } }
1084
1128
 
1085
1129
  before :each do
1086
1130
  allow(subject).to receive(:retry_on)
@@ -1090,12 +1134,12 @@ describe ClassMixedWithDSLInstallUtils do
1090
1134
 
1091
1135
  allow(dispatcher).to receive(:get_node_group_by_name).and_return(node_group)
1092
1136
  allow(dispatcher).to receive(:create_new_node_group_model) {|model| node_group.update(model)}
1137
+ allow(subject).to receive(:compile_masters).and_return([compile_master])
1093
1138
  end
1094
1139
 
1095
- it 'adds the right pe_repo class to the Beaker Frictionless Agent group' do
1140
+ it 'adds the right pe_repo class to the PE Master group' do
1096
1141
  subject.deploy_frictionless_to_master(agent)
1097
1142
 
1098
- expect(node_group['rule']).to eq(['and', ['=', 'name', 'master']])
1099
1143
  expect(node_group['classes']).to include('pe_repo::platform::el_7_x86_64')
1100
1144
  end
1101
1145
 
@@ -1449,6 +1493,7 @@ describe ClassMixedWithDSLInstallUtils do
1449
1493
  allow(subject).to receive(:prepare_host_installer_options)
1450
1494
  allow(subject).to receive(:generate_installer_conf_file_for)
1451
1495
  allow(subject).to receive(:deploy_frictionless_to_master)
1496
+ allow(subject).to receive(:install_agents_only_on)
1452
1497
 
1453
1498
  allow(subject).to receive(:installer_cmd).with(monolithic, anything()).and_return("install master")
1454
1499
  allow(subject).to receive(:installer_cmd).with(el_agent, anything()).and_return("install el agent")
@@ -1458,44 +1503,66 @@ describe ClassMixedWithDSLInstallUtils do
1458
1503
  allow(subject).to receive(:sign_certificate_for)
1459
1504
  end
1460
1505
 
1461
- describe 'configuring frictionless installer' do
1462
- it "skips the master's platform" do
1463
- expect(subject).not_to receive(:deploy_frictionless_to_master)
1464
-
1465
- subject.simple_monolithic_install(monolithic, [el_agent, el_agent, el_agent])
1466
- end
1467
-
1468
- it "adds frictionless install classes for other platforms" do
1469
- expect(subject).to receive(:deploy_frictionless_to_master).with(deb_agent)
1470
-
1471
- subject.simple_monolithic_install(monolithic, [el_agent, deb_agent])
1472
- end
1473
- end
1474
-
1475
1506
  it 'installs on the master then on the agents' do
1476
1507
  expect(subject).to receive(:on).with(monolithic, "install master").ordered
1477
- expect(subject).to receive(:block_on).with([el_agent, el_agent], :run_in_parallel => true).ordered
1478
-
1508
+ expect(subject).to receive(:install_agents_only_on).with([el_agent, el_agent], {}).ordered
1479
1509
  subject.simple_monolithic_install(monolithic, [el_agent, el_agent])
1480
1510
  end
1481
1511
 
1482
- it 'installs agents in parallel' do
1483
- expect(subject).to receive(:block_on).with([el_agent, el_agent, deb_agent, deb_agent], :run_in_parallel => true)
1512
+ it "calls prepare_hosts on all hosts instead of just master" do
1513
+ expect(subject).to receive(:prepare_hosts).with([monolithic] + [el_agent, el_agent, el_agent], {})
1514
+ subject.simple_monolithic_install(monolithic, [el_agent, el_agent, el_agent])
1515
+ end
1516
+ end
1484
1517
 
1485
- subject.simple_monolithic_install(monolithic, [el_agent, el_agent, deb_agent, deb_agent])
1518
+ describe 'install_agents_only_on' do
1519
+ let(:monolithic) { make_host('monolithic',
1520
+ :pe_ver => '2016.4',
1521
+ :platform => 'el-7-x86_64',
1522
+ :roles => ['master', 'database', 'dashboard']) }
1523
+ let(:agent) { make_host('agent',
1524
+ :pe_ver => '2016.4',
1525
+ :platform => 'el-7-x86_64',
1526
+ :roles => ['frictionless']) }
1527
+ before :each do
1528
+ allow(subject).to receive(:on)
1529
+ allow(subject).to receive(:hosts).and_return([monolithic, agent, agent])
1530
+ allow(subject).to receive(:configure_type_defaults_on)
1531
+ allow(subject).to receive(:deploy_frictionless_to_master)
1532
+ allow(subject).to receive(:stop_agent_on)
1533
+ allow(subject).to receive(:sign_certificate_for)
1534
+ allow(subject).to receive(:installer_cmd).with(agent, anything()).and_return("install agent")
1486
1535
  end
1487
1536
 
1488
- it 'signs certificates then stops agents to avoid interference with tests' do
1489
- agents = [el_agent, el_agent, deb_agent, deb_agent]
1490
- expect(subject).to receive(:sign_certificate_for).with(agents).ordered
1491
- expect(subject).to receive(:stop_agent_on).with([monolithic, *agents], :run_in_parallel => true).ordered
1537
+ it 'does not call deploy_frictionless_to_master if agent platform is same as master' do
1538
+ expect(subject).not_to receive(:deploy_frictionless_to_master)
1539
+ subject.install_agents_only_on([agent], opts)
1540
+ end
1492
1541
 
1493
- subject.simple_monolithic_install(monolithic, agents)
1542
+ it 'calls deploy_frictionless_to_master if agent platform is different from master' do
1543
+ agent['platform'] = 'deb-7-x86_64'
1544
+ expect(subject).to receive(:deploy_frictionless_to_master)
1545
+ subject.install_agents_only_on([agent], opts)
1494
1546
  end
1495
1547
 
1496
- it "calls prepare_hosts on all hosts instead of just master" do
1497
- expect(subject).to receive(:prepare_hosts).with([monolithic] + [el_agent, el_agent, el_agent], {})
1498
- subject.simple_monolithic_install(monolithic, [el_agent, el_agent, el_agent])
1548
+ it 'installs agent on agent hosts' do
1549
+ agents = [agent, agent]
1550
+ expect(subject).to receive(:block_on).with(agents, :run_in_parallel => true)
1551
+ subject.install_agents_only_on(agents, opts)
1552
+ end
1553
+
1554
+ it 'signs certificate and stops agent on agent host' do
1555
+ agents = [agent, agent]
1556
+ expect(subject).to receive(:sign_certificate_for).with(agents)
1557
+ expect(subject).to receive(:stop_agent_on).with(agents, :run_in_parallel => true)
1558
+ subject.install_agents_only_on(agents, opts)
1559
+ end
1560
+
1561
+ it 'runs puppet on agent hosts' do
1562
+ agents = [agent, agent]
1563
+ expect(subject).to receive(:on).with(agents, proc {
1564
+ |cmd| cmd.command == "puppet agent"}, hash_including(:run_in_parallel => true)).once
1565
+ subject.install_agents_only_on(agents, opts)
1499
1566
  end
1500
1567
  end
1501
1568
 
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.26.0
4
+ version: 1.27.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-23 00:00:00.000000000 Z
11
+ date: 2017-12-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rspec