beaker 2.17.0 → 2.18.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 CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- YjMwMzYyMmMwOThkODRiYzdjZjgwNTVkYjA0NmMzNGY0NWIyZDc1Yg==
4
+ ZmM2NTk1MjNkOGFiMGQ2ZDM3MGYxZjcxNDcxNzU1MTliMTAyOWMxMQ==
5
5
  data.tar.gz: !binary |-
6
- MDZlZmUxYzc2ZDhkMWY2MDY2NjU0ODUyYzJkYjhiZWJiZWU2OGI2Mw==
6
+ OTlhMDZiNzc1MTAxODg4ODk4OGEzMzA1MmMzZDA0Mzc5NmRlYmRjNA==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- MWVhZmE0MjA1MWRhZThhNzAxZGVjMmM3YTUwMjRjYzhjN2NhOTg3N2IwODU1
10
- NTU2ODc4Y2U3NmMyNTRkMjhlMWUyMDUzZWZkMTYzOGM3ZTRiNWM3NjA2Mzg2
11
- MmY4ZGI1MDU1ZmUyZTBjYTM0NDE5NzY1MGEwNjM4NWYzNDhmNTA=
9
+ OTZhYzg1Njk2NGJkZGM1NDY5MDAwYTQ5Njg1ZTQ4YzFlNWZlYjdiYWY0NWZm
10
+ ODRhMjM1NGQxOWFjMmZmMzdiMmQwYzUyMWY4YTlmNGRmYzdlNDM5YTI5OGIw
11
+ N2Q5ZGNlNzJiNTAzM2EzYjc3NWQzNTU1ZWZmOWY1ZDIyMjM0Y2Y=
12
12
  data.tar.gz: !binary |-
13
- NzE0OWNkMTBmNGRiYmQ0YmVjMDZjMTViYmNjNzBjMTY4OTMwNDViZWUwOThm
14
- NzI5MjhmZTA1M2QwMzJjYmQwMDcyM2IwZmU0NjEzMjg5MmY5NjliMGE2ZDky
15
- MWE0YTI2MDQ4MWY1ZTY3OGMzOTNmNjc3YjI1ZTVjOThlNzM3MWI=
13
+ YzFjMTMyMWI0NWU5ZmIzMmE1NTA5YTRiZjVkNzcwMGRjOWFiMDNiNTZhZDZh
14
+ YmEzZWJiNmMyMmY4MTllZTZhOTBlMjk3M2Q5ZmFiNWU4MzcwZWE0N2EwMTll
15
+ NDA1Y2NkYTliYTE2NDczNWJjODE0ZTM0MTdmMmExNjk3NWM0NTE=
data/HISTORY.md CHANGED
@@ -1,6 +1,7 @@
1
1
  # default - History
2
2
  ## Tags
