beaker-vagrant 0.7.1 → 1.0.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/.github/dependabot.yml +9 -0
- data/.github/workflows/release.yml +17 -9
- data/.github/workflows/test.yml +40 -11
- data/.rubocop.yml +4 -0
- data/.rubocop_todo.yml +383 -0
- data/CHANGELOG.md +194 -19
- data/Gemfile +3 -24
- data/README.md +26 -9
- data/Rakefile +34 -120
- data/beaker-vagrant.gemspec +24 -24
- data/bin/beaker-vagrant +1 -3
- data/lib/beaker/hypervisor/vagrant/mount_folder.rb +1 -1
- data/lib/beaker/hypervisor/vagrant.rb +72 -83
- data/lib/beaker/hypervisor/vagrant_custom.rb +1 -1
- data/lib/beaker/hypervisor/vagrant_desktop.rb +9 -5
- data/lib/beaker/hypervisor/vagrant_libvirt.rb +1 -1
- data/lib/beaker/hypervisor/vagrant_parallels.rb +2 -2
- data/lib/beaker/hypervisor/vagrant_virtualbox.rb +35 -32
- data/lib/beaker/hypervisor/vagrant_workstation.rb +9 -5
- data/lib/beaker-vagrant/version.rb +1 -1
- data/spec/beaker/hypervisor/vagrant_custom_spec.rb +14 -15
- data/spec/beaker/hypervisor/vagrant_desktop_spec.rb +20 -20
- data/spec/beaker/hypervisor/vagrant_fusion_spec.rb +11 -11
- data/spec/beaker/hypervisor/vagrant_libvirt_spec.rb +22 -21
- data/spec/beaker/hypervisor/vagrant_parallels_spec.rb +15 -15
- data/spec/beaker/hypervisor/vagrant_spec.rb +301 -309
- data/spec/beaker/hypervisor/vagrant_virtualbox_spec.rb +50 -29
- data/spec/beaker/hypervisor/vagrant_workstation_spec.rb +20 -20
- data/spec/spec_helper.rb +1 -2
- metadata +68 -36
@@ -3,414 +3,412 @@ require 'spec_helper'
|
|
3
3
|
|
4
4
|
module Beaker
|
5
5
|
describe Vagrant do
|
6
|
-
|
7
|
-
let( :options ) {
|
6
|
+
let(:options) do
|
8
7
|
make_opts.merge({
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
8
|
+
'logger' => double.as_null_object,
|
9
|
+
:hosts_file => 'sample.cfg',
|
10
|
+
:forward_ssh_agent => true,
|
11
|
+
})
|
12
|
+
end
|
14
13
|
|
15
|
-
let(
|
14
|
+
let(:vagrant) { Beaker::Vagrant.new(@hosts, options) }
|
16
15
|
|
17
16
|
before :each do
|
18
17
|
@hosts = make_hosts({
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
18
|
+
mount_folders: {
|
19
|
+
test_temp: { from: './', to: '/temp' },
|
20
|
+
test_tmp: { from: '../', to: '/tmp' }
|
21
|
+
},
|
22
|
+
forwarded_ports: {
|
23
|
+
http: { from: 10_080, to: 80 },
|
24
|
+
ssl: { from: 4443, to: 443 },
|
25
|
+
tomcat: { from: 8080, to: 8080 }
|
26
|
+
},
|
27
|
+
platform: Beaker::Platform.new('centos-8-x86_64')
|
28
|
+
})
|
30
29
|
end
|
31
30
|
|
32
|
-
it
|
33
|
-
path = vagrant.instance_variable_get(
|
34
|
-
|
35
|
-
expect( path ).to be === File.join(Dir.pwd, '.vagrant', 'beaker_vagrant_files', 'beaker_sample.cfg')
|
31
|
+
it 'stores the vagrant file in $WORKINGDIR/.vagrant/beaker_vagrant_files/beaker_sample.cfg' do
|
32
|
+
path = vagrant.instance_variable_get(:@vagrant_path)
|
36
33
|
|
34
|
+
expect(path).to be === File.join(Dir.pwd, '.vagrant', 'beaker_vagrant_files', 'beaker_sample.cfg')
|
37
35
|
end
|
38
36
|
|
39
|
-
it
|
40
|
-
path = vagrant.instance_variable_get(
|
37
|
+
it 'can make a Vagrantfile for a set of hosts' do
|
38
|
+
path = vagrant.instance_variable_get(:@vagrant_path)
|
41
39
|
|
42
|
-
vagrant.make_vfile(
|
40
|
+
vagrant.make_vfile(@hosts)
|
43
41
|
|
44
|
-
vagrantfile = File.read(
|
42
|
+
vagrantfile = File.read(File.expand_path(File.join(path, 'Vagrantfile')))
|
45
43
|
puts "file is #{path}\n"
|
46
|
-
expect(
|
47
|
-
Vagrant.configure("2") do |c|
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
end
|
95
|
-
EOF
|
44
|
+
expect(vagrantfile).to be === <<~EOF
|
45
|
+
Vagrant.configure("2") do |c|
|
46
|
+
c.ssh.insert_key = false
|
47
|
+
c.vm.define 'vm1' do |v|
|
48
|
+
v.vm.hostname = 'vm1'
|
49
|
+
v.vm.box = 'vm2vm1_of_my_box'
|
50
|
+
v.vm.box_url = 'http://address.for.my.box.vm1'
|
51
|
+
v.vm.box_check_update = 'true'
|
52
|
+
v.vm.network :private_network, ip: "ip.address.for.vm1", :netmask => "255.255.0.0"
|
53
|
+
v.vm.synced_folder './', '/temp', create: true
|
54
|
+
v.vm.synced_folder '../', '/tmp', create: true
|
55
|
+
v.vm.network :forwarded_port, guest: 80, host: 10080
|
56
|
+
v.vm.network :forwarded_port, guest: 443, host: 4443
|
57
|
+
v.vm.network :forwarded_port, guest: 8080, host: 8080
|
58
|
+
v.vm.provider :virtualbox do |vb|
|
59
|
+
vb.customize ['modifyvm', :id, '--memory', '1024', '--cpus', '1', '--audio', 'none']
|
60
|
+
end
|
61
|
+
end
|
62
|
+
c.vm.define 'vm2' do |v|
|
63
|
+
v.vm.hostname = 'vm2'
|
64
|
+
v.vm.box = 'vm2vm2_of_my_box'
|
65
|
+
v.vm.box_url = 'http://address.for.my.box.vm2'
|
66
|
+
v.vm.box_check_update = 'true'
|
67
|
+
v.vm.network :private_network, ip: "ip.address.for.vm2", :netmask => "255.255.0.0"
|
68
|
+
v.vm.synced_folder './', '/temp', create: true
|
69
|
+
v.vm.synced_folder '../', '/tmp', create: true
|
70
|
+
v.vm.network :forwarded_port, guest: 80, host: 10080
|
71
|
+
v.vm.network :forwarded_port, guest: 443, host: 4443
|
72
|
+
v.vm.network :forwarded_port, guest: 8080, host: 8080
|
73
|
+
v.vm.provider :virtualbox do |vb|
|
74
|
+
vb.customize ['modifyvm', :id, '--memory', '1024', '--cpus', '1', '--audio', 'none']
|
75
|
+
end
|
76
|
+
end
|
77
|
+
c.vm.define 'vm3' do |v|
|
78
|
+
v.vm.hostname = 'vm3'
|
79
|
+
v.vm.box = 'vm2vm3_of_my_box'
|
80
|
+
v.vm.box_url = 'http://address.for.my.box.vm3'
|
81
|
+
v.vm.box_check_update = 'true'
|
82
|
+
v.vm.network :private_network, ip: "ip.address.for.vm3", :netmask => "255.255.0.0"
|
83
|
+
v.vm.synced_folder './', '/temp', create: true
|
84
|
+
v.vm.synced_folder '../', '/tmp', create: true
|
85
|
+
v.vm.network :forwarded_port, guest: 80, host: 10080
|
86
|
+
v.vm.network :forwarded_port, guest: 443, host: 4443
|
87
|
+
v.vm.network :forwarded_port, guest: 8080, host: 8080
|
88
|
+
v.vm.provider :virtualbox do |vb|
|
89
|
+
vb.customize ['modifyvm', :id, '--memory', '1024', '--cpus', '1', '--audio', 'none']
|
90
|
+
end
|
91
|
+
end
|
92
|
+
end
|
93
|
+
EOF
|
96
94
|
end
|
97
95
|
|
98
|
-
it
|
99
|
-
path = vagrant.instance_variable_get(
|
96
|
+
it 'can make a Vagrantfile with ssh agent forwarding enabled' do
|
97
|
+
path = vagrant.instance_variable_get(:@vagrant_path)
|
100
98
|
|
101
|
-
hosts = make_hosts({},1)
|
102
|
-
vagrant.make_vfile(
|
99
|
+
hosts = make_hosts({}, 1)
|
100
|
+
vagrant.make_vfile(hosts, options)
|
103
101
|
|
104
|
-
vagrantfile = File.read(
|
105
|
-
expect(
|
102
|
+
vagrantfile = File.read(File.expand_path(File.join(path, 'Vagrantfile')))
|
103
|
+
expect(vagrantfile).to match(/(ssh.forward_agent = true)/)
|
106
104
|
end
|
107
105
|
|
108
|
-
it
|
109
|
-
path = vagrant.instance_variable_get(
|
110
|
-
|
111
|
-
host = make_host( 'name-with_underscore', {} )
|
112
|
-
vagrant.make_vfile( [host,], options )
|
106
|
+
it 'can replace underscores in host.name with hypens' do
|
107
|
+
path = vagrant.instance_variable_get(:@vagrant_path)
|
113
108
|
|
114
|
-
|
115
|
-
|
109
|
+
host = make_host('name-with_underscore', {})
|
110
|
+
vagrant.make_vfile([host,], options)
|
116
111
|
|
112
|
+
vagrantfile = File.read(File.expand_path(File.join(path, 'Vagrantfile')))
|
113
|
+
expect(vagrantfile).to match(/v.vm.hostname = .*name-with-underscore/)
|
117
114
|
end
|
118
115
|
|
119
|
-
it
|
120
|
-
path = vagrant.instance_variable_get(
|
116
|
+
it 'can make a Vagrantfile with synced_folder disabled' do
|
117
|
+
path = vagrant.instance_variable_get(:@vagrant_path)
|
121
118
|
|
122
|
-
hosts = make_hosts({:
|
123
|
-
vagrant.make_vfile(
|
119
|
+
hosts = make_hosts({ synced_folder: 'disabled' }, 1)
|
120
|
+
vagrant.make_vfile(hosts, options)
|
124
121
|
|
125
|
-
vagrantfile = File.read(
|
126
|
-
expect(
|
122
|
+
vagrantfile = File.read(File.expand_path(File.join(path, 'Vagrantfile')))
|
123
|
+
expect(vagrantfile).to match(/v.vm.synced_folder .* disabled: true/)
|
127
124
|
end
|
128
125
|
|
129
|
-
it
|
130
|
-
path = vagrant.instance_variable_get(
|
126
|
+
it 'can make a Vagrantfile with network mac specified' do
|
127
|
+
path = vagrant.instance_variable_get(:@vagrant_path)
|
131
128
|
|
132
|
-
hosts = make_hosts({:
|
133
|
-
vagrant.make_vfile(
|
129
|
+
hosts = make_hosts({ network_mac: 'b6:33:ae:19:48:f9' }, 1)
|
130
|
+
vagrant.make_vfile(hosts, options)
|
134
131
|
|
135
|
-
vagrantfile = File.read(
|
136
|
-
expect(
|
132
|
+
vagrantfile = File.read(File.expand_path(File.join(path, 'Vagrantfile')))
|
133
|
+
expect(vagrantfile).to match(/v.vm.network :private_network, ip: "ip.address.for.vm1", :netmask => "255.255.0.0", :mac => "b6:33:ae:19:48:f9/)
|
137
134
|
end
|
138
135
|
|
139
|
-
it
|
140
|
-
path = vagrant.instance_variable_get(
|
136
|
+
it 'can make a Vagrantfile with improper keys for synced folders' do
|
137
|
+
path = vagrant.instance_variable_get(:@vagrant_path)
|
141
138
|
|
142
|
-
hosts = make_hosts({:
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
vagrant.make_vfile(
|
139
|
+
hosts = make_hosts({ mount_folders: {
|
140
|
+
test_invalid1: { host_path: '/invalid1', container_path: '/invalid1' },
|
141
|
+
test_invalid2: { from: '/invalid2', container_path: '/invalid2' },
|
142
|
+
test_invalid3: { host_path: '/invalid3', to: '/invalid3' },
|
143
|
+
test_valid: { from: '/valid', to: '/valid' }
|
144
|
+
} }, 1)
|
145
|
+
vagrant.make_vfile(hosts, options)
|
149
146
|
|
150
|
-
vagrantfile = File.read(
|
147
|
+
vagrantfile = File.read(File.expand_path(File.join(path, 'Vagrantfile')))
|
151
148
|
|
152
|
-
expect(
|
153
|
-
expect(
|
154
|
-
expect(
|
155
|
-
expect(
|
149
|
+
expect(vagrantfile).not_to match(/v.vm.synced_folder '', '', create: true/)
|
150
|
+
expect(vagrantfile).not_to match(%r{v.vm.synced_folder '/invalid2', '', create: true})
|
151
|
+
expect(vagrantfile).not_to match(%r{v.vm.synced_folder '', '/invalid3', create: true})
|
152
|
+
expect(vagrantfile).to match(%r{v.vm.synced_folder '/valid', '/valid', create: true})
|
156
153
|
end
|
157
154
|
|
158
|
-
it
|
159
|
-
path = vagrant.instance_variable_get(
|
155
|
+
it 'can make a Vagrantfile with optional shell provisioner' do
|
156
|
+
path = vagrant.instance_variable_get(:@vagrant_path)
|
160
157
|
|
161
158
|
shell_path = '/path/to/shell/script'
|
162
159
|
hosts = make_hosts({
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
vagrant.make_vfile(
|
168
|
-
|
169
|
-
vagrantfile = File.read(
|
170
|
-
expect(
|
160
|
+
shell_provisioner: {
|
161
|
+
path: shell_path
|
162
|
+
}
|
163
|
+
}, 1)
|
164
|
+
vagrant.make_vfile(hosts, options)
|
165
|
+
|
166
|
+
vagrantfile = File.read(File.expand_path(File.join(path, 'Vagrantfile')))
|
167
|
+
expect(vagrantfile).to match(/v.vm.provision 'shell', :path => '#{shell_path}'/)
|
171
168
|
end
|
172
169
|
|
173
|
-
it
|
174
|
-
path = vagrant.instance_variable_get(
|
170
|
+
it 'can make a Vagrantfile with optional shell provisioner with args' do
|
171
|
+
path = vagrant.instance_variable_get(:@vagrant_path)
|
175
172
|
|
176
173
|
shell_path = '/path/to/shell/script.sh'
|
177
174
|
shell_args = 'arg1 arg2'
|
178
175
|
hosts = make_hosts({
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
vagrant.make_vfile(
|
185
|
-
|
186
|
-
vagrantfile = File.read(
|
187
|
-
expect(
|
176
|
+
shell_provisioner: {
|
177
|
+
path: shell_path,
|
178
|
+
args: shell_args
|
179
|
+
}
|
180
|
+
}, 1)
|
181
|
+
vagrant.make_vfile(hosts, options)
|
182
|
+
|
183
|
+
vagrantfile = File.read(File.expand_path(File.join(path, 'Vagrantfile')))
|
184
|
+
expect(vagrantfile).to match(/v.vm.provision 'shell', :path => '#{shell_path}', :args => '#{shell_args}'/)
|
188
185
|
end
|
189
186
|
|
190
|
-
it
|
191
|
-
path = vagrant.instance_variable_get(
|
187
|
+
it 'raises an error if path is not set on shell_provisioner' do
|
188
|
+
path = vagrant.instance_variable_get(:@vagrant_path)
|
192
189
|
|
193
|
-
hosts = make_hosts({:
|
194
|
-
expect
|
190
|
+
hosts = make_hosts({ shell_provisioner: {} }, 1)
|
191
|
+
expect do
|
192
|
+
vagrant.make_vfile(hosts, options)
|
193
|
+
end.to raise_error RuntimeError, /No path defined for shell_provisioner or path empty/
|
195
194
|
end
|
196
195
|
|
197
|
-
it
|
198
|
-
path = vagrant.instance_variable_get(
|
196
|
+
it 'raises an error if path is EMPTY on shell_provisioner' do
|
197
|
+
path = vagrant.instance_variable_get(:@vagrant_path)
|
199
198
|
|
200
199
|
empty_shell_path = ''
|
201
200
|
hosts = make_hosts({
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
expect
|
201
|
+
shell_provisioner: {
|
202
|
+
path: empty_shell_path
|
203
|
+
}
|
204
|
+
}, 1)
|
205
|
+
expect do
|
206
|
+
vagrant.make_vfile(hosts, options)
|
207
|
+
end.to raise_error RuntimeError, /No path defined for shell_provisioner or path empty/
|
207
208
|
end
|
208
209
|
|
209
|
-
context
|
210
|
+
context 'when generating a windows config' do
|
210
211
|
before do
|
211
|
-
path = vagrant.instance_variable_get(
|
212
|
+
path = vagrant.instance_variable_get(:@vagrant_path)
|
212
213
|
@hosts[0][:platform] = 'windows'
|
213
214
|
|
214
|
-
vagrant.make_vfile(
|
215
|
+
vagrant.make_vfile(@hosts)
|
215
216
|
|
216
|
-
@generated_file = File.read(
|
217
|
+
@generated_file = File.read(File.expand_path(File.join(path, 'Vagrantfile')))
|
217
218
|
end
|
218
219
|
|
219
220
|
it 'has the proper port forwarding for RDP' do
|
220
|
-
expect(
|
221
|
+
expect(@generated_file).to match /v.vm.network :forwarded_port, guest: 3389, host: 3389, id: 'rdp', auto_correct: true/
|
221
222
|
end
|
222
223
|
|
223
224
|
it 'has the proper port forwarding for WinRM' do
|
224
|
-
expect(
|
225
|
+
expect(@generated_file).to match /v.vm.network :forwarded_port, guest: 5985, host: 5985, id: 'winrm', auto_correct: true/
|
225
226
|
end
|
226
227
|
|
227
228
|
it 'configures the guest type to windows' do
|
228
|
-
expect(
|
229
|
+
expect(@generated_file).to match /v.vm.guest = :windows/
|
229
230
|
end
|
230
231
|
|
231
232
|
it 'configures the guest type to use winrm' do
|
232
|
-
expect(
|
233
|
+
expect(@generated_file).to match /v.vm.communicator = 'winrm'/
|
233
234
|
end
|
234
235
|
|
235
236
|
it 'sets a non-default memsize' do
|
236
|
-
expect(
|
237
|
+
expect(@generated_file).to match /'--memory', '2048',/
|
237
238
|
end
|
238
239
|
end
|
239
240
|
|
240
241
|
context 'when generating a freebsd config' do
|
241
242
|
before do
|
242
|
-
path = vagrant.instance_variable_get(
|
243
|
+
path = vagrant.instance_variable_get(:@vagrant_path)
|
243
244
|
@hosts[0][:platform] = 'freebsd'
|
244
245
|
|
245
|
-
vagrant.make_vfile(
|
246
|
+
vagrant.make_vfile(@hosts)
|
246
247
|
|
247
|
-
@generated_file = File.read(
|
248
|
+
@generated_file = File.read(File.expand_path(File.join(path, 'Vagrantfile')))
|
248
249
|
end
|
249
250
|
|
250
251
|
it 'has the proper ssh shell' do
|
251
|
-
expect(
|
252
|
+
expect(@generated_file).to match /v.ssh.shell = 'sh'\n/
|
252
253
|
end
|
253
254
|
|
254
255
|
it 'has the proper guest setting' do
|
255
|
-
expect(
|
256
|
+
expect(@generated_file).to match /v.vm.guest = :freebsd\n/
|
256
257
|
end
|
257
258
|
end
|
258
259
|
|
259
|
-
it
|
260
|
-
path = vagrant.instance_variable_get(
|
260
|
+
it 'uses the memsize defined per vagrant host' do
|
261
|
+
path = vagrant.instance_variable_get(:@vagrant_path)
|
261
262
|
|
262
|
-
vagrant.make_vfile(
|
263
|
+
vagrant.make_vfile(@hosts, { 'vagrant_memsize' => 'hello!' })
|
263
264
|
|
264
|
-
generated_file = File.read(
|
265
|
+
generated_file = File.read(File.expand_path(File.join(path, 'Vagrantfile')))
|
265
266
|
|
266
267
|
match = generated_file.match(/vb.customize \['modifyvm', :id, '--memory', 'hello!', '--cpus', '1', '--audio', 'none'\]/)
|
267
268
|
|
268
|
-
expect(
|
269
|
-
|
269
|
+
expect(match).to_not be nil
|
270
270
|
end
|
271
271
|
|
272
|
-
it
|
273
|
-
path = vagrant.instance_variable_get(
|
272
|
+
it 'uses the cpus defined per vagrant host' do
|
273
|
+
path = vagrant.instance_variable_get(:@vagrant_path)
|
274
274
|
|
275
|
-
vagrant.make_vfile(
|
275
|
+
vagrant.make_vfile(@hosts, { 'vagrant_cpus' => 'goodbye!' })
|
276
276
|
|
277
|
-
generated_file = File.read(
|
277
|
+
generated_file = File.read(File.expand_path(File.join(path, 'Vagrantfile')))
|
278
278
|
|
279
279
|
match = generated_file.match(/vb.customize \['modifyvm', :id, '--memory', '1024', '--cpus', 'goodbye!', '--audio', 'none'\]/)
|
280
280
|
|
281
|
-
expect(
|
282
|
-
|
281
|
+
expect(match).to_not be nil
|
283
282
|
end
|
284
283
|
|
285
|
-
context
|
286
|
-
it
|
287
|
-
path = vagrant.instance_variable_get(
|
284
|
+
context 'port forwarding rules' do
|
285
|
+
it 'supports all Vagrant parameters' do
|
286
|
+
path = vagrant.instance_variable_get(:@vagrant_path)
|
288
287
|
|
289
288
|
hosts = make_hosts(
|
290
289
|
{
|
291
|
-
:
|
292
|
-
:
|
293
|
-
:
|
294
|
-
:
|
295
|
-
:
|
296
|
-
:
|
297
|
-
:
|
290
|
+
forwarded_ports: {
|
291
|
+
http: {
|
292
|
+
from: 10_080,
|
293
|
+
from_ip: '127.0.0.1',
|
294
|
+
to: 80,
|
295
|
+
to_ip: '0.0.0.0',
|
296
|
+
protocol: 'udp'
|
298
297
|
}
|
299
298
|
}
|
300
|
-
},1
|
301
|
-
|
299
|
+
}, 1
|
300
|
+
)
|
301
|
+
vagrant.make_vfile(hosts, options)
|
302
302
|
|
303
|
-
vagrantfile = File.read(
|
304
|
-
expect(
|
303
|
+
vagrantfile = File.read(File.expand_path(File.join(path, 'Vagrantfile')))
|
304
|
+
expect(vagrantfile).to match(/v.vm.network :forwarded_port, protocol: 'udp', guest_ip: '0.0.0.0', guest: 80, host_ip: '127.0.0.1', host: 10080/)
|
305
305
|
end
|
306
306
|
|
307
|
-
it
|
308
|
-
path = vagrant.instance_variable_get(
|
307
|
+
it 'supports supports from_ip' do
|
308
|
+
path = vagrant.instance_variable_get(:@vagrant_path)
|
309
309
|
|
310
310
|
hosts = make_hosts(
|
311
|
-
|
312
|
-
|
313
|
-
|
314
|
-
|
315
|
-
|
316
|
-
|
317
|
-
|
318
|
-
|
319
|
-
|
320
|
-
|
311
|
+
{
|
312
|
+
forwarded_ports: {
|
313
|
+
http: {
|
314
|
+
from: 10_080,
|
315
|
+
from_ip: '127.0.0.1',
|
316
|
+
to: 80,
|
317
|
+
}
|
318
|
+
}
|
319
|
+
}, 1
|
320
|
+
)
|
321
|
+
vagrant.make_vfile(hosts, options)
|
321
322
|
|
322
|
-
vagrantfile = File.read(
|
323
|
-
expect(
|
323
|
+
vagrantfile = File.read(File.expand_path(File.join(path, 'Vagrantfile')))
|
324
|
+
expect(vagrantfile).to match(/v.vm.network :forwarded_port, guest: 80, host_ip: '127.0.0.1', host: 10080/)
|
324
325
|
end
|
325
326
|
|
326
|
-
it
|
327
|
-
path = vagrant.instance_variable_get(
|
327
|
+
it 'supports all to_ip' do
|
328
|
+
path = vagrant.instance_variable_get(:@vagrant_path)
|
328
329
|
|
329
330
|
hosts = make_hosts(
|
330
|
-
|
331
|
-
|
332
|
-
|
333
|
-
|
334
|
-
|
335
|
-
|
336
|
-
|
337
|
-
|
338
|
-
|
339
|
-
|
331
|
+
{
|
332
|
+
forwarded_ports: {
|
333
|
+
http: {
|
334
|
+
from: 10_080,
|
335
|
+
to: 80,
|
336
|
+
to_ip: '0.0.0.0',
|
337
|
+
}
|
338
|
+
}
|
339
|
+
}, 1
|
340
|
+
)
|
341
|
+
vagrant.make_vfile(hosts, options)
|
340
342
|
|
341
|
-
vagrantfile = File.read(
|
342
|
-
expect(
|
343
|
+
vagrantfile = File.read(File.expand_path(File.join(path, 'Vagrantfile')))
|
344
|
+
expect(vagrantfile).to match(/v.vm.network :forwarded_port, guest_ip: '0.0.0.0', guest: 80, host: 10080/)
|
343
345
|
end
|
344
346
|
|
345
|
-
it
|
346
|
-
path = vagrant.instance_variable_get(
|
347
|
+
it 'supports all protocol' do
|
348
|
+
path = vagrant.instance_variable_get(:@vagrant_path)
|
347
349
|
|
348
350
|
hosts = make_hosts(
|
349
|
-
|
350
|
-
|
351
|
-
|
352
|
-
|
353
|
-
|
354
|
-
|
355
|
-
|
356
|
-
|
357
|
-
|
358
|
-
|
359
|
-
|
360
|
-
vagrantfile = File.read( File.expand_path( File.join( path, "Vagrantfile")))
|
361
|
-
expect( vagrantfile ).to match(/v.vm.network :forwarded_port, protocol: 'udp', guest: 80, host: 10080/)
|
351
|
+
{
|
352
|
+
forwarded_ports: {
|
353
|
+
http: {
|
354
|
+
from: 10_080,
|
355
|
+
to: 80,
|
356
|
+
protocol: 'udp'
|
357
|
+
}
|
358
|
+
}
|
359
|
+
}, 1
|
360
|
+
)
|
361
|
+
vagrant.make_vfile(hosts, options)
|
362
362
|
|
363
|
+
vagrantfile = File.read(File.expand_path(File.join(path, 'Vagrantfile')))
|
364
|
+
expect(vagrantfile).to match(/v.vm.network :forwarded_port, protocol: 'udp', guest: 80, host: 10080/)
|
363
365
|
end
|
364
366
|
end
|
365
367
|
|
366
|
-
it
|
367
|
-
|
368
|
+
it 'can generate a new /etc/hosts file referencing each host' do
|
368
369
|
@hosts.each do |host|
|
369
|
-
expect(
|
370
|
-
expect(
|
370
|
+
expect(vagrant).to receive(:get_domain_name).with(host).and_return('labs.lan')
|
371
|
+
expect(vagrant).to receive(:set_etc_hosts).with(host,
|
372
|
+
"127.0.0.1\tlocalhost localhost.localdomain\nip.address.for.vm1\tvm1.labs.lan vm1\nip.address.for.vm2\tvm2.labs.lan vm2\nip.address.for.vm3\tvm3.labs.lan vm3\n").once
|
371
373
|
end
|
372
374
|
|
373
|
-
vagrant.hack_etc_hosts(
|
374
|
-
|
375
|
+
vagrant.hack_etc_hosts(@hosts, options)
|
375
376
|
end
|
376
377
|
|
377
378
|
context "can copy vagrant's key to root .ssh on each host" do
|
378
|
-
|
379
|
-
it "can copy to root on unix" do
|
379
|
+
it 'can copy to root on unix' do
|
380
380
|
host = @hosts[0]
|
381
381
|
host[:platform] = 'unix'
|
382
382
|
|
383
|
-
expect(
|
384
|
-
expect(
|
385
|
-
expect(
|
386
|
-
|
387
|
-
vagrant.copy_ssh_to_root( host, options )
|
383
|
+
expect(Command).to receive(:new).with('sudo su -c "cp -r .ssh /root/."').once
|
384
|
+
expect(Command).to receive(:new).with('sudo fixfiles restore /root').once
|
385
|
+
expect(Command).to receive(:new).with('sudo selinuxenabled').once
|
388
386
|
|
387
|
+
vagrant.copy_ssh_to_root(host, options)
|
389
388
|
end
|
390
389
|
|
391
|
-
it
|
390
|
+
it 'can copy to Administrator on windows' do
|
392
391
|
host = @hosts[0]
|
393
392
|
host[:platform] = 'windows'
|
394
|
-
expect(
|
393
|
+
expect(host).to receive(:is_cygwin?).and_return(true)
|
395
394
|
|
396
|
-
expect(
|
397
|
-
expect(
|
398
|
-
expect(
|
395
|
+
expect(Command).to_not receive(:new).with('sudo fixfiles restore /root')
|
396
|
+
expect(Command).to receive(:new).with('cp -r .ssh /cygdrive/c/Users/Administrator/.').once
|
397
|
+
expect(Command).to receive(:new).with('chown -R Administrator /cygdrive/c/Users/Administrator/.ssh').once
|
399
398
|
|
400
399
|
# This is checked on all platforms since Linux isn't called out specifically in the code
|
401
400
|
# If this fails, nothing further is activated
|
402
401
|
result = Beaker::Result.new(host, '')
|
403
402
|
result.exit_code = 1
|
404
|
-
expect(
|
405
|
-
allow(
|
406
|
-
|
407
|
-
vagrant.copy_ssh_to_root( host, options )
|
403
|
+
expect(Command).to receive(:new).with('sudo selinuxenabled')
|
404
|
+
allow(host).to receive(:exec).and_return(result)
|
408
405
|
|
406
|
+
vagrant.copy_ssh_to_root(host, options)
|
409
407
|
end
|
410
408
|
end
|
411
409
|
|
412
|
-
describe
|
413
|
-
let(
|
410
|
+
describe 'set_ssh_config' do
|
411
|
+
let(:out) do
|
414
412
|
<<-CONFIG
|
415
413
|
Host #{name}
|
416
414
|
HostName 127.0.0.1
|
@@ -423,9 +421,9 @@ EOF
|
|
423
421
|
IdentitiesOnly yes
|
424
422
|
CONFIG
|
425
423
|
end
|
426
|
-
let(
|
427
|
-
let(
|
428
|
-
let(
|
424
|
+
let(:host) { @hosts[0] }
|
425
|
+
let(:name) { host.name }
|
426
|
+
let(:override_options) { {} }
|
429
427
|
|
430
428
|
before :each do
|
431
429
|
# FakeFS is just broken with Tempfile
|
@@ -433,11 +431,12 @@ EOF
|
|
433
431
|
Dir.mktmpdir do |dir|
|
434
432
|
vagrant.instance_variable_get(:@options).merge!(override_options)
|
435
433
|
vagrant.instance_variable_set(:@vagrant_path, dir)
|
436
|
-
state = double(
|
437
|
-
allow(
|
438
|
-
allow(
|
434
|
+
state = double('state')
|
435
|
+
allow(state).to receive(:success?).and_return(true)
|
436
|
+
allow(Open3).to receive(:capture3).with({ 'RUBYLIB' => '', 'RUBYOPT' => '' }, 'vagrant', 'ssh-config',
|
437
|
+
name).and_return([out, '', state])
|
439
438
|
|
440
|
-
vagrant.set_ssh_config(
|
439
|
+
vagrant.set_ssh_config(host, 'root')
|
441
440
|
end
|
442
441
|
end
|
443
442
|
|
@@ -454,13 +453,13 @@ EOF
|
|
454
453
|
expect(host['ssh'][:keys_only]).to be === false
|
455
454
|
end
|
456
455
|
|
457
|
-
context
|
456
|
+
context 'when :forward_ssh_agent is false' do
|
458
457
|
let(:override_options) do
|
459
|
-
{forward_ssh_agent: false}
|
458
|
+
{ forward_ssh_agent: false }
|
460
459
|
end
|
461
460
|
|
462
|
-
it
|
463
|
-
expect(
|
461
|
+
it 'should keep IdentitiesOnly to yes' do
|
462
|
+
expect(host['ssh'][:keys_only]).to be === true
|
464
463
|
end
|
465
464
|
end
|
466
465
|
end
|
@@ -517,87 +516,80 @@ EOF
|
|
517
516
|
end
|
518
517
|
end
|
519
518
|
|
520
|
-
describe
|
521
|
-
|
519
|
+
describe 'provisioning and cleanup' do
|
522
520
|
before :each do
|
523
|
-
expect(
|
521
|
+
expect(vagrant).to receive(:vagrant_cmd).with('up').once
|
524
522
|
@hosts.each do |host|
|
525
523
|
host_prev_name = host['user']
|
526
|
-
expect(
|
527
|
-
expect(
|
528
|
-
expect(
|
524
|
+
expect(vagrant).to receive(:set_ssh_config).with(host, 'vagrant').once
|
525
|
+
expect(vagrant).to receive(:copy_ssh_to_root).with(host, options).once
|
526
|
+
expect(vagrant).to receive(:set_ssh_config).with(host, host_prev_name).once
|
529
527
|
end
|
530
|
-
expect(
|
528
|
+
expect(vagrant).to receive(:hack_etc_hosts).with(@hosts, options).once
|
531
529
|
end
|
532
530
|
|
533
|
-
it
|
534
|
-
options = vagrant.instance_variable_get(
|
535
|
-
expect(
|
536
|
-
expect(
|
531
|
+
it 'can provision a set of hosts' do
|
532
|
+
options = vagrant.instance_variable_get(:@options)
|
533
|
+
expect(vagrant).to receive(:make_vfile).with(@hosts, options).once
|
534
|
+
expect(vagrant).to receive(:vagrant_cmd).with('destroy --force').never
|
537
535
|
vagrant.provision
|
538
536
|
end
|
539
537
|
|
540
|
-
it
|
541
|
-
vagrant.make_vfile(
|
542
|
-
expect(
|
538
|
+
it 'destroys an existing set of hosts before provisioning' do
|
539
|
+
vagrant.make_vfile(@hosts)
|
540
|
+
expect(vagrant).to receive(:vagrant_cmd).with('destroy --force').once
|
543
541
|
vagrant.provision
|
544
542
|
end
|
545
543
|
|
546
|
-
it
|
544
|
+
it 'notifies user of failed provision' do
|
547
545
|
vagrant.provision
|
548
|
-
expect(
|
549
|
-
expect(
|
550
|
-
expect{ vagrant.provision }.to raise_error(
|
546
|
+
expect(vagrant).to receive(:vagrant_cmd).with('destroy --force').and_raise(RuntimeError)
|
547
|
+
expect(options['logger']).to receive(:debug).with(/Vagrantfile/)
|
548
|
+
expect { vagrant.provision }.to raise_error(RuntimeError)
|
551
549
|
end
|
552
550
|
|
553
|
-
it
|
554
|
-
expect(
|
555
|
-
expect(
|
551
|
+
it 'can cleanup' do
|
552
|
+
expect(vagrant).to receive(:vagrant_cmd).with('destroy --force').once
|
553
|
+
expect(FileUtils).to receive(:rm_rf).once
|
556
554
|
|
557
555
|
vagrant.provision
|
558
556
|
vagrant.cleanup
|
559
|
-
|
560
557
|
end
|
561
|
-
|
562
558
|
end
|
563
559
|
|
564
|
-
describe
|
560
|
+
describe 'provisioning and cleanup on windows' do
|
565
561
|
before :each do
|
566
|
-
expect(
|
562
|
+
expect(vagrant).to receive(:vagrant_cmd).with('up').once
|
567
563
|
@hosts.each do |host|
|
568
564
|
host[:platform] = 'windows'
|
569
565
|
host_prev_name = host['user']
|
570
|
-
expect(
|
571
|
-
expect(
|
572
|
-
expect(
|
566
|
+
expect(vagrant).not_to receive(:set_ssh_config).with(host, 'vagrant')
|
567
|
+
expect(vagrant).not_to receive(:copy_ssh_to_root).with(host, options)
|
568
|
+
expect(vagrant).to receive(:set_ssh_config).with(host, host_prev_name).once
|
573
569
|
end
|
574
|
-
expect(
|
570
|
+
expect(vagrant).to receive(:hack_etc_hosts).with(@hosts, options).once
|
575
571
|
end
|
576
572
|
|
577
|
-
it
|
578
|
-
options = vagrant.instance_variable_get(
|
579
|
-
expect(
|
580
|
-
expect(
|
573
|
+
it 'can provision a set of hosts' do
|
574
|
+
options = vagrant.instance_variable_get(:@options)
|
575
|
+
expect(vagrant).to receive(:make_vfile).with(@hosts, options).once
|
576
|
+
expect(vagrant).to receive(:vagrant_cmd).with('destroy --force').never
|
581
577
|
vagrant.provision
|
582
578
|
end
|
583
579
|
|
584
|
-
it
|
585
|
-
vagrant.make_vfile(
|
586
|
-
expect(
|
580
|
+
it 'destroys an existing set of hosts before provisioning' do
|
581
|
+
vagrant.make_vfile(@hosts)
|
582
|
+
expect(vagrant).to receive(:vagrant_cmd).with('destroy --force').once
|
587
583
|
vagrant.provision
|
588
584
|
end
|
589
585
|
|
590
|
-
it
|
591
|
-
expect(
|
592
|
-
expect(
|
586
|
+
it 'can cleanup' do
|
587
|
+
expect(vagrant).to receive(:vagrant_cmd).with('destroy --force').once
|
588
|
+
expect(FileUtils).to receive(:rm_rf).once
|
593
589
|
|
594
590
|
vagrant.provision
|
595
591
|
vagrant.cleanup
|
596
|
-
|
597
592
|
end
|
598
|
-
|
599
593
|
end
|
600
|
-
|
601
594
|
end
|
602
|
-
|
603
595
|
end
|