beaker-vagrant 0.5.0 → 0.6.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 +4 -4
- data/README.md +13 -7
- data/acceptance/config/nodes/redhat-nodes.yml +5 -5
- data/beaker-vagrant.gemspec +6 -1
- data/docs/vagrant.md +40 -9
- data/lib/beaker-vagrant/version.rb +1 -1
- data/lib/beaker/hypervisor/vagrant.rb +75 -49
- data/spec/beaker/hypervisor/vagrant_spec.rb +169 -32
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d84392a96de3ef88f5b20f1ecb2eb5ec74afdb55
|
4
|
+
data.tar.gz: 5b1b20587489bfd00f891071dbb21c8322baafe4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c572ba506cdd9bbe3daffb77ac24c13a86b808bfb2c7c47e4dfcce244d80094ef13ecb7dc346f4cf22aa78f55ca7c35f36844cbd4f8bbf5d603dd4bdc2ebd756
|
7
|
+
data.tar.gz: d53012692dfbda60846694697c948a499d1685c47c5dd94ff7a85a0f69601758a2a998fa552c084e67e52417d35f630bead60e61904d035a16153e55c0d0eac7
|
data/README.md
CHANGED
@@ -6,16 +6,22 @@ Beaker library to use vagrant hypervisor
|
|
6
6
|
|
7
7
|
This is a gem that allows you to use hosts with [vagrant](docs/vagrant.md) hypervisor with [beaker](https://github.com/puppetlabs/beaker).
|
8
8
|
|
9
|
-
|
9
|
+
## With Beaker 3.x
|
10
10
|
|
11
|
-
This
|
11
|
+
This library is included as a dependency of Beaker 3.x versions, so there's nothing to do.
|
12
12
|
|
13
|
-
|
13
|
+
## With Beaker 4.x
|
14
14
|
|
15
|
-
In
|
16
|
-
|
17
|
-
|
18
|
-
|
15
|
+
As of Beaker 4.0, all hypervisor and DSL extension libraries have been removed and are no longer dependencies. In order to use a specific hypervisor or DSL extension library in your project, you will need to include them alongside Beaker in your Gemfile or project.gemspec. E.g.
|
16
|
+
|
17
|
+
~~~ruby
|
18
|
+
# Gemfile
|
19
|
+
gem 'beaker', '~>4.0'
|
20
|
+
gem 'beaker-vagrant'
|
21
|
+
# project.gemspec
|
22
|
+
s.add_runtime_dependency 'beaker', '~>4.0'
|
23
|
+
s.add_runtime_dependency 'beaker-vagrant'
|
24
|
+
~~~
|
19
25
|
|
20
26
|
# Spec tests
|
21
27
|
|
@@ -7,18 +7,18 @@ HOSTS:
|
|
7
7
|
- databse
|
8
8
|
- classifier
|
9
9
|
- default
|
10
|
-
platform: el-7-x86_64
|
10
|
+
platform: el-7-x86_64
|
11
11
|
template: redhat-7-x86_64
|
12
|
-
box:
|
13
|
-
box_url: https://
|
12
|
+
box: centos/7
|
13
|
+
box_url: https://app.vagrantup.com/centos/boxes/7
|
14
14
|
hypervisor: vagrant
|
15
15
|
redhat7-64-2:
|
16
16
|
roles:
|
17
17
|
- agent
|
18
18
|
platform: el-7-x86_64
|
19
19
|
template: redhat-7-x86_64
|
20
|
-
box:
|
21
|
-
box_url: https://
|
20
|
+
box: centos/7
|
21
|
+
box_url: https://app.vagrantup.com/centos/boxes/7
|
22
22
|
hypervisor: vagrant
|
23
23
|
CONFIG:
|
24
24
|
nfs_server: none
|
data/beaker-vagrant.gemspec
CHANGED
@@ -20,7 +20,12 @@ Gem::Specification.new do |s|
|
|
20
20
|
# Testing dependencies
|
21
21
|
s.add_development_dependency 'rspec', '~> 3.0'
|
22
22
|
s.add_development_dependency 'rspec-its'
|
23
|
-
|
23
|
+
# pin fakefs for Ruby < 2.3
|
24
|
+
if RUBY_VERSION < "2.3"
|
25
|
+
s.add_development_dependency 'fakefs', '~> 0.6', '< 0.14'
|
26
|
+
else
|
27
|
+
s.add_development_dependency 'fakefs', '~> 0.6'
|
28
|
+
end
|
24
29
|
s.add_development_dependency 'rake', '~> 10.1'
|
25
30
|
s.add_development_dependency 'simplecov'
|
26
31
|
s.add_development_dependency 'pry', '~> 0.10'
|
data/docs/vagrant.md
CHANGED
@@ -1,21 +1,29 @@
|
|
1
1
|
# Vagrant
|
2
2
|
|
3
|
-
Vagrant's slogan is "development environments made easy".
|
3
|
+
Vagrant's slogan is "development environments made easy". Vagrant provides an
|
4
4
|
abstraction on top of a VM or cloud provider that allows you to manage
|
5
|
-
hosts and their provisioning.
|
5
|
+
hosts and their provisioning. <https://www.vagrantup.com/>.
|
6
6
|
|
7
|
-
|
7
|
+
## Getting Started
|
8
8
|
|
9
9
|
### Requirements
|
10
10
|
|
11
11
|
A prerequisite for using the vagrant hypervisor with beaker is that the
|
12
|
-
|
13
|
-
see [downloads.vagrantup.com](http://downloads.vagrantup.com/) for downloads.
|
12
|
+
`Vagrant` package, minimum version 1.7, needs to installed. Version 2.1.2 (latest as of time of writing) has been tested. See [downloads.vagrantup.com](http://downloads.vagrantup.com/) for downloads or install with Homebrew:
|
14
13
|
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
14
|
+
~~~console
|
15
|
+
$ brew install cask vagrant
|
16
|
+
~~~
|
17
|
+
|
18
|
+
You will also need a virtualization provider. Beaker-vagrant is most commonly used as an interface to VirtualBox, so you'll also need that:
|
19
|
+
|
20
|
+
~~~console
|
21
|
+
$ brew install cask virtualbox
|
22
|
+
~~~
|
23
|
+
|
24
|
+
Historically, we provided a suite of pre-built, publicly available Vagrant boxes for use in constructing tests: [Puppet Labs Vagrant Boxes](https://vagrantcloud.com/puppetlabs/). However, these boxes have not been updated recently and *will* have issues (ex: outdated cURL on CentOS). You can use these easily by pulling one of our [Example Vagrant Hosts Files](vagrant_hosts_file_examples.md), but this should be avoided if possible.
|
25
|
+
|
26
|
+
For acceptance testing of beaker-vagrant, we use [the official CentOS 7 box](https://app.vagrantup.com/centos/boxes/7).
|
19
27
|
|
20
28
|
### Setup a Vagrant Hosts File
|
21
29
|
|
@@ -180,6 +188,29 @@ When using the Vagrant Hypervisor, beaker can create attached volumes which appe
|
|
180
188
|
size: 5120
|
181
189
|
volume_storage_controller: USB
|
182
190
|
|
191
|
+
### Adding vagrant shell provisioner
|
192
|
+
|
193
|
+
When using the Vagrant Hypervisor, beaker can create the Vagrantfile with a shell provisioner. This is done by using the `shell_provisioner` option in the nodeset file.
|
194
|
+
|
195
|
+
**Example hosts file**
|
196
|
+
|
197
|
+
HOSTS:
|
198
|
+
ubuntu-1404-x64-master:
|
199
|
+
roles:
|
200
|
+
- master
|
201
|
+
- agent
|
202
|
+
- dashboard
|
203
|
+
- database
|
204
|
+
platform: ubuntu-1404-x86_64
|
205
|
+
hypervisor: vagrant
|
206
|
+
box: puppetlabs/ubuntu-14.04-64-nocm
|
207
|
+
box_url: https://vagrantcloud.com/puppetlabs/boxes/ubuntu-14.04-64-nocm
|
208
|
+
ip: 192.168.20.20
|
209
|
+
shell_provisioner:
|
210
|
+
path: /home/user/scripts/bootstrap.sh
|
211
|
+
|
212
|
+
In the above, beaker will create a Vagrantfile which runs the above shell script on the Agent guest.
|
213
|
+
|
183
214
|
# vagrant plugins #
|
184
215
|
|
185
216
|
You can check more information for some suported vagrant plugins:
|
@@ -35,6 +35,19 @@ module Beaker
|
|
35
35
|
end
|
36
36
|
end
|
37
37
|
|
38
|
+
def shell_provisioner_generator(provisioner_config)
|
39
|
+
unless provisioner_config['path'].nil? || provisioner_config['path'].empty?
|
40
|
+
unless provisioner_config['args'].nil?
|
41
|
+
shell_provisioner_string = " v.vm.provision 'shell', :path => '#{provisioner_config['path']}', :args => '#{provisioner_config['args']}' \n"
|
42
|
+
else
|
43
|
+
shell_provisioner_string = " v.vm.provision 'shell', :path => '#{provisioner_config['path']}'\n"
|
44
|
+
end
|
45
|
+
shell_provisioner_string
|
46
|
+
else
|
47
|
+
raise "No path defined for shell_provisioner or path empty"
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
38
51
|
def make_vfile hosts, options = {}
|
39
52
|
#HACK HACK HACK - add checks here to ensure that we have box + box_url
|
40
53
|
#generate the VagrantFile
|
@@ -53,6 +66,7 @@ module Beaker
|
|
53
66
|
v_file << " v.vm.box_download_insecure = '#{host['box_download_insecure']}'\n" unless host['box_download_insecure'].nil?
|
54
67
|
v_file << " v.vm.box_check_update = '#{host['box_check_update'] ||= 'true'}'\n"
|
55
68
|
v_file << " v.vm.synced_folder '.', '/vagrant', disabled: true\n" if host['synced_folder'] == 'disabled'
|
69
|
+
v_file << shell_provisioner_generator(host['shell_provisioner']) if host['shell_provisioner']
|
56
70
|
v_file << private_network_generator(host)
|
57
71
|
|
58
72
|
unless host['mount_folders'].nil?
|
@@ -131,6 +145,32 @@ module Beaker
|
|
131
145
|
Beaker::VagrantVirtualbox.provider_vfile_section(host, options)
|
132
146
|
end
|
133
147
|
|
148
|
+
def set_all_ssh_config
|
149
|
+
@logger.debug "configure vagrant boxes (set ssh-config, switch to root user, hack etc/hosts)"
|
150
|
+
@hosts.each do |host|
|
151
|
+
if host[:platform] =~ /windows/
|
152
|
+
@logger.debug "skip ssh hacks on windows box #{host[:name]}"
|
153
|
+
set_ssh_config host, host['user']
|
154
|
+
next
|
155
|
+
end
|
156
|
+
|
157
|
+
default_user = host['user']
|
158
|
+
|
159
|
+
set_ssh_config host, 'vagrant'
|
160
|
+
|
161
|
+
#copy vagrant's keys to roots home dir, to allow for login as root
|
162
|
+
copy_ssh_to_root host, @options
|
163
|
+
#ensure that root login is enabled for this host
|
164
|
+
enable_root_login host, @options
|
165
|
+
#shut down connection, will reconnect on next exec
|
166
|
+
host.close
|
167
|
+
|
168
|
+
set_ssh_config host, default_user
|
169
|
+
end
|
170
|
+
|
171
|
+
hack_etc_hosts @hosts, @options
|
172
|
+
end
|
173
|
+
|
134
174
|
def set_ssh_config host, user
|
135
175
|
f = Tempfile.new("#{host.name}")
|
136
176
|
ssh_config = Dir.chdir(@vagrant_path) do
|
@@ -145,6 +185,11 @@ module Beaker
|
|
145
185
|
|
146
186
|
#set the user
|
147
187
|
ssh_config = ssh_config.gsub(/User vagrant/, "User #{user}")
|
188
|
+
|
189
|
+
if @options[:forward_ssh_agent] == true
|
190
|
+
ssh_config = ssh_config.gsub(/IdentitiesOnly yes/, "IdentitiesOnly no")
|
191
|
+
end
|
192
|
+
|
148
193
|
f.write(ssh_config)
|
149
194
|
f.rewind
|
150
195
|
host['ssh'] = {:config => f.path()}
|
@@ -182,65 +227,46 @@ module Beaker
|
|
182
227
|
@vagrant_env = { "RUBYLIB" => "" }
|
183
228
|
end
|
184
229
|
|
185
|
-
def
|
186
|
-
if !@options[:provision]
|
187
|
-
|
188
|
-
|
189
|
-
if @options[:provision]
|
190
|
-
#setting up new vagrant hosts
|
191
|
-
#make sure that any old boxes are dead dead dead
|
192
|
-
begin
|
193
|
-
vagrant_cmd("destroy --force") if File.file?(@vagrant_file)
|
194
|
-
rescue RuntimeError => e
|
195
|
-
# LATER: use <<~MESSAGE once we're on Ruby 2.3
|
196
|
-
@logger.debug(%Q{
|
197
|
-
Beaker failed to destroy the existing VM's. If you think this is
|
198
|
-
an error or you upgraded from an older version of beaker try
|
199
|
-
verifying the VM exists and deleting the existing Vagrantfile if
|
200
|
-
you believe it is safe to do so. WARNING: If a VM still exists
|
201
|
-
please run 'vagrant destroy'.
|
202
|
-
|
203
|
-
cd #{@vagrant_path}
|
204
|
-
vagrant status
|
205
|
-
vagrant destroy # only need to run this is a VM is not created
|
206
|
-
rm #{@vagrant_file} # only do this if all VM's are actually destroyed
|
207
|
-
}.each_line.map(&:strip).join("\n"))
|
208
|
-
raise e
|
230
|
+
def configure(opts = {})
|
231
|
+
if !@options[:provision]
|
232
|
+
if !File.file?(@vagrant_file)
|
233
|
+
raise "Beaker is configured with provision = false but no vagrant file was found at #{@vagrant_file}. You need to enable provision"
|
209
234
|
end
|
210
235
|
|
211
|
-
make_vfile @hosts, @options
|
212
|
-
|
213
|
-
vagrant_cmd("up#{" --provider #{provider}" if provider}")
|
214
|
-
else #set host ip of already up boxes
|
215
236
|
@hosts.each do |host|
|
216
237
|
host[:ip] = get_ip_from_vagrant_file(host.name)
|
217
238
|
end
|
218
|
-
end
|
219
|
-
|
220
|
-
@logger.debug "configure vagrant boxes (set ssh-config, switch to root user, hack etc/hosts)"
|
221
|
-
@hosts.each do |host|
|
222
|
-
if host[:platform] =~ /windows/
|
223
|
-
@logger.debug "skip ssh hacks on windows box #{host[:name]}"
|
224
|
-
set_ssh_config host, host['user']
|
225
|
-
next
|
226
|
-
end
|
227
239
|
|
228
|
-
|
229
|
-
|
230
|
-
|
231
|
-
|
232
|
-
#copy vagrant's keys to roots home dir, to allow for login as root
|
233
|
-
copy_ssh_to_root host, @options
|
234
|
-
#ensure that root login is enabled for this host
|
235
|
-
enable_root_login host, @options
|
236
|
-
#shut down connection, will reconnect on next exec
|
237
|
-
host.close
|
240
|
+
set_all_ssh_config
|
241
|
+
end
|
242
|
+
end
|
238
243
|
|
239
|
-
|
244
|
+
def provision(provider = nil)
|
245
|
+
#setting up new vagrant hosts
|
246
|
+
#make sure that any old boxes are dead dead dead
|
247
|
+
begin
|
248
|
+
vagrant_cmd("destroy --force") if File.file?(@vagrant_file)
|
249
|
+
rescue RuntimeError => e
|
250
|
+
# LATER: use <<~MESSAGE once we're on Ruby 2.3
|
251
|
+
@logger.debug(%Q{
|
252
|
+
Beaker failed to destroy the existing VM's. If you think this is
|
253
|
+
an error or you upgraded from an older version of beaker try
|
254
|
+
verifying the VM exists and deleting the existing Vagrantfile if
|
255
|
+
you believe it is safe to do so. WARNING: If a VM still exists
|
256
|
+
please run 'vagrant destroy'.
|
257
|
+
cd #{@vagrant_path}
|
258
|
+
vagrant status
|
259
|
+
vagrant destroy # only need to run this is a VM is not created
|
260
|
+
rm #{@vagrant_file} # only do this if all VM's are actually destroyed
|
261
|
+
}.each_line.map(&:strip).join("\n"))
|
262
|
+
raise e
|
240
263
|
end
|
241
264
|
|
242
|
-
|
265
|
+
make_vfile @hosts, @options
|
266
|
+
|
267
|
+
vagrant_cmd("up#{" --provider #{provider}" if provider}")
|
243
268
|
|
269
|
+
set_all_ssh_config
|
244
270
|
end
|
245
271
|
|
246
272
|
def cleanup
|
@@ -178,6 +178,61 @@ EOF
|
|
178
178
|
expect( vagrantfile ).to match(/v.vm.synced_folder '\/valid', '\/valid', create: true/)
|
179
179
|
end
|
180
180
|
|
181
|
+
it "can make a Vagrantfile with optional shell provisioner" do
|
182
|
+
path = vagrant.instance_variable_get( :@vagrant_path )
|
183
|
+
allow( vagrant ).to receive( :randmac ).and_return( "0123456789" )
|
184
|
+
|
185
|
+
shell_path = '/path/to/shell/script'
|
186
|
+
hosts = make_hosts({
|
187
|
+
:shell_provisioner => {
|
188
|
+
:path => shell_path
|
189
|
+
}
|
190
|
+
}, 1)
|
191
|
+
vagrant.make_vfile( hosts, options )
|
192
|
+
|
193
|
+
vagrantfile = File.read( File.expand_path( File.join( path, "Vagrantfile")))
|
194
|
+
expect( vagrantfile ).to match(/v.vm.provision 'shell', :path => '#{shell_path}'/)
|
195
|
+
end
|
196
|
+
|
197
|
+
it "can make a Vagrantfile with optional shell provisioner with args" do
|
198
|
+
path = vagrant.instance_variable_get( :@vagrant_path )
|
199
|
+
allow( vagrant ).to receive( :randmac ).and_return( "0123456789" )
|
200
|
+
|
201
|
+
shell_path = '/path/to/shell/script.sh'
|
202
|
+
shell_args = 'arg1 arg2'
|
203
|
+
hosts = make_hosts({
|
204
|
+
:shell_provisioner => {
|
205
|
+
:path => shell_path,
|
206
|
+
:args => shell_args
|
207
|
+
}
|
208
|
+
}, 1)
|
209
|
+
vagrant.make_vfile( hosts, options )
|
210
|
+
|
211
|
+
vagrantfile = File.read( File.expand_path( File.join( path, "Vagrantfile")))
|
212
|
+
expect( vagrantfile ).to match(/v.vm.provision 'shell', :path => '#{shell_path}', :args => '#{shell_args}'/)
|
213
|
+
end
|
214
|
+
|
215
|
+
it "raises an error if path is not set on shell_provisioner" do
|
216
|
+
path = vagrant.instance_variable_get( :@vagrant_path )
|
217
|
+
allow( vagrant ).to receive( :randmac ).and_return( "0123456789" )
|
218
|
+
|
219
|
+
hosts = make_hosts({:shell_provisioner => {}}, 1)
|
220
|
+
expect{ vagrant.make_vfile( hosts, options ) }.to raise_error RuntimeError, /No path defined for shell_provisioner or path empty/
|
221
|
+
end
|
222
|
+
|
223
|
+
it "raises an error if path is EMPTY on shell_provisioner" do
|
224
|
+
path = vagrant.instance_variable_get( :@vagrant_path )
|
225
|
+
allow( vagrant ).to receive( :randmac ).and_return( "0123456789" )
|
226
|
+
|
227
|
+
empty_shell_path = ''
|
228
|
+
hosts = make_hosts({
|
229
|
+
:shell_provisioner => {
|
230
|
+
:path => empty_shell_path
|
231
|
+
}
|
232
|
+
}, 1)
|
233
|
+
expect{ vagrant.make_vfile( hosts, options ) }.to raise_error RuntimeError, /No path defined for shell_provisioner or path empty/
|
234
|
+
end
|
235
|
+
|
181
236
|
context "when generating a windows config" do
|
182
237
|
before do
|
183
238
|
path = vagrant.instance_variable_get( :@vagrant_path )
|
@@ -389,39 +444,121 @@ EOF
|
|
389
444
|
end
|
390
445
|
end
|
391
446
|
|
392
|
-
|
393
|
-
|
394
|
-
|
395
|
-
|
396
|
-
|
397
|
-
|
398
|
-
|
399
|
-
|
400
|
-
|
401
|
-
|
402
|
-
|
403
|
-
|
404
|
-
|
405
|
-
|
406
|
-
|
407
|
-
|
408
|
-
|
409
|
-
|
410
|
-
|
411
|
-
|
412
|
-
|
413
|
-
|
414
|
-
|
415
|
-
|
416
|
-
|
417
|
-
|
418
|
-
|
419
|
-
|
420
|
-
|
421
|
-
|
422
|
-
|
423
|
-
|
447
|
+
describe "set_ssh_config" do
|
448
|
+
let( :out ) { double( 'stdout' ) }
|
449
|
+
let( :host ) { @hosts[0] }
|
450
|
+
let( :name ) { host.name }
|
451
|
+
let( :file ) { double( 'file' ) }
|
452
|
+
|
453
|
+
before :each do
|
454
|
+
allow( Dir ).to receive( :chdir ).and_yield()
|
455
|
+
wait_thr = OpenStruct.new
|
456
|
+
state = double( 'state' )
|
457
|
+
allow( state ).to receive( :success? ).and_return( true )
|
458
|
+
wait_thr.value = state
|
459
|
+
|
460
|
+
allow( Open3 ).to receive( :popen3 ).with( {"RUBYLIB"=>""}, 'vagrant', 'ssh-config', name ).and_return( [ "", out, "", wait_thr ])
|
461
|
+
|
462
|
+
allow( file ).to receive( :path ).and_return( '/path/sshconfig' )
|
463
|
+
allow( file ).to receive( :rewind ).and_return( true )
|
464
|
+
|
465
|
+
allow( out ).to receive( :read ).and_return("Host #{name}
|
466
|
+
HostName 127.0.0.1
|
467
|
+
User vagrant
|
468
|
+
Port 2222
|
469
|
+
UserKnownHostsFile /dev/null
|
470
|
+
StrictHostKeyChecking no
|
471
|
+
PasswordAuthentication no
|
472
|
+
IdentityFile /home/root/.vagrant.d/insecure_private_key
|
473
|
+
IdentitiesOnly yes")
|
474
|
+
end
|
475
|
+
|
476
|
+
it "can generate a ssh-config file" do
|
477
|
+
expect( Tempfile ).to receive( :new ).with( "#{host.name}").and_return( file )
|
478
|
+
expect( file ).to receive( :write ).with("Host ip.address.for.#{name}\n HostName 127.0.0.1\n User root\n Port 2222\n UserKnownHostsFile /dev/null\n StrictHostKeyChecking no\n PasswordAuthentication no\n IdentityFile /home/root/.vagrant.d/insecure_private_key\n IdentitiesOnly no")
|
479
|
+
|
480
|
+
vagrant.set_ssh_config( host, 'root' )
|
481
|
+
expect( host['ssh'] ).to be === { :config => file.path }
|
482
|
+
expect( host['user']).to be === 'root'
|
483
|
+
end
|
484
|
+
|
485
|
+
context "when :forward_ssh_agent is false" do
|
486
|
+
it "should not change IdentitiesOnly to no" do
|
487
|
+
options = vagrant.instance_variable_get( :@options )
|
488
|
+
options['forward_ssh_agent'] = false
|
489
|
+
options = vagrant.instance_variable_set( :@options, options )
|
490
|
+
|
491
|
+
expect( Tempfile ).to receive( :new ).with( "#{host.name}").and_return( file )
|
492
|
+
expect( file ).to receive( :write ).with("Host ip.address.for.#{name}\n HostName 127.0.0.1\n User root\n Port 2222\n UserKnownHostsFile /dev/null\n StrictHostKeyChecking no\n PasswordAuthentication no\n IdentityFile /home/root/.vagrant.d/insecure_private_key\n IdentitiesOnly yes")
|
424
493
|
|
494
|
+
vagrant.set_ssh_config( host, 'root' )
|
495
|
+
expect( host['ssh'] ).to be === { :config => file.path }
|
496
|
+
expect( host['user']).to be === 'root'
|
497
|
+
end
|
498
|
+
end
|
499
|
+
end
|
500
|
+
|
501
|
+
context 'with options[:provision] = false' do
|
502
|
+
let(:options) { super().merge(provision: false) }
|
503
|
+
|
504
|
+
context 'when Vagrantfile does not exist' do
|
505
|
+
it 'raises an error' do
|
506
|
+
expect { vagrant.configure }.to raise_error RuntimeError, /no vagrant file was found/
|
507
|
+
end
|
508
|
+
end
|
509
|
+
|
510
|
+
it 'calls #get_ip_from_vagrant_file' do
|
511
|
+
vagrant.make_vfile(@hosts)
|
512
|
+
|
513
|
+
@hosts.each do |host|
|
514
|
+
allow(vagrant).to receive(:set_ssh_config).with(host, anything)
|
515
|
+
expect(vagrant).to receive(:get_ip_from_vagrant_file).with(host.name)
|
516
|
+
end
|
517
|
+
|
518
|
+
vagrant.configure
|
519
|
+
end
|
520
|
+
|
521
|
+
it 'calls #set_all_ssh_config' do
|
522
|
+
vagrant.make_vfile(@hosts)
|
523
|
+
expect(vagrant).to receive(:set_all_ssh_config)
|
524
|
+
vagrant.configure
|
525
|
+
end
|
526
|
+
end
|
527
|
+
|
528
|
+
describe '#set_all_ssh_config' do
|
529
|
+
before do
|
530
|
+
allow(vagrant).to receive(:set_ssh_config)
|
531
|
+
end
|
532
|
+
|
533
|
+
it 'calls #set_ssh_config' do
|
534
|
+
@hosts.each do |host|
|
535
|
+
expect(vagrant).to receive(:set_ssh_config).with(host, 'vagrant')
|
536
|
+
expect(vagrant).to receive(:set_ssh_config).with(host, host['user'])
|
537
|
+
end
|
538
|
+
|
539
|
+
vagrant.set_all_ssh_config
|
540
|
+
end
|
541
|
+
|
542
|
+
it 'calls #copy_ssh_to_root' do
|
543
|
+
@hosts.each do |host|
|
544
|
+
expect(vagrant).to receive(:copy_ssh_to_root).with(host, options)
|
545
|
+
end
|
546
|
+
|
547
|
+
vagrant.set_all_ssh_config
|
548
|
+
end
|
549
|
+
|
550
|
+
it 'calls #enable_root_login' do
|
551
|
+
@hosts.each do |host|
|
552
|
+
expect(vagrant).to receive(:enable_root_login).with(host, options)
|
553
|
+
end
|
554
|
+
|
555
|
+
vagrant.set_all_ssh_config
|
556
|
+
end
|
557
|
+
|
558
|
+
it 'calls #hack_etc_hosts' do
|
559
|
+
expect(vagrant).to receive(:hack_etc_hosts).with(@hosts, options)
|
560
|
+
vagrant.set_all_ssh_config
|
561
|
+
end
|
425
562
|
end
|
426
563
|
|
427
564
|
describe "get_ip_from_vagrant_file" do
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: beaker-vagrant
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.6.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Rishi Javia, Kevin Imber, Tony Vu
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-
|
11
|
+
date: 2018-11-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rspec
|