vagrant-libvirt 0.6.3 → 0.8.1
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 +65 -13
- data/lib/vagrant-libvirt/action/cleanup_on_failure.rb +76 -0
- data/lib/vagrant-libvirt/action/create_domain.rb +56 -10
- data/lib/vagrant-libvirt/action/create_network_interfaces.rb +5 -1
- data/lib/vagrant-libvirt/action/create_networks.rb +24 -0
- data/lib/vagrant-libvirt/action/destroy_domain.rb +106 -21
- data/lib/vagrant-libvirt/action/destroy_networks.rb +1 -1
- data/lib/vagrant-libvirt/action/forward_ports.rb +12 -11
- data/lib/vagrant-libvirt/action/prepare_nfs_settings.rb +1 -1
- data/lib/vagrant-libvirt/action/start_domain.rb +36 -0
- data/lib/vagrant-libvirt/action/wait_till_up.rb +6 -32
- data/lib/vagrant-libvirt/action.rb +72 -83
- data/lib/vagrant-libvirt/config.rb +85 -30
- data/lib/vagrant-libvirt/driver.rb +11 -9
- data/lib/vagrant-libvirt/errors.rb +12 -0
- data/lib/vagrant-libvirt/templates/domain.xml.erb +228 -218
- data/lib/vagrant-libvirt/templates/private_network.xml.erb +4 -1
- data/lib/vagrant-libvirt/util/network_util.rb +15 -3
- data/lib/vagrant-libvirt/util/nfs.rb +2 -0
- data/lib/vagrant-libvirt/util/resolvers.rb +80 -0
- data/lib/vagrant-libvirt/version +1 -1
- data/locales/en.yml +17 -0
- data/spec/spec_helper.rb +36 -23
- data/spec/support/libvirt_context.rb +7 -4
- data/spec/support/sharedcontext.rb +1 -1
- data/spec/unit/action/cleanup_on_failure_spec.rb +131 -0
- data/spec/unit/action/create_domain_spec/additional_disks_domain.xml +6 -18
- data/spec/unit/action/create_domain_spec/custom_disk_settings.xml +43 -0
- data/spec/unit/action/create_domain_spec/default_domain.xml +6 -18
- data/spec/unit/action/create_domain_spec/two_disk_settings.xml +49 -0
- data/spec/unit/action/create_domain_spec.rb +51 -7
- data/spec/unit/action/create_domain_volume_spec.rb +5 -3
- data/spec/unit/action/destroy_domain_spec/additional_disks_domain.xml +47 -0
- data/spec/unit/action/destroy_domain_spec/box_multiple_disks.xml +55 -0
- data/spec/unit/action/destroy_domain_spec/box_multiple_disks_and_additional_and_custom_disks.xml +72 -0
- data/spec/unit/action/destroy_domain_spec/box_multiple_disks_and_additional_and_custom_disks_no_aliases.xml +67 -0
- data/spec/unit/action/destroy_domain_spec/box_multiple_disks_and_additional_disks.xml +67 -0
- data/spec/unit/action/destroy_domain_spec/cdrom_domain.xml +48 -0
- data/spec/unit/action/destroy_domain_spec.rb +134 -30
- data/spec/unit/action/forward_ports_spec.rb +10 -2
- data/spec/unit/action/prepare_nfs_settings_spec.rb +59 -0
- data/spec/unit/action/shutdown_domain_spec.rb +1 -1
- data/spec/unit/action/start_domain_spec/clock_timer_rtc.xml +6 -18
- data/spec/unit/action/start_domain_spec/default.xml +6 -18
- data/spec/unit/action/start_domain_spec/default_added_tpm_path.xml +6 -18
- data/spec/unit/action/start_domain_spec/default_added_tpm_version.xml +6 -18
- data/spec/unit/action/start_domain_spec/existing.xml +1 -1
- data/spec/unit/action/wait_till_up_spec.rb +4 -43
- data/spec/unit/action_spec.rb +2 -0
- data/spec/unit/config_spec.rb +133 -26
- data/spec/unit/driver_spec.rb +154 -10
- data/spec/unit/templates/domain_all_settings.xml +56 -77
- data/spec/unit/templates/domain_cpu_mode_passthrough.xml +39 -0
- data/spec/unit/templates/domain_custom_cpu_model.xml +6 -18
- data/spec/unit/templates/domain_defaults.xml +6 -18
- data/spec/unit/templates/domain_spec.rb +39 -13
- data/spec/unit/templates/tpm/version_1.2.xml +6 -18
- data/spec/unit/templates/tpm/version_2.0.xml +6 -18
- data/spec/unit/util/resolvers_spec.rb +116 -0
- metadata +40 -41
@@ -0,0 +1,59 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
require 'support/sharedcontext'
|
5
|
+
|
6
|
+
require 'vagrant-libvirt/action/prepare_nfs_settings'
|
7
|
+
|
8
|
+
|
9
|
+
describe VagrantPlugins::ProviderLibvirt::Action::PrepareNFSSettings do
|
10
|
+
subject { described_class.new(app, env) }
|
11
|
+
|
12
|
+
include_context 'unit'
|
13
|
+
|
14
|
+
describe '#call' do
|
15
|
+
before do
|
16
|
+
# avoid requiring nfsd installed to run tests
|
17
|
+
allow(machine.env.host).to receive(:capability?).with(:nfs_installed).and_return(true)
|
18
|
+
allow(machine.env.host).to receive(:capability).with(:nfs_installed).and_return(true)
|
19
|
+
end
|
20
|
+
|
21
|
+
context 'when enabled' do
|
22
|
+
let(:vagrantfile) do
|
23
|
+
<<-EOF
|
24
|
+
Vagrant.configure('2') do |config|
|
25
|
+
config.vm.box = "vagrant-libvirt/test"
|
26
|
+
config.vm.define :test
|
27
|
+
config.vm.synced_folder ".", "/vagrant", type: "nfs"
|
28
|
+
config.vm.provider :libvirt do |libvirt|
|
29
|
+
#{vagrantfile_providerconfig}
|
30
|
+
end
|
31
|
+
end
|
32
|
+
EOF
|
33
|
+
end
|
34
|
+
let(:socket) { double('socket') }
|
35
|
+
let(:udp_socket) { double('udp_socket') }
|
36
|
+
|
37
|
+
before do
|
38
|
+
allow(::TCPSocket).to receive(:new).and_return(socket)
|
39
|
+
allow(socket).to receive(:close)
|
40
|
+
|
41
|
+
allow(::UDPSocket).to receive(:open).and_return(udp_socket)
|
42
|
+
allow(udp_socket).to receive(:connect)
|
43
|
+
end
|
44
|
+
|
45
|
+
it 'should retrieve the guest IP address' do
|
46
|
+
times_called = 0
|
47
|
+
expect(::TCPSocket).to receive(:new) do
|
48
|
+
# force reaching later code
|
49
|
+
times_called += 1
|
50
|
+
times_called < 2 ? raise("StandardError") : socket
|
51
|
+
end
|
52
|
+
expect(machine).to receive(:ssh_info).and_return({:host => '192.168.1.2'})
|
53
|
+
expect(communicator).to receive(:execute).and_yield(:stdout, "192.168.1.2\n192.168.2.2")
|
54
|
+
|
55
|
+
expect(subject.call(env)).to be_nil
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
@@ -5,15 +5,11 @@
|
|
5
5
|
<uuid/>
|
6
6
|
<memory/>
|
7
7
|
<vcpu>1</vcpu>
|
8
|
-
|
9
|
-
|
10
8
|
<cpu mode='host-model'>
|
11
|
-
|
9
|
+
<model fallback='allow'/>
|
12
10
|
</cpu>
|
13
|
-
|
14
|
-
|
15
11
|
<os>
|
16
|
-
|
12
|
+
<type>hvm</type>
|
17
13
|
<kernel/>
|
18
14
|
<initrd/>
|
19
15
|
<cmdline/>
|
@@ -27,24 +23,16 @@
|
|
27
23
|
<timer name='rtc'/>
|
28
24
|
</clock>
|
29
25
|
<devices>
|
30
|
-
|
31
|
-
|
32
26
|
<serial type='pty'>
|
33
27
|
<target port='0'/>
|
34
28
|
</serial>
|
35
29
|
<console type='pty'>
|
36
30
|
<target port='0'/>
|
37
31
|
</console>
|
38
|
-
|
39
|
-
|
40
32
|
<input bus='ps2' type='mouse'/>
|
41
|
-
|
42
|
-
|
43
|
-
<
|
44
|
-
|
45
|
-
</video>
|
46
|
-
|
47
|
-
|
33
|
+
<graphics autoport='yes' keymap='en-us' listen='127.0.0.1' port='-1' type='vnc'/>
|
34
|
+
<video>
|
35
|
+
<model heads='1' type='cirrus' vram='16384'/>
|
36
|
+
</video>
|
48
37
|
</devices>
|
49
|
-
|
50
38
|
</domain>
|
@@ -5,15 +5,11 @@
|
|
5
5
|
<uuid/>
|
6
6
|
<memory/>
|
7
7
|
<vcpu>1</vcpu>
|
8
|
-
|
9
|
-
|
10
8
|
<cpu mode='host-model'>
|
11
|
-
|
9
|
+
<model fallback='allow'/>
|
12
10
|
</cpu>
|
13
|
-
|
14
|
-
|
15
11
|
<os>
|
16
|
-
|
12
|
+
<type>hvm</type>
|
17
13
|
<kernel/>
|
18
14
|
<initrd/>
|
19
15
|
<cmdline/>
|
@@ -25,24 +21,16 @@
|
|
25
21
|
</features>
|
26
22
|
<clock offset='utc'/>
|
27
23
|
<devices>
|
28
|
-
|
29
|
-
|
30
24
|
<serial type='pty'>
|
31
25
|
<target port='0'/>
|
32
26
|
</serial>
|
33
27
|
<console type='pty'>
|
34
28
|
<target port='0'/>
|
35
29
|
</console>
|
36
|
-
|
37
|
-
|
38
30
|
<input bus='ps2' type='mouse'/>
|
39
|
-
|
40
|
-
|
41
|
-
<
|
42
|
-
|
43
|
-
</video>
|
44
|
-
|
45
|
-
|
31
|
+
<graphics autoport='yes' keymap='en-us' listen='127.0.0.1' port='-1' type='vnc'/>
|
32
|
+
<video>
|
33
|
+
<model heads='1' type='cirrus' vram='16384'/>
|
34
|
+
</video>
|
46
35
|
</devices>
|
47
|
-
|
48
36
|
</domain>
|
@@ -5,15 +5,11 @@
|
|
5
5
|
<uuid/>
|
6
6
|
<memory/>
|
7
7
|
<vcpu>1</vcpu>
|
8
|
-
|
9
|
-
|
10
8
|
<cpu mode='host-model'>
|
11
|
-
|
9
|
+
<model fallback='allow'/>
|
12
10
|
</cpu>
|
13
|
-
|
14
|
-
|
15
11
|
<os>
|
16
|
-
|
12
|
+
<type>hvm</type>
|
17
13
|
<kernel/>
|
18
14
|
<initrd/>
|
19
15
|
<cmdline/>
|
@@ -25,24 +21,16 @@
|
|
25
21
|
</features>
|
26
22
|
<clock offset='utc'/>
|
27
23
|
<devices>
|
28
|
-
|
29
|
-
|
30
24
|
<serial type='pty'>
|
31
25
|
<target port='0'/>
|
32
26
|
</serial>
|
33
27
|
<console type='pty'>
|
34
28
|
<target port='0'/>
|
35
29
|
</console>
|
36
|
-
|
37
|
-
|
38
30
|
<input bus='ps2' type='mouse'/>
|
39
|
-
|
40
|
-
|
41
|
-
<
|
42
|
-
|
43
|
-
</video>
|
44
|
-
|
45
|
-
|
31
|
+
<graphics autoport='yes' keymap='en-us' listen='127.0.0.1' port='-1' type='vnc'/>
|
32
|
+
<video>
|
33
|
+
<model heads='1' type='cirrus' vram='16384'/>
|
34
|
+
</video>
|
46
35
|
<tpm model='tpm-tis'><backend type='passthrough'><device path='/dev/tpm0'/></backend></tpm></devices>
|
47
|
-
|
48
36
|
</domain>
|
@@ -5,15 +5,11 @@
|
|
5
5
|
<uuid/>
|
6
6
|
<memory/>
|
7
7
|
<vcpu>1</vcpu>
|
8
|
-
|
9
|
-
|
10
8
|
<cpu mode='host-model'>
|
11
|
-
|
9
|
+
<model fallback='allow'/>
|
12
10
|
</cpu>
|
13
|
-
|
14
|
-
|
15
11
|
<os>
|
16
|
-
|
12
|
+
<type>hvm</type>
|
17
13
|
<kernel/>
|
18
14
|
<initrd/>
|
19
15
|
<cmdline/>
|
@@ -25,24 +21,16 @@
|
|
25
21
|
</features>
|
26
22
|
<clock offset='utc'/>
|
27
23
|
<devices>
|
28
|
-
|
29
|
-
|
30
24
|
<serial type='pty'>
|
31
25
|
<target port='0'/>
|
32
26
|
</serial>
|
33
27
|
<console type='pty'>
|
34
28
|
<target port='0'/>
|
35
29
|
</console>
|
36
|
-
|
37
|
-
|
38
30
|
<input bus='ps2' type='mouse'/>
|
39
|
-
|
40
|
-
|
41
|
-
<
|
42
|
-
|
43
|
-
</video>
|
44
|
-
|
45
|
-
|
31
|
+
<graphics autoport='yes' keymap='en-us' listen='127.0.0.1' port='-1' type='vnc'/>
|
32
|
+
<video>
|
33
|
+
<model heads='1' type='cirrus' vram='16384'/>
|
34
|
+
</video>
|
46
35
|
<tpm model='tpm-crb'><backend type='emulator' version='2.0'/></tpm></devices>
|
47
|
-
|
48
36
|
</domain>
|
@@ -52,7 +52,7 @@
|
|
52
52
|
</graphics>
|
53
53
|
<audio id='1' type='none'/>
|
54
54
|
<video>
|
55
|
-
<model type='cirrus' vram='
|
55
|
+
<model type='cirrus' vram='16384' heads='1' primary='yes'/>
|
56
56
|
<address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
|
57
57
|
</video>
|
58
58
|
<memballoon model='virtio'>
|
@@ -22,6 +22,10 @@ describe VagrantPlugins::ProviderLibvirt::Action::WaitTillUp do
|
|
22
22
|
.and_return(driver)
|
23
23
|
allow(driver).to receive(:get_domain).and_return(domain)
|
24
24
|
allow(driver).to receive(:state).and_return(:running)
|
25
|
+
# return some information for domain when needed
|
26
|
+
allow(domain).to receive(:mac).and_return('9C:D5:53:F1:5A:E7')
|
27
|
+
|
28
|
+
allow(machine.provider_config).to receive(:qemu_use_session).and_return(false)
|
25
29
|
end
|
26
30
|
|
27
31
|
context 'when machine does not exist' do
|
@@ -62,7 +66,6 @@ describe VagrantPlugins::ProviderLibvirt::Action::WaitTillUp do
|
|
62
66
|
expect(app).to_not receive(:call)
|
63
67
|
expect(ui).to receive(:info).with('Waiting for domain to get an IP address...')
|
64
68
|
expect(ui).to_not receive(:info).with('Waiting for SSH to become available...')
|
65
|
-
expect(env[:machine].communicate).to_not receive(:ready?)
|
66
69
|
expect {subject.call(env) }.to raise_error(::Fog::Errors::TimeoutError)
|
67
70
|
end
|
68
71
|
end
|
@@ -85,46 +88,4 @@ describe VagrantPlugins::ProviderLibvirt::Action::WaitTillUp do
|
|
85
88
|
end
|
86
89
|
end
|
87
90
|
end
|
88
|
-
|
89
|
-
describe '#recover' do
|
90
|
-
before do
|
91
|
-
allow_any_instance_of(VagrantPlugins::ProviderLibvirt::Driver).to receive(:get_domain).and_return(machine)
|
92
|
-
allow_any_instance_of(VagrantPlugins::ProviderLibvirt::Driver).to receive(:state)
|
93
|
-
.and_return(:not_created)
|
94
|
-
allow(env).to receive(:[]).and_call_original
|
95
|
-
end
|
96
|
-
|
97
|
-
it 'should do nothing by default' do
|
98
|
-
expect(env).to_not receive(:[]).with(:action_runner) # cleanup
|
99
|
-
expect(subject.recover(env)).to be_nil
|
100
|
-
end
|
101
|
-
|
102
|
-
context 'with machine coming up' do
|
103
|
-
before do
|
104
|
-
allow_any_instance_of(VagrantPlugins::ProviderLibvirt::Driver).to receive(:state)
|
105
|
-
.and_return(:running)
|
106
|
-
env[:destroy_on_error] = true
|
107
|
-
end
|
108
|
-
|
109
|
-
context 'and user has disabled destroy on failure' do
|
110
|
-
before do
|
111
|
-
env[:destroy_on_error] = false
|
112
|
-
end
|
113
|
-
|
114
|
-
it 'skips terminate on failure' do
|
115
|
-
expect(env).to_not receive(:[]).with(:action_runner) # cleanup
|
116
|
-
expect(subject.recover(env)).to be_nil
|
117
|
-
end
|
118
|
-
end
|
119
|
-
|
120
|
-
context 'and using default settings' do
|
121
|
-
let(:runner) { double('runner') }
|
122
|
-
it 'deletes VM on failure' do
|
123
|
-
expect(env).to receive(:[]).with(:action_runner).and_return(runner) # cleanup
|
124
|
-
expect(runner).to receive(:run)
|
125
|
-
expect(subject.recover(env)).to be_nil
|
126
|
-
end
|
127
|
-
end
|
128
|
-
end
|
129
|
-
end
|
130
91
|
end
|
data/spec/unit/action_spec.rb
CHANGED
@@ -27,6 +27,8 @@ describe VagrantPlugins::ProviderLibvirt::Action do
|
|
27
27
|
allow(logger).to receive(:info)
|
28
28
|
allow(logger).to receive(:debug)
|
29
29
|
allow(logger).to receive(:error)
|
30
|
+
|
31
|
+
allow(connection.client).to receive(:libversion).and_return(6_002_000)
|
30
32
|
end
|
31
33
|
|
32
34
|
def allow_action_env_result(action, *responses)
|
data/spec/unit/config_spec.rb
CHANGED
@@ -171,55 +171,55 @@ describe VagrantPlugins::ProviderLibvirt::Config do
|
|
171
171
|
# ignore LIBVIRT_DEFAULT_URI due to explicit settings
|
172
172
|
[ # when uri explicitly set
|
173
173
|
{:uri => 'qemu:///system'},
|
174
|
-
{:uri =>
|
174
|
+
{:uri => %r{qemu:///(system|session)}},
|
175
175
|
{
|
176
|
-
:env => {'LIBVIRT_DEFAULT_URI' => 'qemu
|
176
|
+
:env => {'LIBVIRT_DEFAULT_URI' => 'qemu:///custom'},
|
177
177
|
}
|
178
178
|
],
|
179
179
|
[ # when host explicitly set
|
180
180
|
{:host => 'remote'},
|
181
|
-
{:uri =>
|
181
|
+
{:uri => %r{qemu://remote/(system|session)}},
|
182
182
|
{
|
183
|
-
:env => {'LIBVIRT_DEFAULT_URI' => 'qemu
|
183
|
+
:env => {'LIBVIRT_DEFAULT_URI' => 'qemu:///custom'},
|
184
184
|
}
|
185
185
|
],
|
186
186
|
[ # when connect_via_ssh explicitly set
|
187
187
|
{:connect_via_ssh => true},
|
188
|
-
{:uri =>
|
188
|
+
{:uri => %r{qemu\+ssh://localhost/(system|session)\?no_verify=1}},
|
189
189
|
{
|
190
|
-
:env => {'LIBVIRT_DEFAULT_URI' => 'qemu
|
190
|
+
:env => {'LIBVIRT_DEFAULT_URI' => 'qemu:///custom'},
|
191
191
|
}
|
192
192
|
],
|
193
193
|
[ # when username explicitly set without ssh
|
194
194
|
{:username => 'my_user' },
|
195
|
-
{:uri =>
|
195
|
+
{:uri => %r{qemu:///(system|session)}, :username => 'my_user'},
|
196
196
|
{
|
197
|
-
:env => {'LIBVIRT_DEFAULT_URI' => 'qemu
|
197
|
+
:env => {'LIBVIRT_DEFAULT_URI' => 'qemu:///custom'},
|
198
198
|
}
|
199
199
|
],
|
200
200
|
[ # when username explicitly set with host but without ssh
|
201
201
|
{:username => 'my_user', :host => 'remote'},
|
202
|
-
{:uri =>
|
202
|
+
{:uri => %r{qemu://remote/(system|session)}, :username => 'my_user'},
|
203
203
|
{
|
204
|
-
:env => {'LIBVIRT_DEFAULT_URI' => 'qemu
|
204
|
+
:env => {'LIBVIRT_DEFAULT_URI' => 'qemu:///custom'},
|
205
205
|
}
|
206
206
|
],
|
207
207
|
[ # when password explicitly set
|
208
208
|
{:password => 'some_password'},
|
209
|
-
{:uri =>
|
209
|
+
{:uri => %r{qemu:///(system|session)}, :password => 'some_password'},
|
210
210
|
{
|
211
|
-
:env => {'LIBVIRT_DEFAULT_URI' => 'qemu
|
211
|
+
:env => {'LIBVIRT_DEFAULT_URI' => 'qemu:///custom'},
|
212
212
|
}
|
213
213
|
],
|
214
214
|
|
215
215
|
# driver settings
|
216
216
|
[ # set to kvm only
|
217
217
|
{:driver => 'kvm'},
|
218
|
-
{:uri =>
|
218
|
+
{:uri => %r{qemu:///(system|session)}},
|
219
219
|
],
|
220
220
|
[ # set to qemu only
|
221
221
|
{:driver => 'qemu'},
|
222
|
-
{:uri =>
|
222
|
+
{:uri => %r{qemu:///(system|session)}},
|
223
223
|
],
|
224
224
|
[ # set to qemu with session enabled
|
225
225
|
{:driver => 'qemu', :qemu_use_session => true},
|
@@ -241,29 +241,29 @@ describe VagrantPlugins::ProviderLibvirt::Config do
|
|
241
241
|
# connect_via_ssh settings
|
242
242
|
[ # enabled
|
243
243
|
{:connect_via_ssh => true},
|
244
|
-
{:uri =>
|
244
|
+
{:uri => %r{qemu\+ssh://localhost/(system|session)\?no_verify=1}},
|
245
245
|
],
|
246
246
|
[ # enabled with user
|
247
247
|
{:connect_via_ssh => true, :username => 'my_user'},
|
248
|
-
{:uri =>
|
248
|
+
{:uri => %r{qemu\+ssh://my_user@localhost/(system|session)\?no_verify=1}},
|
249
249
|
],
|
250
250
|
[ # enabled with host
|
251
251
|
{:connect_via_ssh => true, :host => 'remote_server'},
|
252
|
-
{:uri =>
|
252
|
+
{:uri => %r{qemu\+ssh://remote_server/(system|session)\?no_verify=1}},
|
253
253
|
],
|
254
254
|
|
255
255
|
# id_ssh_key_file behaviour
|
256
256
|
[ # set should take given value
|
257
257
|
{:connect_via_ssh => true, :id_ssh_key_file => '/path/to/keyfile'},
|
258
|
-
{:uri =>
|
258
|
+
{:uri => %r{qemu\+ssh://localhost/(system|session)\?no_verify=1&keyfile=/path/to/keyfile}, :connect_via_ssh => true},
|
259
259
|
],
|
260
260
|
[ # set should infer use of ssh
|
261
261
|
{:id_ssh_key_file => '/path/to/keyfile'},
|
262
|
-
{:uri =>
|
262
|
+
{:uri => %r{qemu\+ssh://localhost/(system|session)\?no_verify=1&keyfile=/path/to/keyfile}, :connect_via_ssh => true},
|
263
263
|
],
|
264
264
|
[ # connect_via_ssh should enable default but ignore due to not existing
|
265
265
|
{:connect_via_ssh => true},
|
266
|
-
{:uri =>
|
266
|
+
{:uri => %r{qemu\+ssh://localhost/(system|session)\?no_verify=1}, :id_ssh_key_file => nil},
|
267
267
|
{
|
268
268
|
:setup => ProcWithBinding.new {
|
269
269
|
expect(File).to receive(:file?).with("/home/tests/.ssh/id_rsa").and_return(false)
|
@@ -272,7 +272,7 @@ describe VagrantPlugins::ProviderLibvirt::Config do
|
|
272
272
|
],
|
273
273
|
[ # connect_via_ssh should enable default and include due to existing
|
274
274
|
{:connect_via_ssh => true},
|
275
|
-
{:uri =>
|
275
|
+
{:uri => %r{qemu\+ssh://localhost/(system|session)\?no_verify=1&keyfile=/home/tests/\.ssh/id_rsa}, :id_ssh_key_file => '/home/tests/.ssh/id_rsa'},
|
276
276
|
{
|
277
277
|
:setup => ProcWithBinding.new {
|
278
278
|
expect(File).to receive(:file?).with("/home/tests/.ssh/id_rsa").and_return(true)
|
@@ -283,7 +283,7 @@ describe VagrantPlugins::ProviderLibvirt::Config do
|
|
283
283
|
# socket behaviour
|
284
284
|
[ # set
|
285
285
|
{:socket => '/var/run/libvirt/libvirt-sock'},
|
286
|
-
{:uri =>
|
286
|
+
{:uri => %r{qemu:///(system|session)\?socket=/var/run/libvirt/libvirt-sock}},
|
287
287
|
],
|
288
288
|
].each do |inputs, outputs, options|
|
289
289
|
opts = {}
|
@@ -317,7 +317,8 @@ describe VagrantPlugins::ProviderLibvirt::Config do
|
|
317
317
|
hash["#{name.to_s[1..-1]}".to_sym] =subject.instance_variable_get(name)
|
318
318
|
end
|
319
319
|
end
|
320
|
-
|
320
|
+
|
321
|
+
expect(got).to match(outputs.inject({}) { |h, (k, v)| h[k] = v.is_a?(Regexp) ? a_string_matching(v) : v; h })
|
321
322
|
end
|
322
323
|
end
|
323
324
|
|
@@ -338,6 +339,54 @@ describe VagrantPlugins::ProviderLibvirt::Config do
|
|
338
339
|
end
|
339
340
|
end
|
340
341
|
|
342
|
+
context '@system_uri' do
|
343
|
+
[
|
344
|
+
# system uri
|
345
|
+
[ # transport and hostname
|
346
|
+
{:uri => "qemu+ssh://localhost/session"},
|
347
|
+
{:uri => "qemu+ssh://localhost/session", :system_uri => "qemu+ssh://localhost/system"},
|
348
|
+
],
|
349
|
+
[ # explicitly set
|
350
|
+
{:qemu_use_session => true, :system_uri => "custom://remote/system"},
|
351
|
+
{:uri => "qemu:///session", :system_uri => "custom://remote/system"},
|
352
|
+
],
|
353
|
+
].each do |inputs, outputs, options|
|
354
|
+
opts = {}
|
355
|
+
opts.merge!(options) if options
|
356
|
+
|
357
|
+
it "should handle inputs #{inputs} with env (#{opts[:env]})" do
|
358
|
+
# allow some of these to fail for now if marked as such
|
359
|
+
if !opts[:allow_failure].nil?
|
360
|
+
pending(opts[:allow_failure])
|
361
|
+
end
|
362
|
+
|
363
|
+
if !opts[:setup].nil?
|
364
|
+
opts[:setup].apply_binding(binding)
|
365
|
+
end
|
366
|
+
|
367
|
+
inputs.each do |k, v|
|
368
|
+
subject.instance_variable_set("@#{k}", v)
|
369
|
+
end
|
370
|
+
|
371
|
+
if !opts[:env].nil?
|
372
|
+
opts[:env].each do |k, v|
|
373
|
+
fake_env[k] = v
|
374
|
+
end
|
375
|
+
end
|
376
|
+
|
377
|
+
subject.finalize!
|
378
|
+
|
379
|
+
# ensure failed output indicates which settings are incorrect in the failed test
|
380
|
+
got = subject.instance_variables.each_with_object({}) do |name, hash|
|
381
|
+
if outputs.key?(name.to_s[1..-1].to_sym)
|
382
|
+
hash["#{name.to_s[1..-1]}".to_sym] =subject.instance_variable_get(name)
|
383
|
+
end
|
384
|
+
end
|
385
|
+
expect(got).to eq(outputs)
|
386
|
+
end
|
387
|
+
end
|
388
|
+
end
|
389
|
+
|
341
390
|
context '@proxy_command' do
|
342
391
|
before(:example) do
|
343
392
|
stub_const("ENV", fake_env)
|
@@ -483,6 +532,47 @@ describe VagrantPlugins::ProviderLibvirt::Config do
|
|
483
532
|
end
|
484
533
|
end
|
485
534
|
end
|
535
|
+
|
536
|
+
context '@channels' do
|
537
|
+
it 'should be empty by default' do
|
538
|
+
subject.finalize!
|
539
|
+
|
540
|
+
expect(subject.channels).to be_empty
|
541
|
+
end
|
542
|
+
|
543
|
+
context 'when qemu_use_agent is set' do
|
544
|
+
before do
|
545
|
+
subject.qemu_use_agent = true
|
546
|
+
end
|
547
|
+
|
548
|
+
it 'should inject a qemu agent channel' do
|
549
|
+
subject.finalize!
|
550
|
+
|
551
|
+
expect(subject.channels).to_not be_empty
|
552
|
+
expect(subject.channels).to match([a_hash_including({:target_name => 'org.qemu.guest_agent.0'})])
|
553
|
+
end
|
554
|
+
|
555
|
+
context 'when agent channel already added' do
|
556
|
+
it 'should not modify the channels' do
|
557
|
+
subject.channel :type => 'unix', :target_name => 'org.qemu.guest_agent.0', :target_type => 'virtio'
|
558
|
+
|
559
|
+
subject.finalize!
|
560
|
+
|
561
|
+
expect(subject.channels.length).to eq(1)
|
562
|
+
end
|
563
|
+
|
564
|
+
context 'when agent channel explicitly disbaled' do
|
565
|
+
it 'should not include an agent channel' do
|
566
|
+
subject.channel :type => 'unix', :target_name => 'org.qemu.guest_agent.0', :disabled => true
|
567
|
+
|
568
|
+
subject.finalize!
|
569
|
+
|
570
|
+
expect(subject.channels).to be_empty
|
571
|
+
end
|
572
|
+
end
|
573
|
+
end
|
574
|
+
end
|
575
|
+
end
|
486
576
|
end
|
487
577
|
|
488
578
|
def assert_invalid
|
@@ -518,7 +608,9 @@ describe VagrantPlugins::ProviderLibvirt::Config do
|
|
518
608
|
|
519
609
|
context 'with mac defined' do
|
520
610
|
let (:vm) { double('vm') }
|
521
|
-
before
|
611
|
+
before do
|
612
|
+
machine.config.instance_variable_get("@keys")[:vm] = vm
|
613
|
+
end
|
522
614
|
|
523
615
|
it 'is valid with valid mac' do
|
524
616
|
expect(vm).to receive(:networks).and_return([[:public, { mac: 'aa:bb:cc:dd:ee:ff' }]])
|
@@ -537,6 +629,21 @@ describe VagrantPlugins::ProviderLibvirt::Config do
|
|
537
629
|
assert_invalid
|
538
630
|
end
|
539
631
|
end
|
632
|
+
|
633
|
+
context 'with cpu_mode and cpu_model defined' do
|
634
|
+
it 'should discard model if mode is passthrough' do
|
635
|
+
subject.cpu_mode = 'host-passthrough'
|
636
|
+
subject.cpu_model = 'qemu64'
|
637
|
+
assert_valid
|
638
|
+
expect(subject.cpu_model).to be_empty
|
639
|
+
end
|
640
|
+
|
641
|
+
it 'should allow custom mode with model' do
|
642
|
+
subject.cpu_mode = 'custom'
|
643
|
+
subject.cpu_model = 'qemu64'
|
644
|
+
assert_valid
|
645
|
+
end
|
646
|
+
end
|
540
647
|
end
|
541
648
|
|
542
649
|
describe '#merge' do
|
@@ -558,11 +665,11 @@ describe VagrantPlugins::ProviderLibvirt::Config do
|
|
558
665
|
end
|
559
666
|
|
560
667
|
context 'without devices given' do
|
561
|
-
it 'should merge disks
|
668
|
+
it 'should merge disks without assigning devices automatically' do
|
562
669
|
one.storage(:file)
|
563
670
|
two.storage(:file)
|
564
671
|
subject.finalize!
|
565
|
-
expect(subject.disks).
|
672
|
+
expect(subject.disks).to_not include(include(device: 'vdb'),
|
566
673
|
include(device: 'vdc'))
|
567
674
|
end
|
568
675
|
end
|