3
- * [LATEST - 10 Jul, 2015 (745d9116)](#LATEST)
3
+ * [LATEST - 13 Jul, 2015 (268ce21e)](#LATEST)
4
+ * [2.17.0 - 10 Jul, 2015 (aaac4771)](#2.17.0)
4
5
  * [2.16.0 - 6 Jul, 2015 (b3e76227)](#2.16.0)
5
6
  * [2.15.1 - 1 Jul, 2015 (cd6f0bab)](#2.15.1)
6
7
  * [2.15.0 - 1 Jul, 2015 (07c416fb)](#2.15.0)
@@ -86,7 +87,83 @@
86
87
  * [pe1.2 - 6 Sep, 2011 (ba3dadd2)](#pe1.2)
87
88
 
88
89
  ## Details
89
- ### <a name = "LATEST">LATEST - 10 Jul, 2015 (745d9116)
90
+ ### <a name = "LATEST">LATEST - 13 Jul, 2015 (268ce21e)
91
+
92
+ * (GEM) update beaker version to 2.18.0 (268ce21e)
93
+
94
+ * Merge pull request #887 from kevpl/bkr394_aio_mixedinstall (28f9d26d)
95
+
96
+
97
+ ```
98
+ Merge pull request #887 from kevpl/bkr394_aio_mixedinstall
99
+
100
+ (BKR-394) added support for 3.8/AIO mixed installations
101
+ ```
102
+ * Merge pull request #888 from justinstoller/maint/master/BKR-397_use_yum (a76abdd9)
103
+
104
+
105
+ ```
106
+ Merge pull request #888 from justinstoller/maint/master/BKR-397_use_yum
107
+
108
+ (BKR-397) Use yum for installing pe promoted puppet-agent
109
+ ```
110
+ * (BKR-397) Use yum for installing pe promoted puppet-agent (d6d37145)
111
+
112
+
113
+ ```
114
+ (BKR-397) Use yum for installing pe promoted puppet-agent
115
+
116
+ Previously we used the rpm command to install a local rpm file. However
117
+ puppet-agent requires dmidecode for EL platforms and this dependency
118
+ won't be resolved by using rpm.
119
+
120
+ This commit uses yum's localinstal command to install the local rpm file
121
+ so that dependencies are resolved.
122
+ ```
123
+ * Merge pull request #858 from spjmurray/openstack_cinder_volumes (f5ecb177)
124
+
125
+
126
+ ```
127
+ Merge pull request #858 from spjmurray/openstack_cinder_volumes
128
+
129
+ (BKR-347) Openstack: Add support for cinder attached volumes
130
+ ```
131
+ * (BKR-394) added support for 3.8/AIO mixed installations (d715cb1d)
132
+
133
+ * Merge pull request #881 from anodelman/env-support (788aae5c)
134
+
135
+
136
+ ```
137
+ Merge pull request #881 from anodelman/env-support
138
+
139
+ (BKR-387) environment not being preserved between ssh connections...
140
+ ```
141
+ * (BKR-387) environment not being preserved between ssh connections... (41e64c50)
142
+
143
+
144
+ ```
145
+ (BKR-387) environment not being preserved between ssh connections...
146
+
147
+ ... on debian
148
+
149
+ - mirror the env to /etc/profile.d/beaker_env.sh
150
+ - add and acceptance test to ensure that environment variables are
151
+ preserved between ssh connections for a SUT
152
+ ```
153
+ * (BKR-347) Openstack: Add support for cinder attached volumes (4c2c5f23)
154
+
155
+
156
+ ```
157
+ (BKR-347) Openstack: Add support for cinder attached volumes
158
+
159
+ Implement the storage array feature introduced for vagrant virtual box
160
+ to OpenStack users. Unlike virtual box the bus type is outside of our
161
+ control. If you need SCSI support this must be attached to the image
162
+ in glance. How to do this is in the method documentation
163
+ ```
164
+ ### <a name = "2.17.0">2.17.0 - 10 Jul, 2015 (aaac4771)
165
+
166
+ * (HISTORY) update beaker history for gem release 2.17.0 (aaac4771)
90
167
 
91
168
  * (GEM) update beaker version to 2.17.0 (745d9116)
92
169
 
@@ -42,6 +42,25 @@ hosts.each do |host|
42
42
  assert_match(/TEST=3(;|:)2(;|:)1$/, val, "add_env_var can correctly add env vars")
43
43
  end
44
44
 
45
+ step "#add_env_var : can preserve an environment between ssh connections"
46
+ hosts.each do |host|
47
+ host.clear_env_var("test")
48
+ logger.debug("add TEST=1")
49
+ host.add_env_var("TEST", "1")
50
+ logger.debug("add TEST=1 again (shouldn't create duplicate entry)")
51
+ host.add_env_var("test", "1")
52
+ logger.debug("add test=2")
53
+ host.add_env_var("test", "2")
54
+ logger.debug("ensure that TEST env var has correct setting")
55
+ logger.debug("add test=3")
56
+ host.add_env_var("test", "3")
57
+ logger.debug("close the connection")
58
+ host.close
59
+ logger.debug("ensure that TEST env var has correct setting")
60
+ val = host.get_env_var("test")
61
+ assert_match(/TEST=3(;|:)2(;|:)1$/, val, "can preserve an environment between ssh connections")
62
+ end
63
+
45
64
  step "#delete_env_var : can delete an environment"
46
65
  hosts.each do |host|
47
66
  logger.debug("remove TEST=3")
@@ -10,6 +10,7 @@ module Beaker
10
10
  #
11
11
  AIO_DEFAULTS = {
12
12
  'unix' => {
13
+ 'puppetservice' => 'pe-puppetserver',
13
14
  'puppetbindir' => '/opt/puppetlabs/bin',
14
15
  'privatebindir' => '/opt/puppetlabs/puppet/bin',
15
16
  'distmoduledir' => '/etc/puppetlabs/code/modules',
@@ -1143,7 +1143,7 @@ module Beaker
1143
1143
  case variant
1144
1144
  when /^(fedora|el|centos|sles)$/
1145
1145
  on host, "tar -zxvf #{onhost_copied_download} -C #{onhost_copy_base}"
1146
- on host, "rpm -ivh #{onhost_copied_file}"
1146
+ on host, "yum --nogpgcheck localinstall -y #{onhost_copied_file}"
1147
1147
  when /^(debian|ubuntu|cumulus)$/
1148
1148
  on host, "tar -zxvf #{onhost_copied_download} -C #{onhost_copy_base}"
1149
1149
  on host, "dpkg -i --force-all #{onhost_copied_file}"
@@ -32,7 +32,7 @@ module Beaker
32
32
  'puppetbin' => '/opt/puppet/bin/puppet',
33
33
  'puppetbindir' => '/opt/puppet/bin',
34
34
  'puppetsbindir' => '/opt/puppet/sbin',
35
- 'privatebindir' => '/opt/puppetlabs/puppet/bin',
35
+ 'privatebindir' => '/opt/puppet/bin',
36
36
  'puppetvardir' => '/var/opt/lib/pe-puppet',
37
37
  'hieradatadir' => '/var/lib/hiera',
38
38
  'hieraconf' => '/etc/puppetlabs/puppet/hiera.yaml',
@@ -26,9 +26,7 @@ module Beaker
26
26
  # or a role (String or Symbol) that identifies one or more hosts.
27
27
  def configure_pe_defaults_on( hosts )
28
28
  block_on hosts do |host|
29
- if (not_controller(host) && host[:pe_ver] && (not version_is_less(host[:pe_ver], '4.0'))) \
30
- or (host['type'] && host['type'] =~ /aio/)
31
- # add pe defaults to host
29
+ if host[:pe_ver] && aio_version?(host) or (host['type'] && host['type'] =~ /aio/)
32
30
  add_aio_defaults_on(host)
33
31
  else
34
32
  add_pe_defaults_on(host)
@@ -502,6 +500,10 @@ module Beaker
502
500
  # @note should only be called against versions 4.0+, as this method
503
501
  # assumes AIO packages will be required.
504
502
  #
503
+ # @note agent_only hosts with the :pe_ver setting < 4.0 will not be
504
+ # included in the agent_only array, as AIO install can only happen
505
+ # in versions > 4.0
506
+ #
505
507
  # @api private
506
508
  # @return [Array<Host>, Array<Host>]
507
509
  # the array of hosts to do an agent_only install on and
@@ -512,7 +514,11 @@ module Beaker
512
514
  non_agent_only_roles = %w(master database dashboard console frictionless)
513
515
  hosts.each do |host|
514
516
  if host['roles'].none? {|role| non_agent_only_roles.include?(role) }
515
- hosts_agent_only << host
517
+ if !aio_version?(host)
518
+ hosts_not_agent_only << host
519
+ else
520
+ hosts_agent_only << host
521
+ end
516
522
  else
517
523
  hosts_not_agent_only << host
518
524
  end
@@ -107,15 +107,37 @@ module Beaker
107
107
 
108
108
  # Determine if this host is exclusively an agent (only has a single role 'agent')
109
109
  #
110
- #
111
- # @return [Boolean] True if agent-only, false otherwise
110
+ # @param [Host] host Beaker host to check
112
111
  #
113
112
  # @example Basic usage
114
113
  # if agent_only(host)
115
114
  # puts "this host is ONLY an agent!"
116
115
  # end
116
+ #
117
+ # @return [Boolean] True if agent-only, false otherwise
117
118
  def agent_only(host)
118
- host['roles'].length == 1 && host['roles'].include?('agent')
119
+ host['roles'].length == 1 && host['roles'].include?('agent')
120
+ end
121
+
122
+ # Determine whether a host has an AIO version or not. If a host :pe_ver
123
+ # is not specified, then it is open-ended, and as such, can be an AIO
124
+ # version depending on the context.
125
+ #
126
+ # @note aio version is just a base-line condition. If you want to check
127
+ # that a host is an aio agent, refer to {#aio_agent?}.
128
+ #
129
+ # @return [Boolean] whether or not a host is AIO-capable
130
+ def aio_version?(host)
131
+ return !( host[:pe_ver] && version_is_less(host[:pe_ver], '4.0') )
132
+ end
133
+
134
+ # Determine if the host is an AIO agent
135
+ #
136
+ # @param [Host] host Beaker host to check
137
+ #
138
+ # @return [Boolean] whether this host is an AIO agent or not
139
+ def aio_agent?(host)
140
+ aio_version?(host) && agent_only(host)
119
141
  end
120
142
 
121
143
  #Create a new role method for a given arbitrary role name. Makes it possible to be able to run
@@ -70,10 +70,10 @@ module Unix::Exec
70
70
  end
71
71
 
72
72
  # Converts the provided environment file to a new shell script in /etc/profile.d, then sources that file.
73
- # This is for sles based hosts.
73
+ # This is for sles and debian based hosts.
74
74
  # @param [String] env_file The ssh environment file to read from
75
75
  def mirror_env_to_profile_d env_file
76
- if self[:platform] =~ /sles-/
76
+ if self[:platform] =~ /sles-|debian/
77
77
  @logger.debug("mirroring environment to /etc/profile.d on sles platform host")
78
78
  cur_env = exec(Beaker::Command.new("cat #{env_file}")).stdout
79
79
  shell_env = ''
@@ -88,7 +88,7 @@ module Unix::Exec
88
88
  exec(Beaker::Command.new("source #{self[:profile_d_env_file]}"))
89
89
  else
90
90
  #noop
91
- @logger.debug("will not mirror environment to /etc/profile.d on non-sles platform host")
91
+ @logger.debug("will not mirror environment to /etc/profile.d on non-sles/debian platform host")
92
92
  end
93
93
  end
94
94
 
@@ -59,9 +59,9 @@ module Beaker
59
59
  @network_client ||= Fog::Network.new(networkoptionhash)
60
60
 
61
61
  if not @network_client
62
-
63
62
  raise "Unable to create OpenStack Network instance (api_key: #{@options[:openstack_api_key]}, username: #{@options[:openstack_username]}, auth_url: #{@options[:openstack_auth_url]}, tenant: #{@options[:openstack_tenant]})"
64
- end
63
+ end
64
+
65
65
  end
66
66
 
67
67
  #Provided a flavor name return the OpenStack id for that flavor
@@ -88,6 +88,75 @@ module Beaker
88
88
  @network_client.networks.find { |x| x.name == n } || raise("Couldn't find network: #{n}")
89
89
  end
90
90
 
91
+ # Create a volume client on request
92
+ # @return [Fog::OpenStack::Volume] OpenStack volume client
93
+ def volume_client_create
94
+ options = {
95
+ :provider => :openstack,
96
+ :openstack_api_key => @options[:openstack_api_key],
97
+ :openstack_username => @options[:openstack_username],
98
+ :openstack_auth_url => @options[:openstack_auth_url],
99
+ :openstack_tenant => @options[:openstack_tenant],
100
+ :openstack_region => @options[:openstack_region],
101
+ }
102
+ @volume_client ||= Fog::Volume.new(options)
103
+ unless @volume_client
104
+ raise "Unable to create OpenStack Volume instance"\
105
+ " (api_key: #{@options[:openstack_api_key]},"\
106
+ " username: #{@options[:openstack_username]},"\
107
+ " auth_url: #{@options[:openstack_auth_url]},"\
108
+ " tenant: #{@options[:openstack_tenant]})"
109
+ end
110
+ end
111
+
112
+ # Create and attach dynamic volumes
113
+ #
114
+ # Creates an array of volumes and attaches them to the current host.
115
+ # The host bus type is determined by the image type, so by default
116
+ # devices appear as /dev/vdb, /dev/vdc etc. Setting the glance
117
+ # properties hw_disk_bus=scsi, hw_scsi_model=virtio-scsi will present
118
+ # them as /dev/sdb, /dev/sdc (or 2:0:0:1, 2:0:0:2 in SCSI addresses)
119
+ #
120
+ # @param host [Hash] thet current host defined in the nodeset
121
+ # @param vm [Fog::Compute::OpenStack::Server] the server to attach to
122
+ def provision_storage host, vm
123
+ if host['volumes']
124
+ # Lazily create the volume client if needed
125
+ volume_client_create
126
+ host['volumes'].keys.each_with_index do |volume, index|
127
+ @logger.debug "Creating volume #{volume} for OpenStack host #{host.name}"
128
+
129
+ # The node defintion file defines volume sizes in MB (due to precedent
130
+ # with the vagrant virtualbox implementation) however OpenStack requires
131
+ # this translating into GB
132
+ openstack_size = host['volumes'][volume]['size'].to_i / 1000
133
+
134
+ # Create the volume and wait for it to become available
135
+ vol = @volume_client.volumes.create(
136
+ :size => openstack_size,
137
+ :display_name => volume,
138
+ :description => "Beaker volume: host=#{host.name} volume=#{volume}",
139
+ )
140
+ vol.wait_for { ready? }
141
+
142
+ # Fog needs a device name to attach as, so invent one. The guest
143
+ # doesn't pay any attention to this
144
+ device = "/dev/vd#{('b'.ord + index).chr}"
145
+ vm.attach_volume(vol.id, device)
146
+ end
147
+ end
148
+ end
149
+
150
+ # Detach and delete guest volumes
151
+ # @param vm [Fog::Compute::OpenStack::Server] the server to detach from
152
+ def cleanup_storage vm
153
+ vm.volumes.each do |vol|
154
+ @logger.debug "Deleting volume #{vol.name} for OpenStack host #{vm.name}"
155
+ vm.detach_volume(vol.id)
156
+ vol.destroy
157
+ end
158
+ end
159
+
91
160
  #Create new instances in OpenStack
92
161
  def provision
93
162
  @logger.notify "Provisioning OpenStack"
@@ -171,6 +240,8 @@ module Beaker
171
240
 
172
241
  #enable root if user is not root
173
242
  enable_root(host)
243
+
244
+ provision_storage(host, vm)
174
245
  end
175
246
  end
176
247
 
@@ -178,6 +249,7 @@ module Beaker
178
249
  def cleanup
179
250
  @logger.notify "Cleaning up OpenStack"
180
251
  @vms.each do |vm|
252
+ cleanup_storage(vm)
181
253
  @logger.debug "Release floating IPs for OpenStack host #{vm.name}"
182
254
  floating_ips = vm.all_addresses # fetch and release its floating IPs
183
255
  floating_ips.each do |address|
@@ -1,5 +1,5 @@
1
1
  module Beaker
2
2
  module Version
3
- STRING = '2.17.0'
3
+ STRING = '2.18.0'
4
4
  end
5
5
  end
@@ -80,6 +80,7 @@ describe ClassMixedWithDSLInstallUtils do
80
80
  not_agents = []
81
81
  hosts.each do |host|
82
82
  host[:version] = '4.0'
83
+ host[:pe_ver] = nil
83
84
  if subject.agent_only(host)
84
85
  agents << host
85
86
  else
@@ -69,19 +69,11 @@ describe ClassMixedWithDSLInstallUtils do
69
69
  subject.configure_pe_defaults_on( hosts )
70
70
  end
71
71
 
72
- it 'uses aio paths for hosts of version >= 4.0, except for master/dashboard/database' do
73
- agents = []
74
- not_agents = []
72
+ it 'uses aio paths for hosts of version >= 4.0' do
75
73
  hosts.each do |host|
76
74
  host[:pe_ver] = '4.0'
77
- if subject.agent_only(host)
78
- agents << host
79
- else
80
- not_agents << host
81
75
  end
82
- end
83
- expect(subject).to receive(:add_aio_defaults_on).exactly(agents.length).times
84
- expect(subject).to receive(:add_pe_defaults_on).exactly(not_agents.length).times
76
+ expect(subject).to receive(:add_aio_defaults_on).exactly(hosts.length).times
85
77
  expect(subject).to receive(:add_puppet_paths_on).exactly(hosts.length).times
86
78
 
87
79
  subject.configure_pe_defaults_on( hosts )
@@ -466,7 +458,62 @@ describe ClassMixedWithDSLInstallUtils do
466
458
  expect( subject ).to receive( :install_puppet_agent_pe_promoted_repo_on ).with( hosts[2],
467
459
  {:puppet_agent_version=>nil, :puppet_agent_sha=>nil, :pe_ver=>nil, :puppet_collection=>nil} ).once
468
460
  hosts.each do |host|
469
- if subject.agent_only(host)
461
+ expect( subject ).to receive( :add_aio_defaults_on ).with( host ).once
462
+ expect( subject ).to receive( :sign_certificate_for ).with( host ).once
463
+ expect( subject ).to receive( :stop_agent_on ).with( host ).once
464
+ expect( subject ).to receive( :on ).with( host, /puppet agent -t/, :acceptable_exit_codes => [0,2] ).once
465
+ end
466
+ #wait for puppetdb to start
467
+ expect( subject ).to receive( :sleep_until_puppetdb_started ).with( hosts[0] ).once#wait for all hosts to appear in the dashboard
468
+ #run puppet agent now that installation is complete
469
+ expect( subject ).to receive( :on ).with( hosts, /puppet agent/, :acceptable_exit_codes => [0,2] ).once
470
+ subject.do_install( hosts, opts )
471
+ end
472
+
473
+ it 'can perform a 4/3 mixed installation with AIO and -non agents' do
474
+ hosts = make_hosts({
475
+ :pe_ver => '4.0',
476
+ :roles => ['agent'],
477
+ }, 3)
478
+ hosts[0][:roles] = ['master', 'database', 'dashboard']
479
+ hosts[1][:platform] = 'windows'
480
+ hosts[2][:platform] = Beaker::Platform.new('el-6-x86_64')
481
+ hosts[2][:pe_ver] = '3.8'
482
+
483
+ allow( subject ).to receive( :hosts ).and_return( hosts )
484
+ allow( subject ).to receive( :options ).and_return(Beaker::Options::Presets.new.presets)
485
+ allow( subject ).to receive( :on ).and_return( Beaker::Result.new( {}, '' ) )
486
+ allow( subject ).to receive( :fetch_pe ).and_return( true )
487
+ allow( subject ).to receive( :create_remote_file ).and_return( true )
488
+ allow( subject ).to receive( :sign_certificate_for ).and_return( true )
489
+ allow( subject ).to receive( :stop_agent_on ).and_return( true )
490
+ allow( subject ).to receive( :sleep_until_puppetdb_started ).and_return( true )
491
+ allow( subject ).to receive( :max_version ).with(anything, '3.8').and_return('4.0')
492
+ allow( subject ).to receive( :version_is_less ).with('4.0', '4.0').and_return( false )
493
+ allow( subject ).to receive( :version_is_less ).with('4.0', '3.4').and_return( false )
494
+ allow( subject ).to receive( :version_is_less ).with('4.0', '3.0').and_return( false )
495
+ allow( subject ).to receive( :version_is_less ).with('3.99', '4.0').and_return( true )
496
+ allow( subject ).to receive( :version_is_less ).with('3.8', '4.0').and_return( true )
497
+ # pe_ver is only set on the hosts for this test, not the opt
498
+ allow( subject ).to receive( :version_is_less ).with('4.0', '3.99').and_return( true )
499
+ allow( subject ).to receive( :wait_for_host_in_dashboard ).and_return( true )
500
+ allow( subject ).to receive( :puppet_agent ) do |arg|
501
+ "puppet agent #{arg}"
502
+ end
503
+ allow( subject ).to receive( :puppet ) do |arg|
504
+ "puppet #{arg}"
505
+ end
506
+
507
+ allow( subject ).to receive( :hosts ).and_return( hosts )
508
+ #create answers file per-host, except windows
509
+ expect( subject ).to receive( :create_remote_file ).with( hosts[0], /answers/, /q/ ).once
510
+ #run installer on all hosts
511
+ expect( subject ).to receive( :on ).with( hosts[0], /puppet-enterprise-installer/ ).once
512
+ expect( subject ).to receive( :install_puppet_agent_pe_promoted_repo_on ).with( hosts[1],
513
+ {:puppet_agent_version=>nil, :puppet_agent_sha=>nil, :pe_ver=>nil, :puppet_collection=>nil} ).once
514
+ expect( subject ).to receive( :on ).with( hosts[2], /puppet-enterprise-installer/ ).once
515
+ hosts.each do |host|
516
+ if subject.aio_version?(host)
470
517
  expect( subject ).to receive( :add_aio_defaults_on ).with( host ).once
471
518
  else
472
519
  expect( subject ).to receive( :add_pe_defaults_on ).with( host ).once
@@ -481,6 +528,7 @@ describe ClassMixedWithDSLInstallUtils do
481
528
  expect( subject ).to receive( :on ).with( hosts, /puppet agent/, :acceptable_exit_codes => [0,2] ).once
482
529
  subject.do_install( hosts, opts )
483
530
  end
531
+
484
532
  end
485
533
 
486
534
  describe 'do_higgs_install' do
@@ -115,6 +115,38 @@ describe ClassMixedWithDSLRoles do
115
115
  expect( subject.agent_only(master) ).to be == false
116
116
  end
117
117
  end
118
+ describe '#aio_version?' do
119
+ it 'returns true if the host doesn\'t have a :pe_ver' do
120
+ agent1[:pe_ver] = nil
121
+ expect( subject.aio_version?(agent1) ).to be === true
122
+ end
123
+ it 'returns false if the host :pe_ver is set < 4.0' do
124
+ agent1[:pe_ver] = '3.8'
125
+ expect( subject.aio_version?(agent1) ).to be === false
126
+ end
127
+ it 'returns true if the host :pe_ver is 4.0' do
128
+ agent1[:pe_ver] = '4.0'
129
+ expect( subject.aio_version?(agent1) ).to be === true
130
+ end
131
+ it 'returns true if the host :pe_ver is 2015.5' do
132
+ agent1[:pe_ver] = '2015.5'
133
+ expect( subject.aio_version?(agent1) ).to be === true
134
+ end
135
+ end
136
+ describe '#aio_agent?' do
137
+ it 'returns false if agent_only check doesn\'t pass' do
138
+ agent1[:roles] = ['agent', 'headless']
139
+ expect( subject.aio_agent?(agent1) ).to be === false
140
+ end
141
+ it 'returns false if aio_capable? check doesn\'t pass' do
142
+ agent1[:pe_ver] = '3.8'
143
+ expect( subject.aio_agent?(agent1) ).to be === false
144
+ end
145
+ it 'returns true if both checks pass' do
146
+ agent1[:pe_ver] = '4.0'
147
+ expect( subject.aio_agent?(agent1) ).to be === true
148
+ end
149
+ end
118
150
  describe '#default' do
119
151
  it 'returns the default host when one is specified' do
120
152
  @hosts = [ db, agent1, agent2, default, master]
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: 2.17.0
4
+ version: 2.18.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Puppetlabs
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-07-10 00:00:00.000000000 Z
11
+ date: 2015-07-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rspec