beaker 2.2.0 → 2.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +8 -8
- data/HISTORY.md +222 -4
- data/ext/completion/beaker-completion.bash +53 -0
- data/lib/beaker/answers/version30.rb +98 -93
- data/lib/beaker/answers/version32.rb +3 -0
- data/lib/beaker/answers/version34.rb +4 -1
- data/lib/beaker/dsl/helpers.rb +42 -1
- data/lib/beaker/dsl/install_utils.rb +76 -35
- data/lib/beaker/dsl/roles.rb +43 -15
- data/lib/beaker/host.rb +1 -0
- data/lib/beaker/host_prebuilt_steps.rb +10 -4
- data/lib/beaker/hypervisor/aws_sdk.rb +24 -9
- data/lib/beaker/hypervisor/openstack.rb +26 -1
- data/lib/beaker/hypervisor/vagrant.rb +8 -2
- data/lib/beaker/hypervisor/vagrant_virtualbox.rb +2 -0
- data/lib/beaker/options/presets.rb +1 -0
- data/lib/beaker/shared/host_manager.rb +21 -0
- data/lib/beaker/version.rb +1 -1
- data/spec/beaker/answers_spec.rb +38 -0
- data/spec/beaker/dsl/helpers_spec.rb +52 -0
- data/spec/beaker/dsl/install_utils_spec.rb +58 -1
- data/spec/beaker/dsl/roles_spec.rb +27 -2
- data/spec/beaker/host_spec.rb +18 -0
- data/spec/beaker/hypervisor/vagrant_spec.rb +11 -0
- data/spec/beaker/shared/host_manager_spec.rb +20 -0
- metadata +3 -2
@@ -40,7 +40,7 @@ module Beaker
|
|
40
40
|
if not @compute_client
|
41
41
|
raise "Unable to create OpenStack Compute instance (api key: #{@options[:openstack_api_key]}, username: #{@options[:openstack_username]}, auth_url: #{@options[:openstack_auth_url]}, tenant: #{@options[:openstack_tenant]})"
|
42
42
|
end
|
43
|
-
@network_client
|
43
|
+
@network_client ||= Fog::Network.new(
|
44
44
|
:provider => :openstack,
|
45
45
|
:openstack_api_key => @options[:openstack_api_key],
|
46
46
|
:openstack_username => @options[:openstack_username],
|
@@ -132,6 +132,8 @@ module Beaker
|
|
132
132
|
:project => @options[:project].to_s })
|
133
133
|
@vms << vm
|
134
134
|
|
135
|
+
#enable root if user is not root
|
136
|
+
enable_root_on_hosts()
|
135
137
|
end
|
136
138
|
end
|
137
139
|
|
@@ -150,5 +152,28 @@ module Beaker
|
|
150
152
|
end
|
151
153
|
end
|
152
154
|
|
155
|
+
# Enables root for instances with custom username like ubuntu-amis
|
156
|
+
#
|
157
|
+
# @return [void]
|
158
|
+
# @api private
|
159
|
+
def enable_root_on_hosts
|
160
|
+
@hosts.each do |host|
|
161
|
+
enable_root(host)
|
162
|
+
end
|
163
|
+
end
|
164
|
+
|
165
|
+
# Enables root access for a host when username is not root
|
166
|
+
#
|
167
|
+
# @return [void]
|
168
|
+
# @api private
|
169
|
+
def enable_root(host)
|
170
|
+
if host['user'] != 'root'
|
171
|
+
copy_ssh_to_root(host, @options)
|
172
|
+
enable_root_login(host, @options)
|
173
|
+
host['user'] = 'root'
|
174
|
+
host.close
|
175
|
+
end
|
176
|
+
end
|
177
|
+
|
153
178
|
end
|
154
179
|
end
|
@@ -31,6 +31,7 @@ module Beaker
|
|
31
31
|
v_file << " v.vm.box_url = '#{host['box_url']}'\n" unless host['box_url'].nil?
|
32
32
|
v_file << " v.vm.box_version = '#{host['box_version']}'\n" unless host['box_version'].nil?
|
33
33
|
v_file << " v.vm.box_check_update = '#{host['box_check_update'] ||= 'true'}'\n"
|
34
|
+
v_file << " v.vm.synced_folder '.', '/vagrant', disabled: true\n" if host['synced_folder'] == 'disabled'
|
34
35
|
v_file << " v.vm.network :private_network, ip: \"#{host['ip'].to_s}\", :netmask => \"#{host['netmask'] ||= "255.255.0.0"}\", :mac => \"#{randmac}\"\n"
|
35
36
|
|
36
37
|
if /windows/i.match(host['platform'])
|
@@ -39,6 +40,11 @@ module Beaker
|
|
39
40
|
v_file << " v.vm.guest = :windows"
|
40
41
|
end
|
41
42
|
|
43
|
+
if /osx/i.match(host['platform'])
|
44
|
+
v_file << " v.vm.network 'private_network', ip: '10.0.1.10'\n"
|
45
|
+
v_file << " v.vm.synced_folder '.', '/vagrant', :nfs => true\n"
|
46
|
+
end
|
47
|
+
|
42
48
|
v_file << self.class.provider_vfile_section(host, options)
|
43
49
|
|
44
50
|
v_file << " end\n"
|
@@ -163,12 +169,12 @@ module Beaker
|
|
163
169
|
@logger.info(line)
|
164
170
|
end
|
165
171
|
if not wait_thr.value.success?
|
166
|
-
raise "Failed to exec 'vagrant #{args}'"
|
172
|
+
raise "Failed to exec 'vagrant #{args}'. Error was #{stderr.read}"
|
167
173
|
end
|
168
174
|
exit_status = wait_thr.value
|
169
175
|
}
|
170
176
|
if exit_status != 0
|
171
|
-
raise "Failed to execute vagrant_cmd ( #{args} )"
|
177
|
+
raise "Failed to execute vagrant_cmd ( #{args} ). Error was #{stderr.read}"
|
172
178
|
end
|
173
179
|
end
|
174
180
|
end
|
@@ -18,6 +18,8 @@ class Beaker::VagrantVirtualbox < Beaker::Vagrant
|
|
18
18
|
provider_section << " vb.customize ['storageattach', :id, '--storagectl', 'SATA Controller', '--port', 1, '--device', 0, '--type', 'hdd', '--medium','#{host['disk_path']}']\n"
|
19
19
|
provider_section << " vb.customize [\"modifyvm\", :id, \"--natdnshostresolver1\", \"#{host['natdns']}\"]\n" unless host['natdns'].nil?
|
20
20
|
provider_section << " vb.customize [\"modifyvm\", :id, \"--natdnsproxy1\", \"#{host['natdns']}\"]\n" unless host['natdns'].nil?
|
21
|
+
provider_section << " vb.gui = true\n" unless host['vb_gui'].nil?
|
22
|
+
provider_section << " [\"modifyvm\", :id, \"--cpuidset\", \"1\",\"000206a7\",\"02100800\",\"1fbae3bf\",\"bfebfbff\"\]" if /osx/i.match(host['platform'])
|
21
23
|
end
|
22
24
|
provider_section << " end\n"
|
23
25
|
|
@@ -46,6 +46,27 @@ module Beaker
|
|
46
46
|
a_host.first
|
47
47
|
end
|
48
48
|
|
49
|
+
# Find at most a single host with the role provided. Raise an error if
|
50
|
+
# more than one host is found to have the provided role.
|
51
|
+
# @param [Array<Host>] hosts The hosts to examine
|
52
|
+
# @param [String] role The host returned will have this role in its role list
|
53
|
+
# @return [Host] The single host with the desired role in its roles list
|
54
|
+
# or nil if no host is found
|
55
|
+
# @raise [ArgumentError] Raised if more than one host has the given role defined
|
56
|
+
def find_at_most_one_host_with_role(hosts, role)
|
57
|
+
role_hosts = hosts_with_role(hosts, role)
|
58
|
+
host_with_role = nil
|
59
|
+
case role_hosts.length
|
60
|
+
when 0
|
61
|
+
when 1
|
62
|
+
host_with_role = role_hosts[0]
|
63
|
+
else
|
64
|
+
host_string = ( role_hosts.map { |host| host.name } ).join( ', ')
|
65
|
+
raise ArgumentError, "There should be only one host with #{role} defined, but I found #{role_hosts.length} (#{host_string})"
|
66
|
+
end
|
67
|
+
host_with_role
|
68
|
+
end
|
69
|
+
|
49
70
|
#Execute a block selecting the hosts that match with the provided criteria
|
50
71
|
#@param [Array<Host>, Host] hosts The host or hosts to run the provided block against
|
51
72
|
#@param [String, Symbol] filter Optional filter to apply to provided hosts - limits by name or role
|
data/lib/beaker/version.rb
CHANGED
data/spec/beaker/answers_spec.rb
CHANGED
@@ -50,6 +50,44 @@ module Beaker
|
|
50
50
|
end
|
51
51
|
end
|
52
52
|
|
53
|
+
describe "Masterless Setup" do
|
54
|
+
let( :ver ) { @ver || '3.0' }
|
55
|
+
let( :options ) { options = Beaker::Options::Presets.new.presets
|
56
|
+
options[:masterless] = true
|
57
|
+
options }
|
58
|
+
let( :hosts ) { make_hosts({}, 1) }
|
59
|
+
let( :host ) { hosts[0] }
|
60
|
+
let( :answers ) { Beaker::Answers.create(ver, hosts, options) }
|
61
|
+
let( :host_answers ) { answers.answers[host.name] }
|
62
|
+
|
63
|
+
|
64
|
+
it 'adds the correct answers' do
|
65
|
+
expect( host_answers[:q_puppetagent_server] ).to be === host_answers[:q_puppetagent_certname]
|
66
|
+
expect( host_answers[:q_continue_or_reenter_master_hostname]).to be === 'c'
|
67
|
+
end
|
68
|
+
|
69
|
+
it 'skips the correct answers' do
|
70
|
+
expect( host_answers[:q_puppetmaster_install]).to be === 'n'
|
71
|
+
expect( host_answers[:q_puppet_enterpriseconsole_install] ).to be === 'n'
|
72
|
+
expect( host_answers[:q_puppetdb_install] ).to be === 'n'
|
73
|
+
end
|
74
|
+
|
75
|
+
it '3.0: never calls #only_host_with_role in #generate_answers' do
|
76
|
+
expect( answers.generate_answers ).to_not receive( :only_host_with_role )
|
77
|
+
end
|
78
|
+
|
79
|
+
it '3.2: never calls #only_host_with_role in #generate_answers' do
|
80
|
+
@ver = '3.2'
|
81
|
+
expect( answers.generate_answers ).to_not receive( :only_host_with_role )
|
82
|
+
end
|
83
|
+
|
84
|
+
it '3.4: never calls #only_host_with_role in #generate_answers' do
|
85
|
+
@ver = '3.4'
|
86
|
+
expect( answers.generate_answers ).to_not receive( :only_host_with_role )
|
87
|
+
end
|
88
|
+
|
89
|
+
end
|
90
|
+
|
53
91
|
describe Version34 do
|
54
92
|
let( :options ) { Beaker::Options::Presets.new.presets }
|
55
93
|
let( :basic_hosts ) { make_hosts( {'pe_ver' => @ver } ) }
|
@@ -1294,4 +1294,56 @@ describe ClassMixedWithDSLHelpers do
|
|
1294
1294
|
end
|
1295
1295
|
end
|
1296
1296
|
end
|
1297
|
+
|
1298
|
+
describe "#write_hiera_config_on" do
|
1299
|
+
let(:hierarchy) { [ 'nodes/%{::fqdn}', 'common' ] }
|
1300
|
+
it 'on FOSS host' do
|
1301
|
+
host = make_host('testhost', { :platform => 'ubuntu' } )
|
1302
|
+
expect(subject).to receive(:create_remote_file).with(host, host[:hieraconf], /#{host[:hieradatadir]}/)
|
1303
|
+
subject.write_hiera_config_on(host, hierarchy)
|
1304
|
+
end
|
1305
|
+
|
1306
|
+
it 'on PE host' do
|
1307
|
+
host = make_host('testhost', { :platform => 'ubuntu', :type => 'pe' } )
|
1308
|
+
expect(subject).to receive(:create_remote_file).with(host, host[:hieraconf], /#{host[:hieradatadir]}/)
|
1309
|
+
subject.write_hiera_config_on(host, hierarchy)
|
1310
|
+
end
|
1311
|
+
|
1312
|
+
end
|
1313
|
+
|
1314
|
+
describe "#write_hiera_config" do
|
1315
|
+
let(:hierarchy) { [ 'nodes/%{::fqdn}', 'common' ] }
|
1316
|
+
it 'delegates to #write_hiera_config_on with the default host' do
|
1317
|
+
allow( subject ).to receive( :hosts ).and_return( hosts )
|
1318
|
+
expect( subject ).to receive( :write_hiera_config_on ).with( master, hierarchy).once
|
1319
|
+
subject.write_hiera_config( hierarchy )
|
1320
|
+
end
|
1321
|
+
|
1322
|
+
end
|
1323
|
+
|
1324
|
+
describe "#copy_hiera_data_to" do
|
1325
|
+
let(:path) { 'spec/fixtures/hieradata' }
|
1326
|
+
it 'on FOSS host' do
|
1327
|
+
host = make_host('testhost', { :platform => 'ubuntu' } )
|
1328
|
+
expect(subject).to receive(:scp_to).with(host, File.expand_path(path), host[:hieradatadir])
|
1329
|
+
subject.copy_hiera_data_to(host, path)
|
1330
|
+
end
|
1331
|
+
|
1332
|
+
it 'on PE host' do
|
1333
|
+
host = make_host('testhost', { :platform => 'ubuntu', :type => 'pe' } )
|
1334
|
+
expect(subject).to receive(:scp_to).with(host, File.expand_path(path), host[:hieradatadir])
|
1335
|
+
subject.copy_hiera_data_to(host, path)
|
1336
|
+
end
|
1337
|
+
end
|
1338
|
+
|
1339
|
+
describe "#copy_hiera_data" do
|
1340
|
+
let(:path) { 'spec/fixtures/hieradata' }
|
1341
|
+
it 'delegates to #copy_hiera_data_to with the default host' do
|
1342
|
+
allow( subject ).to receive( :hosts ).and_return( hosts )
|
1343
|
+
expect( subject ).to receive( :copy_hiera_data_to ).with( master, path).once
|
1344
|
+
subject.copy_hiera_data( path )
|
1345
|
+
end
|
1346
|
+
|
1347
|
+
end
|
1348
|
+
|
1297
1349
|
end
|
@@ -154,6 +154,13 @@ describe ClassMixedWithDSLInstallUtils do
|
|
154
154
|
allow( subject ).to receive( :hosts ).and_return( hosts )
|
155
155
|
expect( subject.sorted_hosts ).to be === hosts
|
156
156
|
end
|
157
|
+
|
158
|
+
it 'does not allow nil entries' do
|
159
|
+
allow( subject ).to receive( :options ).and_return( { :masterless => true } )
|
160
|
+
masterless_host = [basic_hosts[0]]
|
161
|
+
allow( subject ).to receive( :hosts ).and_return( masterless_host )
|
162
|
+
expect( subject.sorted_hosts ).to be === masterless_host
|
163
|
+
end
|
157
164
|
end
|
158
165
|
|
159
166
|
describe 'installer_cmd' do
|
@@ -372,7 +379,7 @@ describe ClassMixedWithDSLInstallUtils do
|
|
372
379
|
expect( subject ).to receive( :on ).with( hosts[2], /puppet config set certname/ ).once
|
373
380
|
expect( subject ).to receive( :on ).with( hosts[3], /puppet config set certname/ ).once
|
374
381
|
expect( subject ).to receive( :on ).with( hosts[2], /puppet agent -t/, :acceptable_exit_codes => [1] ).once
|
375
|
-
expect( subject ).to receive( :on ).with( hosts[3], /puppet agent -t/, :acceptable_exit_codes => [1] ).once
|
382
|
+
expect( subject ).to receive( :on ).with( hosts[3], /puppet agent -t/, :acceptable_exit_codes => [0, 1] ).once
|
376
383
|
#sign certificate per-host
|
377
384
|
expect( subject ).to receive( :sign_certificate_for ).with( hosts[0] ).once
|
378
385
|
expect( subject ).to receive( :sign_certificate_for ).with( hosts[1] ).once
|
@@ -397,6 +404,30 @@ describe ClassMixedWithDSLInstallUtils do
|
|
397
404
|
expect( subject ).to receive( :on ).with( hosts, /puppet agent/, :acceptable_exit_codes => [0,2] ).once
|
398
405
|
subject.do_install( hosts, opts )
|
399
406
|
end
|
407
|
+
|
408
|
+
it 'can perform a masterless installation' do
|
409
|
+
hosts = make_hosts({
|
410
|
+
:pe_ver => '3.0',
|
411
|
+
:roles => ['agent']
|
412
|
+
}, 1)
|
413
|
+
|
414
|
+
allow( subject ).to receive( :hosts ).and_return( hosts )
|
415
|
+
allow( subject ).to receive( :options ).and_return({ :masterless => true })
|
416
|
+
allow( subject ).to receive( :on ).and_return( Beaker::Result.new( {}, '' ) )
|
417
|
+
allow( subject ).to receive( :fetch_puppet ).and_return( true )
|
418
|
+
allow( subject ).to receive( :create_remote_file ).and_return( true )
|
419
|
+
allow( subject ).to receive( :stop_agent_on ).and_return( true )
|
420
|
+
allow( subject ).to receive( :version_is_less ).with(anything, '3.2.0').exactly(hosts.length + 1).times.and_return( false )
|
421
|
+
|
422
|
+
expect( subject ).to receive( :on ).with( hosts[0], /puppet-enterprise-installer/ ).once
|
423
|
+
expect( subject ).to receive( :create_remote_file ).with( hosts[0], /answers/, /q/ ).once
|
424
|
+
expect( subject ).to_not receive( :sign_certificate_for )
|
425
|
+
expect( subject ).to receive( :stop_agent_on ).with( hosts[0] ).once
|
426
|
+
expect( subject ).to_not receive( :sleep_until_puppetdb_started )
|
427
|
+
expect( subject ).to_not receive( :wait_for_host_in_dashboard )
|
428
|
+
expect( subject ).to_not receive( :on ).with( hosts[0], /puppet agent -t/, :acceptable_exit_codes => [0,2] )
|
429
|
+
subject.do_install( hosts, opts)
|
430
|
+
end
|
400
431
|
end
|
401
432
|
|
402
433
|
describe 'do_higgs_install' do
|
@@ -812,6 +843,32 @@ describe ClassMixedWithDSLInstallUtils do
|
|
812
843
|
|
813
844
|
end
|
814
845
|
|
846
|
+
describe '#install_packages_from_local_dev_repo' do
|
847
|
+
let( :package_name ) { 'puppet-agent' }
|
848
|
+
let( :platform ) { @platform || 'other' }
|
849
|
+
let( :host ) do
|
850
|
+
FakeHost.create('fakvm', platform, opts)
|
851
|
+
end
|
852
|
+
|
853
|
+
it 'sets the find command correctly for el-based systems' do
|
854
|
+
@platform = 'el-1-3'
|
855
|
+
expect( subject ).to receive( :on ).with( host, /\*\.rpm.+rpm\s-ivh/ )
|
856
|
+
subject.install_packages_from_local_dev_repo( host, package_name )
|
857
|
+
end
|
858
|
+
|
859
|
+
it 'sets the find command correctly for debian-based systems' do
|
860
|
+
@platform = 'debian-1-3'
|
861
|
+
expect( subject ).to receive( :on ).with( host, /\*\.deb.+dpkg\s-i/ )
|
862
|
+
subject.install_packages_from_local_dev_repo( host, package_name )
|
863
|
+
end
|
864
|
+
|
865
|
+
it 'fails correctly for systems not accounted for' do
|
866
|
+
@platform = 'eos-1-3'
|
867
|
+
expect{ subject.install_packages_from_local_dev_repo( host, package_name ) }.to raise_error RuntimeError
|
868
|
+
end
|
869
|
+
|
870
|
+
end
|
871
|
+
|
815
872
|
describe '#install_puppetagent_dev_repo' do
|
816
873
|
|
817
874
|
it 'raises an exception when host platform is unsupported' do
|
@@ -9,6 +9,7 @@ end
|
|
9
9
|
describe ClassMixedWithDSLRoles do
|
10
10
|
|
11
11
|
let( :hosts ) { @hosts || Hash.new }
|
12
|
+
let( :options ) { @options || Hash.new }
|
12
13
|
let( :agent1 ) { make_host( 'agent1', { :roles => [ 'agent' ] } ) }
|
13
14
|
let( :agent2 ) { make_host( 'agent2', { :roles => [ 'agent' ] } ) }
|
14
15
|
let( :a_and_dash ) { make_host( 'a_and_dash', { :roles => [ 'agent', 'dashboard' ] } ) }
|
@@ -42,6 +43,12 @@ describe ClassMixedWithDSLRoles do
|
|
42
43
|
expect( subject ).to receive( :hosts ).exactly( 1 ).times.and_return( hosts )
|
43
44
|
expect { subject.master }.to raise_error Beaker::DSL::FailTest
|
44
45
|
end
|
46
|
+
it 'returns nil if no master and masterless is set' do
|
47
|
+
@options = { :masterless => true }
|
48
|
+
expect( subject ).to receive( :hosts ).and_return( hosts )
|
49
|
+
expect( subject ).to receive( :options ).and_return( options )
|
50
|
+
expect( subject.master ).to be_nil
|
51
|
+
end
|
45
52
|
end
|
46
53
|
describe '#dashboard' do
|
47
54
|
it 'returns the dashboard if there is one' do
|
@@ -59,6 +66,12 @@ describe ClassMixedWithDSLRoles do
|
|
59
66
|
expect( subject ).to receive( :hosts ).and_return( hosts )
|
60
67
|
expect { subject.dashboard }.to raise_error Beaker::DSL::FailTest
|
61
68
|
end
|
69
|
+
it 'returns nil if no dashboard and masterless is set' do
|
70
|
+
@options = { :masterless => true }
|
71
|
+
expect( subject ).to receive( :hosts ).and_return( hosts )
|
72
|
+
expect( subject ).to receive( :options ).and_return( options )
|
73
|
+
expect( subject.dashboard ).to be_nil
|
74
|
+
end
|
62
75
|
end
|
63
76
|
describe '#database' do
|
64
77
|
it 'returns the database if there is one' do
|
@@ -76,6 +89,12 @@ describe ClassMixedWithDSLRoles do
|
|
76
89
|
expect( subject ).to receive( :hosts ).and_return( hosts )
|
77
90
|
expect { subject.database }.to raise_error Beaker::DSL::FailTest
|
78
91
|
end
|
92
|
+
it 'returns nil if no database and masterless is set' do
|
93
|
+
@options = { :masterless => true }
|
94
|
+
expect( subject ).to receive( :hosts ).and_return( hosts )
|
95
|
+
expect( subject ).to receive( :options ).and_return( options )
|
96
|
+
expect( subject.database ).to be_nil
|
97
|
+
end
|
79
98
|
end
|
80
99
|
describe '#default' do
|
81
100
|
it 'returns the default host when one is specified' do
|
@@ -86,12 +105,18 @@ describe ClassMixedWithDSLRoles do
|
|
86
105
|
it 'raises an error if there is more than one default' do
|
87
106
|
@hosts = [ db, monolith, default, default ]
|
88
107
|
expect( subject ).to receive( :hosts ).and_return( hosts )
|
89
|
-
expect { subject.
|
108
|
+
expect { subject.default }.to raise_error Beaker::DSL::FailTest
|
90
109
|
end
|
91
110
|
it 'and raises an error if there is no default' do
|
92
111
|
@hosts = [ agent1, agent2, custom ]
|
93
112
|
expect( subject ).to receive( :hosts ).and_return( hosts )
|
94
|
-
expect { subject.
|
113
|
+
expect { subject.default }.to raise_error Beaker::DSL::FailTest
|
114
|
+
end
|
115
|
+
it 'returns nil if no default and masterless is set' do
|
116
|
+
@options = { :masterless => true }
|
117
|
+
expect( subject ).to receive( :hosts ).and_return( hosts )
|
118
|
+
expect( subject ).to receive( :options ).and_return( options )
|
119
|
+
expect( subject.default ).to be_nil
|
95
120
|
end
|
96
121
|
end
|
97
122
|
describe '#add_role_def' do
|
data/spec/beaker/host_spec.rb
CHANGED
@@ -56,6 +56,24 @@ module Beaker
|
|
56
56
|
expect(host.is_using_passenger?).to be_truthy
|
57
57
|
expect(host.graceful_restarts?).to be_truthy
|
58
58
|
end
|
59
|
+
|
60
|
+
it 'can be an AIO host' do
|
61
|
+
options['type'] = 'aio'
|
62
|
+
expect(host.is_pe?).to be_falsy
|
63
|
+
expect(host.use_service_scripts?).to be_falsy
|
64
|
+
expect(host.is_using_passenger?).to be_falsy
|
65
|
+
end
|
66
|
+
|
67
|
+
it 'sets the paths correctly for an AIO agent host' do
|
68
|
+
options['type'] = 'aio'
|
69
|
+
expect(host['puppetvardir']).to be === Unix::Host::aio_defaults[:puppetvardir]
|
70
|
+
end
|
71
|
+
|
72
|
+
it 'sets the paths correctly for an AIO non-agent host' do
|
73
|
+
options['type'] = 'aio'
|
74
|
+
options['roles'] = ['master']
|
75
|
+
expect(host['puppetvardir']).to be === Unix::Host::foss_defaults[:puppetvardir]
|
76
|
+
end
|
59
77
|
end
|
60
78
|
|
61
79
|
describe "uses_passenger!" do
|
@@ -79,6 +79,17 @@ EOF
|
|
79
79
|
expect( vagrantfile ).to match(/(ssh.forward_agent = true)/)
|
80
80
|
end
|
81
81
|
|
82
|
+
it "can make a Vagrantfile with synced_folder disabled" do
|
83
|
+
path = vagrant.instance_variable_get( :@vagrant_path )
|
84
|
+
allow( vagrant ).to receive( :randmac ).and_return( "0123456789" )
|
85
|
+
|
86
|
+
hosts = make_hosts({:synced_folder => 'disabled'},1)
|
87
|
+
vagrant.make_vfile( hosts, options )
|
88
|
+
|
89
|
+
vagrantfile = File.read( File.expand_path( File.join( path, "Vagrantfile")))
|
90
|
+
expect( vagrantfile ).to match(/v.vm.synced_folder .* disabled: true/)
|
91
|
+
end
|
92
|
+
|
82
93
|
it "generates a valid windows config" do
|
83
94
|
path = vagrant.instance_variable_get( :@vagrant_path )
|
84
95
|
allow( vagrant ).to receive( :randmac ).and_return( "0123456789" )
|
@@ -56,6 +56,26 @@ module Beaker
|
|
56
56
|
end
|
57
57
|
end
|
58
58
|
|
59
|
+
context "find_at_most_one_host_with_role" do
|
60
|
+
it "can find the single master in a set of hosts" do
|
61
|
+
|
62
|
+
expect( host_handler.find_at_most_one_host_with_role( hosts, 'master' ) ).to be === hosts[1]
|
63
|
+
|
64
|
+
end
|
65
|
+
|
66
|
+
it "throws an error when more than one host with matching role is found" do
|
67
|
+
|
68
|
+
expect{ host_handler.find_at_most_one_host_with_role( hosts, 'agent' ) }.to raise_error(ArgumentError)
|
69
|
+
|
70
|
+
end
|
71
|
+
|
72
|
+
it "returns nil when no host is found matching the role" do
|
73
|
+
|
74
|
+
expect( host_handler.find_at_most_one_host_with_role( hosts, 'surprise' ) ).to be_nil
|
75
|
+
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
59
79
|
context "run_block_on" do
|
60
80
|
it "can execute a block against hosts identified by a string" do
|
61
81
|
myhosts = host_handler.run_block_on( hosts, role0 ) do |hosts|
|