vagrant-libvirt 0.6.0 → 0.7.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +44 -8
- data/lib/vagrant-libvirt/action/create_domain.rb +24 -0
- data/lib/vagrant-libvirt/action/create_networks.rb +11 -0
- data/lib/vagrant-libvirt/action/handle_box_image.rb +19 -10
- data/lib/vagrant-libvirt/action/prepare_nfs_settings.rb +1 -1
- data/lib/vagrant-libvirt/action/shutdown_domain.rb +28 -6
- data/lib/vagrant-libvirt/action/start_domain.rb +36 -0
- data/lib/vagrant-libvirt/action.rb +14 -19
- data/lib/vagrant-libvirt/config.rb +45 -2
- data/lib/vagrant-libvirt/driver.rb +8 -8
- data/lib/vagrant-libvirt/errors.rb +8 -0
- data/lib/vagrant-libvirt/templates/domain.xml.erb +18 -5
- data/lib/vagrant-libvirt/util/network_util.rb +2 -1
- data/lib/vagrant-libvirt/util/nfs.rb +2 -0
- data/lib/vagrant-libvirt/version +1 -1
- data/locales/en.yml +9 -0
- data/spec/spec_helper.rb +8 -0
- data/spec/support/libvirt_context.rb +7 -4
- data/spec/support/sharedcontext.rb +1 -1
- data/spec/unit/action/handle_box_image_spec.rb +30 -0
- data/spec/unit/action/prepare_nfs_settings_spec.rb +55 -0
- data/spec/unit/action/shutdown_domain_spec.rb +32 -3
- data/spec/unit/action/wait_till_up_spec.rb +2 -1
- data/spec/unit/action_spec.rb +78 -0
- data/spec/unit/config_spec.rb +48 -0
- data/spec/unit/driver_spec.rb +138 -3
- data/spec/unit/templates/domain_all_settings.xml +10 -4
- data/spec/unit/templates/domain_spec.rb +3 -0
- metadata +39 -38
- data/spec/unit/provider_spec.rb +0 -11
data/spec/unit/driver_spec.rb
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require 'fog/libvirt/requests/compute/dhcp_leases'
|
4
|
+
|
3
5
|
require 'spec_helper'
|
4
6
|
require 'support/binding_proc'
|
5
7
|
require 'support/sharedcontext'
|
@@ -8,6 +10,7 @@ require 'vagrant-libvirt/driver'
|
|
8
10
|
|
9
11
|
describe VagrantPlugins::ProviderLibvirt::Driver do
|
10
12
|
include_context 'unit'
|
13
|
+
include_context 'libvirt'
|
11
14
|
|
12
15
|
subject { described_class.new(machine) }
|
13
16
|
|
@@ -27,6 +30,7 @@ describe VagrantPlugins::ProviderLibvirt::Driver do
|
|
27
30
|
end
|
28
31
|
EOF
|
29
32
|
end
|
33
|
+
|
30
34
|
# need to override the default package iso_env as using a different
|
31
35
|
# name for the test machines above.
|
32
36
|
let(:machine) { iso_env.machine(:test1, :libvirt) }
|
@@ -36,6 +40,14 @@ describe VagrantPlugins::ProviderLibvirt::Driver do
|
|
36
40
|
let(:system_connection1) { double("system connection 1") }
|
37
41
|
let(:system_connection2) { double("system connection 2") }
|
38
42
|
|
43
|
+
# make it easier for distros that want to switch the default value for
|
44
|
+
# qemu_use_session to true by ensuring it is explicitly false for tests.
|
45
|
+
before do
|
46
|
+
allow(machine.provider_config).to receive(:qemu_use_session).and_return(false)
|
47
|
+
allow(logger).to receive(:info)
|
48
|
+
allow(logger).to receive(:debug)
|
49
|
+
end
|
50
|
+
|
39
51
|
describe '#connection' do
|
40
52
|
it 'should configure a separate connection per machine' do
|
41
53
|
expect(Fog::Compute).to receive(:new).with(
|
@@ -68,15 +80,15 @@ describe VagrantPlugins::ProviderLibvirt::Driver do
|
|
68
80
|
# system_uri should be 'qemu+ssh://user@remote1/system'
|
69
81
|
# and not 'qemu:///system'.
|
70
82
|
it 'should configure a separate connection per machine' do
|
71
|
-
expect(Libvirt).to receive(:
|
72
|
-
expect(Libvirt).to receive(:
|
83
|
+
expect(Libvirt).to receive(:open_read_only).with('qemu+ssh://user@remote1/system').and_return(system_connection1)
|
84
|
+
expect(Libvirt).to receive(:open_read_only).with('qemu+ssh://vms@remote2/system').and_return(system_connection2)
|
73
85
|
|
74
86
|
expect(machine.provider.driver.system_connection).to eq(system_connection1)
|
75
87
|
expect(machine2.provider.driver.system_connection).to eq(system_connection2)
|
76
88
|
end
|
77
89
|
|
78
90
|
it 'should configure the connection once' do
|
79
|
-
expect(Libvirt).to receive(:
|
91
|
+
expect(Libvirt).to receive(:open_read_only).with('qemu+ssh://user@remote1/system').and_return(system_connection1)
|
80
92
|
|
81
93
|
expect(machine.provider.driver.system_connection).to eq(system_connection1)
|
82
94
|
expect(machine.provider.driver.system_connection).to eq(system_connection1)
|
@@ -84,6 +96,129 @@ describe VagrantPlugins::ProviderLibvirt::Driver do
|
|
84
96
|
end
|
85
97
|
end
|
86
98
|
|
99
|
+
describe '#get_ipaddress' do
|
100
|
+
context 'when domain exists' do
|
101
|
+
# not used yet, but this is the form that is returned from addresses
|
102
|
+
let(:addresses) { {
|
103
|
+
:public => ["192.168.122.111"],
|
104
|
+
:private => ["192.168.122.111"],
|
105
|
+
} }
|
106
|
+
|
107
|
+
before do
|
108
|
+
allow(subject).to receive(:get_domain).and_return(domain)
|
109
|
+
end
|
110
|
+
|
111
|
+
it 'should retrieve the address via domain fog-libvirt API' do
|
112
|
+
# ideally should be able to yield a block to wait_for and check that
|
113
|
+
# the 'addresses' function on the domain is called correctly.
|
114
|
+
expect(domain).to receive(:wait_for).and_return(nil)
|
115
|
+
expect(subject.get_ipaddress(machine)).to eq(nil)
|
116
|
+
end
|
117
|
+
|
118
|
+
context 'when qemu_use_agent is enabled' do
|
119
|
+
let(:qemu_agent_interfaces) {
|
120
|
+
<<-EOF
|
121
|
+
{
|
122
|
+
"return": [
|
123
|
+
{
|
124
|
+
"name": "lo",
|
125
|
+
"ip-addresses": [
|
126
|
+
{
|
127
|
+
"ip-address-type": "ipv4",
|
128
|
+
"ip-address": "127.0.0.1",
|
129
|
+
"prefix": 8
|
130
|
+
}
|
131
|
+
],
|
132
|
+
"hardware-address": "00:00:00:00:00:00"
|
133
|
+
},
|
134
|
+
{
|
135
|
+
"name": "eth0",
|
136
|
+
"ip-addresses": [
|
137
|
+
{
|
138
|
+
"ip-address-type": "ipv4",
|
139
|
+
"ip-address": "192.168.122.42",
|
140
|
+
"prefix": 24
|
141
|
+
}
|
142
|
+
],
|
143
|
+
"hardware-address": "52:54:00:f8:67:98"
|
144
|
+
}
|
145
|
+
]
|
146
|
+
}
|
147
|
+
EOF
|
148
|
+
}
|
149
|
+
|
150
|
+
before do
|
151
|
+
allow(machine.provider_config).to receive(:qemu_use_agent).and_return(true)
|
152
|
+
end
|
153
|
+
|
154
|
+
it 'should retrieve the address via the agent' do
|
155
|
+
expect(subject).to receive(:connection).and_return(connection)
|
156
|
+
expect(libvirt_client).to receive(:lookup_domain_by_uuid).and_return(libvirt_domain)
|
157
|
+
expect(libvirt_domain).to receive(:qemu_agent_command).and_return(qemu_agent_interfaces)
|
158
|
+
expect(domain).to receive(:mac).and_return("52:54:00:f8:67:98").exactly(2).times
|
159
|
+
|
160
|
+
expect(subject.get_ipaddress(machine)).to eq("192.168.122.42")
|
161
|
+
end
|
162
|
+
|
163
|
+
context 'when qemu_use_session is enabled' do
|
164
|
+
before do
|
165
|
+
allow(machine.provider_config).to receive(:qemu_use_session).and_return(true)
|
166
|
+
end
|
167
|
+
|
168
|
+
it 'should still retrieve the address via the agent' do
|
169
|
+
expect(subject).to receive(:connection).and_return(connection)
|
170
|
+
expect(libvirt_client).to receive(:lookup_domain_by_uuid).and_return(libvirt_domain)
|
171
|
+
expect(libvirt_domain).to receive(:qemu_agent_command).and_return(qemu_agent_interfaces)
|
172
|
+
expect(domain).to receive(:mac).and_return("52:54:00:f8:67:98").exactly(2).times
|
173
|
+
|
174
|
+
expect(subject.get_ipaddress(machine)).to eq("192.168.122.42")
|
175
|
+
end
|
176
|
+
end
|
177
|
+
end
|
178
|
+
|
179
|
+
context 'when qemu_use_session is enabled' do
|
180
|
+
let(:networks) { [instance_double('::Fog::Libvirt::Compute::Real')] }
|
181
|
+
let(:dhcp_leases) {
|
182
|
+
{
|
183
|
+
"iface" =>"virbr0",
|
184
|
+
"expirytime" =>1636287162,
|
185
|
+
"type" =>0,
|
186
|
+
"mac" =>"52:54:00:8b:dc:5f",
|
187
|
+
"ipaddr" =>"192.168.122.43",
|
188
|
+
"prefix" =>24,
|
189
|
+
"hostname" =>"vagrant-default_test",
|
190
|
+
"clientid" =>"ff:00:8b:dc:5f:00:01:00:01:29:1a:65:42:52:54:00:8b:dc:5f",
|
191
|
+
}
|
192
|
+
}
|
193
|
+
|
194
|
+
before do
|
195
|
+
allow(machine.provider_config).to receive(:qemu_use_session).and_return(true)
|
196
|
+
end
|
197
|
+
|
198
|
+
it 'should retreive the address via the system dhcp-leases API' do
|
199
|
+
expect(domain).to receive(:mac).and_return("52:54:00:8b:dc:5f")
|
200
|
+
expect(subject).to receive(:system_connection).and_return(system_connection1)
|
201
|
+
expect(system_connection1).to receive(:list_all_networks).and_return(networks)
|
202
|
+
expect(networks[0]).to receive(:dhcp_leases).and_return([dhcp_leases])
|
203
|
+
|
204
|
+
expect(subject.get_ipaddress(machine)).to eq("192.168.122.43")
|
205
|
+
end
|
206
|
+
|
207
|
+
context 'when qemu_use_agent is enabled' do
|
208
|
+
before do
|
209
|
+
allow(machine.provider_config).to receive(:qemu_use_agent).and_return(true)
|
210
|
+
end
|
211
|
+
|
212
|
+
it 'should retrieve the address via the agent' do
|
213
|
+
expect(subject).to receive(:get_ipaddress_from_qemu_agent).and_return("192.168.122.44")
|
214
|
+
|
215
|
+
expect(subject.get_ipaddress(machine)).to eq("192.168.122.44")
|
216
|
+
end
|
217
|
+
end
|
218
|
+
end
|
219
|
+
end
|
220
|
+
end
|
221
|
+
|
87
222
|
describe '#state' do
|
88
223
|
let(:domain) { double('domain') }
|
89
224
|
|
@@ -81,10 +81,12 @@
|
|
81
81
|
<readonly/>
|
82
82
|
</disk>
|
83
83
|
|
84
|
-
<serial type='
|
84
|
+
<serial type='file'>
|
85
|
+
<source path='/var/log/vm_consoles/machine.log'/>
|
85
86
|
<target port='0'/>
|
86
87
|
</serial>
|
87
|
-
<console type='
|
88
|
+
<console type='file'>
|
89
|
+
<source path='/var/log/vm_consoles/machine.log'/>
|
88
90
|
<target port='0'/>
|
89
91
|
</console>
|
90
92
|
|
@@ -110,9 +112,13 @@
|
|
110
112
|
|
111
113
|
<input type='mouse' bus='ps2'/>
|
112
114
|
|
113
|
-
<graphics type='vnc' port='-1' autoport='yes' listen='127.0.0.1' keymap='en-us'
|
115
|
+
<graphics type='vnc' port='-1' autoport='yes' listen='127.0.0.1' keymap='en-us' >
|
116
|
+
<gl enable='yes' />
|
117
|
+
</graphics>
|
114
118
|
<video>
|
115
|
-
<model type='cirrus' vram='9216' heads='1'
|
119
|
+
<model type='cirrus' vram='9216' heads='1'>
|
120
|
+
<acceleration accel3d='yes'/>
|
121
|
+
</model>
|
116
122
|
</video>
|
117
123
|
<rng model='virtio'>
|
118
124
|
<backend model='random'>/dev/random</backend>
|
@@ -89,6 +89,7 @@ describe 'templates/domain' do
|
|
89
89
|
target_port: '4242',
|
90
90
|
source_path: '/tmp/foo')
|
91
91
|
domain.random(model: 'random')
|
92
|
+
domain.serial(:type => 'file', :source => {:path => '/var/log/vm_consoles/machine.log'})
|
92
93
|
domain.pci(bus: '0x06', slot: '0x12', function: '0x5')
|
93
94
|
domain.pci(domain: '0x0001', bus: '0x03', slot: '0x00', function: '0x0')
|
94
95
|
domain.usb_controller(model: 'nec-xhci', ports: '4')
|
@@ -111,6 +112,8 @@ describe 'templates/domain' do
|
|
111
112
|
domain.shares = '1024'
|
112
113
|
domain.cpuset = '1-4,^3,6'
|
113
114
|
domain.nodeset = '1-4,^3,6'
|
115
|
+
|
116
|
+
domain.video_accel3d = true
|
114
117
|
end
|
115
118
|
let(:test_file) { 'domain_all_settings.xml' }
|
116
119
|
it 'renders template' do
|
metadata
CHANGED
@@ -1,17 +1,17 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: vagrant-libvirt
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.7.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Lukas Stanek
|
8
8
|
- Dima Vasilets
|
9
9
|
- Brian Pitts
|
10
10
|
- Darragh Bailey
|
11
|
-
autorequire:
|
11
|
+
autorequire:
|
12
12
|
bindir: bin
|
13
13
|
cert_chain: []
|
14
|
-
date: 2021-
|
14
|
+
date: 2021-11-09 00:00:00.000000000 Z
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
17
17
|
name: rspec-core
|
@@ -252,6 +252,7 @@ files:
|
|
252
252
|
- spec/unit/action/halt_domain_spec.rb
|
253
253
|
- spec/unit/action/handle_box_image_spec.rb
|
254
254
|
- spec/unit/action/package_domain_spec.rb
|
255
|
+
- spec/unit/action/prepare_nfs_settings_spec.rb
|
255
256
|
- spec/unit/action/set_name_of_domain_spec.rb
|
256
257
|
- spec/unit/action/shutdown_domain_spec.rb
|
257
258
|
- spec/unit/action/start_domain_spec.rb
|
@@ -264,7 +265,6 @@ files:
|
|
264
265
|
- spec/unit/action_spec.rb
|
265
266
|
- spec/unit/config_spec.rb
|
266
267
|
- spec/unit/driver_spec.rb
|
267
|
-
- spec/unit/provider_spec.rb
|
268
268
|
- spec/unit/templates/domain_all_settings.xml
|
269
269
|
- spec/unit/templates/domain_custom_cpu_model.xml
|
270
270
|
- spec/unit/templates/domain_defaults.xml
|
@@ -275,8 +275,9 @@ files:
|
|
275
275
|
homepage: https://github.com/vagrant-libvirt/vagrant-libvirt
|
276
276
|
licenses:
|
277
277
|
- MIT
|
278
|
-
metadata:
|
279
|
-
|
278
|
+
metadata:
|
279
|
+
source_code_uri: https://github.com/vagrant-libvirt/vagrant-libvirt
|
280
|
+
post_install_message:
|
280
281
|
rdoc_options: []
|
281
282
|
require_paths:
|
282
283
|
- lib
|
@@ -291,51 +292,51 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
291
292
|
- !ruby/object:Gem::Version
|
292
293
|
version: '0'
|
293
294
|
requirements: []
|
294
|
-
rubygems_version: 3.0.
|
295
|
-
signing_key:
|
295
|
+
rubygems_version: 3.0.8
|
296
|
+
signing_key:
|
296
297
|
specification_version: 4
|
297
298
|
summary: libvirt provider for Vagrant.
|
298
299
|
test_files:
|
299
|
-
- spec/support/matchers/have_file_content.rb
|
300
|
-
- spec/support/binding_proc.rb
|
301
|
-
- spec/support/environment_helper.rb
|
302
|
-
- spec/support/libvirt_context.rb
|
303
300
|
- spec/support/temporary_dir.rb
|
301
|
+
- spec/support/libvirt_context.rb
|
302
|
+
- spec/support/binding_proc.rb
|
304
303
|
- spec/support/sharedcontext.rb
|
305
|
-
- spec/
|
306
|
-
- spec/
|
304
|
+
- spec/support/matchers/have_file_content.rb
|
305
|
+
- spec/support/environment_helper.rb
|
306
|
+
- spec/unit/action_spec.rb
|
307
|
+
- spec/unit/templates/domain_all_settings.xml
|
308
|
+
- spec/unit/templates/domain_custom_cpu_model.xml
|
309
|
+
- spec/unit/templates/domain_defaults.xml
|
310
|
+
- spec/unit/templates/domain_spec.rb
|
311
|
+
- spec/unit/templates/tpm/version_1.2.xml
|
312
|
+
- spec/unit/templates/tpm/version_2.0.xml
|
307
313
|
- spec/unit/action/create_domain_spec/additional_disks_domain.xml
|
308
314
|
- spec/unit/action/create_domain_spec/default_domain.xml
|
309
|
-
- spec/unit/action/
|
310
|
-
- spec/unit/action/
|
315
|
+
- spec/unit/action/create_domain_spec/default_system_storage_pool.xml
|
316
|
+
- spec/unit/action/create_domain_spec/default_user_storage_pool.xml
|
317
|
+
- spec/unit/action/create_domain_spec.rb
|
318
|
+
- spec/unit/action/wait_till_up_spec.rb
|
319
|
+
- spec/unit/action/package_domain_spec.rb
|
320
|
+
- spec/unit/action/forward_ports_spec.rb
|
321
|
+
- spec/unit/action/destroy_domain_spec.rb
|
322
|
+
- spec/unit/action/halt_domain_spec.rb
|
323
|
+
- spec/unit/action/start_domain_spec.rb
|
324
|
+
- spec/unit/action/shutdown_domain_spec.rb
|
325
|
+
- spec/unit/action/clean_machine_folder_spec.rb
|
326
|
+
- spec/unit/action/create_domain_volume_spec.rb
|
327
|
+
- spec/unit/action/set_name_of_domain_spec.rb
|
328
|
+
- spec/unit/action/prepare_nfs_settings_spec.rb
|
311
329
|
- spec/unit/action/create_domain_volume_spec/three_disks_in_storage_disk_1.xml
|
330
|
+
- spec/unit/action/create_domain_volume_spec/three_disks_in_storage_disk_0.xml
|
312
331
|
- spec/unit/action/create_domain_volume_spec/three_disks_in_storage_disk_2.xml
|
332
|
+
- spec/unit/action/create_domain_volume_spec/one_disk_in_storage.xml
|
333
|
+
- spec/unit/action/start_domain_spec/default_added_tpm_path.xml
|
313
334
|
- spec/unit/action/start_domain_spec/clock_timer_rtc.xml
|
314
335
|
- spec/unit/action/start_domain_spec/default.xml
|
315
|
-
- spec/unit/action/start_domain_spec/default_added_tpm_path.xml
|
316
|
-
- spec/unit/action/start_domain_spec/default_added_tpm_version.xml
|
317
336
|
- spec/unit/action/start_domain_spec/existing.xml
|
318
|
-
- spec/unit/action/
|
319
|
-
- spec/unit/action/forward_ports_spec.rb
|
337
|
+
- spec/unit/action/start_domain_spec/default_added_tpm_version.xml
|
320
338
|
- spec/unit/action/handle_box_image_spec.rb
|
321
|
-
- spec/unit/action/set_name_of_domain_spec.rb
|
322
|
-
- spec/unit/action/wait_till_up_spec.rb
|
323
|
-
- spec/unit/action/create_domain_volume_spec.rb
|
324
|
-
- spec/unit/action/start_domain_spec.rb
|
325
|
-
- spec/unit/action/destroy_domain_spec.rb
|
326
|
-
- spec/unit/action/halt_domain_spec.rb
|
327
|
-
- spec/unit/action/shutdown_domain_spec.rb
|
328
|
-
- spec/unit/action/create_domain_spec.rb
|
329
|
-
- spec/unit/action/package_domain_spec.rb
|
330
|
-
- spec/unit/templates/tpm/version_1.2.xml
|
331
|
-
- spec/unit/templates/tpm/version_2.0.xml
|
332
|
-
- spec/unit/templates/domain_custom_cpu_model.xml
|
333
|
-
- spec/unit/templates/domain_defaults.xml
|
334
|
-
- spec/unit/templates/domain_spec.rb
|
335
|
-
- spec/unit/templates/domain_all_settings.xml
|
336
|
-
- spec/unit/util/byte_number_spec.rb
|
337
|
-
- spec/unit/provider_spec.rb
|
338
|
-
- spec/unit/action_spec.rb
|
339
339
|
- spec/unit/config_spec.rb
|
340
|
+
- spec/unit/util/byte_number_spec.rb
|
340
341
|
- spec/unit/driver_spec.rb
|
341
342
|
- spec/spec_helper.rb
|
data/spec/unit/provider_spec.rb
DELETED