vagrant-libvirt 0.10.6 → 0.10.8
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 +1 -1
- data/lib/vagrant-libvirt/action/create_domain.rb +2 -0
- data/lib/vagrant-libvirt/action/destroy_domain.rb +4 -5
- data/lib/vagrant-libvirt/action/forward_ports.rb +16 -15
- data/lib/vagrant-libvirt/action/handle_box_image.rb +2 -0
- data/lib/vagrant-libvirt/action/package_domain.rb +1 -0
- data/lib/vagrant-libvirt/action/resolve_disk_settings.rb +2 -5
- data/lib/vagrant-libvirt/action/set_boot_order.rb +44 -42
- data/lib/vagrant-libvirt/action/start_domain.rb +393 -379
- data/lib/vagrant-libvirt/cap/synced_folder_9p.rb +2 -0
- data/lib/vagrant-libvirt/cap/synced_folder_virtiofs.rb +3 -1
- data/lib/vagrant-libvirt/config.rb +1 -2
- data/lib/vagrant-libvirt/driver.rb +1 -1
- data/lib/vagrant-libvirt/errors.rb +4 -0
- data/lib/vagrant-libvirt/util/compat.rb +1 -1
- data/lib/vagrant-libvirt/util/network_util.rb +1 -1
- data/lib/vagrant-libvirt/version +1 -1
- data/locales/en.yml +2 -0
- data/spec/acceptance/support-skeletons/package_complex/scripts/sysprep.sh +0 -0
- data/spec/spec_helper.rb +18 -5
- data/spec/unit/action/set_boot_order_spec/default.xml +76 -0
- data/spec/unit/action/set_boot_order_spec/explicit_boot_order.xml +77 -0
- data/spec/unit/action/set_boot_order_spec.rb +67 -0
- data/spec/unit/action/start_domain_spec/existing_reordered.xml +62 -0
- data/spec/unit/action/start_domain_spec.rb +41 -18
- data/spec/unit/plugin_spec.rb +1 -0
- metadata +80 -72
@@ -5,9 +5,11 @@ require 'ostruct'
|
|
5
5
|
require 'nokogiri'
|
6
6
|
require 'digest/md5'
|
7
7
|
|
8
|
-
require 'vagrant/util/subprocess'
|
9
8
|
require 'vagrant/errors'
|
9
|
+
require 'vagrant/util/subprocess'
|
10
|
+
|
10
11
|
require 'vagrant-libvirt/errors'
|
12
|
+
require 'vagrant-libvirt/util/erb_template'
|
11
13
|
|
12
14
|
module VagrantPlugins
|
13
15
|
module SyncedFolderVirtioFS
|
@@ -896,8 +896,7 @@ module VagrantPlugins
|
|
896
896
|
@initrd = '' if @initrd == UNSET_VALUE
|
897
897
|
@dtb = nil if @dtb == UNSET_VALUE
|
898
898
|
@graphics_type = 'vnc' if @graphics_type == UNSET_VALUE
|
899
|
-
@graphics_autoport =
|
900
|
-
@graphics_autoport = 'no' if @graphics_port != UNSET_VALUE
|
899
|
+
@graphics_autoport = @graphics_port == UNSET_VALUE ? 'yes' : nil
|
901
900
|
if (@graphics_type != 'vnc' && @graphics_type != 'spice') ||
|
902
901
|
@graphics_passwd == UNSET_VALUE
|
903
902
|
@graphics_passwd = nil
|
@@ -234,12 +234,12 @@ module VagrantPlugins
|
|
234
234
|
@logger.debug(response)
|
235
235
|
addresses = JSON.parse(response)
|
236
236
|
rescue StandardError => e
|
237
|
-
puts "Unable to receive IP via qemu agent: [#{e.message}]"
|
238
237
|
@logger.debug("Unable to receive IP via qemu agent: [#{e.message}]")
|
239
238
|
end
|
240
239
|
|
241
240
|
unless addresses.nil?
|
242
241
|
addresses['return'].each do |interface|
|
242
|
+
next unless interface.key?('hardware-address')
|
243
243
|
next unless domain.mac.downcase == interface['hardware-address'].downcase
|
244
244
|
|
245
245
|
@logger.debug("Found matching interface: [#{interface['name']}]")
|
@@ -178,6 +178,10 @@ module VagrantPlugins
|
|
178
178
|
error_key(:no_domain_error)
|
179
179
|
end
|
180
180
|
|
181
|
+
class DomainStartError < VagrantLibvirtError
|
182
|
+
error_key(:domain_start_error)
|
183
|
+
end
|
184
|
+
|
181
185
|
class AttachDeviceError < VagrantLibvirtError
|
182
186
|
error_key(:attach_device_error)
|
183
187
|
end
|
@@ -11,7 +11,7 @@ module VagrantPlugins
|
|
11
11
|
module Compat
|
12
12
|
def self.action_hook_args(name, action)
|
13
13
|
# handle different number of arguments for action_hook depending on vagrant version
|
14
|
-
if Gem::Version.new(Vagrant::VERSION) >= Gem::Version.new('2.2.
|
14
|
+
if Gem::Version.new(Vagrant::VERSION) >= Gem::Version.new('2.2.10')
|
15
15
|
return name, action
|
16
16
|
end
|
17
17
|
|
@@ -120,7 +120,7 @@ module VagrantPlugins
|
|
120
120
|
logger.debug "In config found network type #{type} options #{original_options}"
|
121
121
|
# Options can be specified in Vagrantfile in short format (:ip => ...),
|
122
122
|
# or provider format # (:libvirt__network_name => ...).
|
123
|
-
# https://github.com/mitchellh/vagrant/blob/
|
123
|
+
# https://github.com/mitchellh/vagrant/blob/main/lib/vagrant/util/scoped_hash_override.rb
|
124
124
|
options = scoped_hash_override(original_options, :libvirt)
|
125
125
|
# store type in options
|
126
126
|
# use default values if not already set
|
data/lib/vagrant-libvirt/version
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.10.
|
1
|
+
0.10.8
|
data/locales/en.yml
CHANGED
@@ -153,6 +153,8 @@ en:
|
|
153
153
|
Error while downloading volume '%{volume_name}' from storage pool '%{pool_name}': %{error_message}
|
154
154
|
no_domain_error: |-
|
155
155
|
No domain found. %{error_message}
|
156
|
+
domain_start_error: |-
|
157
|
+
Failed to start domain: %{error_message}
|
156
158
|
attach_device_error: |-
|
157
159
|
Error while attaching new device to domain. %{error_message}
|
158
160
|
detach_device_error: |-
|
File without changes
|
data/spec/spec_helper.rb
CHANGED
@@ -38,13 +38,14 @@ rescue LoadError
|
|
38
38
|
end
|
39
39
|
end
|
40
40
|
|
41
|
+
RSpec.configure do |config|
|
42
|
+
require 'tmpdir'
|
41
43
|
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
44
|
+
# set VAGRANT_HOME before any thing that requires vagrant is loaded to prevent
|
45
|
+
# the global plugin manager from trying to use the default VAGRANT_HOME.
|
46
|
+
temp_dir = Dir.mktmpdir("rspec-")
|
47
|
+
ENV['VAGRANT_HOME'] = temp_dir
|
46
48
|
|
47
|
-
RSpec.configure do |config|
|
48
49
|
# ensure that setting of LIBVIRT_DEFAULT_URI in the environment is not picked
|
49
50
|
# up directly by tests, instead they must set as needed. Some build envs will
|
50
51
|
# may have it set to 'qemu:///session'.
|
@@ -52,10 +53,22 @@ RSpec.configure do |config|
|
|
52
53
|
ENV.delete('LIBVIRT_DEFAULT_URI')
|
53
54
|
end
|
54
55
|
|
56
|
+
config.after(:suite) do
|
57
|
+
FileUtils.remove_entry temp_dir
|
58
|
+
end
|
59
|
+
|
55
60
|
config.mock_with :rspec do |mocks|
|
56
61
|
mocks.verify_partial_doubles = true
|
57
62
|
end
|
58
63
|
|
59
64
|
# don't run acceptance tests by default
|
60
65
|
config.filter_run_excluding :acceptance => true
|
66
|
+
|
67
|
+
config.expect_with :rspec do |c|
|
68
|
+
c.max_formatted_output_length = 2000 if c.respond_to?("max_formatted_output_length=")
|
69
|
+
end
|
61
70
|
end
|
71
|
+
|
72
|
+
require 'vagrant-spec/unit'
|
73
|
+
|
74
|
+
Dir[File.dirname(__FILE__) + '/support/**/*.rb'].each { |f| require f }
|
@@ -0,0 +1,76 @@
|
|
1
|
+
<domain type="qemu">
|
2
|
+
<name>vagrant-libvirt_default</name>
|
3
|
+
<uuid>881a931b-0110-4d10-81aa-47a1a19f5726</uuid>
|
4
|
+
<description>Source: /home/test/vagrant-libvirt/Vagrantfile</description>
|
5
|
+
<memory unit="KiB">2097152</memory>
|
6
|
+
<currentMemory unit="KiB">2097152</currentMemory>
|
7
|
+
<vcpu placement="static">2</vcpu>
|
8
|
+
<os>
|
9
|
+
<type arch="x86_64" machine="pc-i440fx-6.0">hvm</type>
|
10
|
+
<boot dev="hd"/>
|
11
|
+
</os>
|
12
|
+
<features>
|
13
|
+
<acpi/>
|
14
|
+
<apic/>
|
15
|
+
<pae/>
|
16
|
+
</features>
|
17
|
+
<cpu mode="host-model" check="partial"/>
|
18
|
+
<clock offset="utc"/>
|
19
|
+
<on_poweroff>destroy</on_poweroff>
|
20
|
+
<on_reboot>restart</on_reboot>
|
21
|
+
<on_crash>destroy</on_crash>
|
22
|
+
<devices>
|
23
|
+
<emulator>/usr/bin/qemu-system-x86_64</emulator>
|
24
|
+
<disk type="file" device="disk">
|
25
|
+
<driver name="qemu" type="qcow2"/>
|
26
|
+
<source file="/var/lib/libvirt/images/vagrant-libvirt_default.img"/>
|
27
|
+
<target dev="vda" bus="virtio"/>
|
28
|
+
<address type="pci" domain="0x0000" bus="0x00" slot="0x03" function="0x0"/>
|
29
|
+
</disk>
|
30
|
+
<disk type="file" device="cdrom">
|
31
|
+
<driver name="qemu" type="raw"/>
|
32
|
+
<source file=""/>
|
33
|
+
<target dev="hda" bus="ide"/>
|
34
|
+
<readonly/>
|
35
|
+
<address type="pci" domain="0x0000" bus="0x00" slot="0x06" function="0x0"/>
|
36
|
+
</disk>
|
37
|
+
<disk type="file" device="cdrom">
|
38
|
+
<driver name="qemu" type="raw"/>
|
39
|
+
<source file=""/>
|
40
|
+
<target dev="hdb" bus="ide"/>
|
41
|
+
<readonly/>
|
42
|
+
<address type="pci" domain="0x0000" bus="0x00" slot="0x07" function="0x0"/>
|
43
|
+
</disk>
|
44
|
+
<controller type="usb" index="0" model="piix3-uhci">
|
45
|
+
<address type="pci" domain="0x0000" bus="0x00" slot="0x01" function="0x2"/>
|
46
|
+
</controller>
|
47
|
+
<controller type="pci" index="0" model="pci-root"/>
|
48
|
+
<interface type="network">
|
49
|
+
<mac address="52:54:00:7d:14:0e"/>
|
50
|
+
<source network="vagrant-libvirt"/>
|
51
|
+
<model type="virtio"/>
|
52
|
+
<address type="pci" domain="0x0000" bus="0x00" slot="0x05" function="0x0"/>
|
53
|
+
</interface>
|
54
|
+
<serial type="pty">
|
55
|
+
<target type="isa-serial" port="0">
|
56
|
+
<model name="isa-serial"/>
|
57
|
+
</target>
|
58
|
+
</serial>
|
59
|
+
<console type="pty">
|
60
|
+
<target type="serial" port="0"/>
|
61
|
+
</console>
|
62
|
+
<input type="mouse" bus="ps2"/>
|
63
|
+
<input type="keyboard" bus="ps2"/>
|
64
|
+
<graphics type="vnc" port="-1" autoport="yes" listen="127.0.0.1" keymap="en-us">
|
65
|
+
<listen type="address" address="127.0.0.1"/>
|
66
|
+
</graphics>
|
67
|
+
<audio id="1" type="none"/>
|
68
|
+
<video>
|
69
|
+
<model type="cirrus" vram="16384" heads="1" primary="yes"/>
|
70
|
+
<address type="pci" domain="0x0000" bus="0x00" slot="0x02" function="0x0"/>
|
71
|
+
</video>
|
72
|
+
<memballoon model="virtio">
|
73
|
+
<address type="pci" domain="0x0000" bus="0x00" slot="0x04" function="0x0"/>
|
74
|
+
</memballoon>
|
75
|
+
</devices>
|
76
|
+
</domain>
|
@@ -0,0 +1,77 @@
|
|
1
|
+
<?xml version="1.0"?>
|
2
|
+
<domain type="qemu">
|
3
|
+
<name>vagrant-libvirt_default</name>
|
4
|
+
<uuid>881a931b-0110-4d10-81aa-47a1a19f5726</uuid>
|
5
|
+
<description>Source: /home/test/vagrant-libvirt/Vagrantfile</description>
|
6
|
+
<memory unit="KiB">2097152</memory>
|
7
|
+
<currentMemory unit="KiB">2097152</currentMemory>
|
8
|
+
<vcpu placement="static">2</vcpu>
|
9
|
+
<os>
|
10
|
+
<type arch="x86_64" machine="pc-i440fx-6.0">hvm</type>
|
11
|
+
|
12
|
+
</os>
|
13
|
+
<features>
|
14
|
+
<acpi/>
|
15
|
+
<apic/>
|
16
|
+
<pae/>
|
17
|
+
</features>
|
18
|
+
<cpu mode="host-model" check="partial"/>
|
19
|
+
<clock offset="utc"/>
|
20
|
+
<on_poweroff>destroy</on_poweroff>
|
21
|
+
<on_reboot>restart</on_reboot>
|
22
|
+
<on_crash>destroy</on_crash>
|
23
|
+
<devices>
|
24
|
+
<emulator>/usr/bin/qemu-system-x86_64</emulator>
|
25
|
+
<disk type="file" device="disk">
|
26
|
+
<driver name="qemu" type="qcow2"/>
|
27
|
+
<source file="/var/lib/libvirt/images/vagrant-libvirt_default.img"/>
|
28
|
+
<target dev="vda" bus="virtio"/>
|
29
|
+
<address type="pci" domain="0x0000" bus="0x00" slot="0x03" function="0x0"/>
|
30
|
+
<boot order="1"/></disk>
|
31
|
+
<disk type="file" device="cdrom">
|
32
|
+
<driver name="qemu" type="raw"/>
|
33
|
+
<source file=""/>
|
34
|
+
<target dev="hda" bus="ide"/>
|
35
|
+
<readonly/>
|
36
|
+
<address type="pci" domain="0x0000" bus="0x00" slot="0x06" function="0x0"/>
|
37
|
+
<boot order="2"/></disk>
|
38
|
+
<disk type="file" device="cdrom">
|
39
|
+
<driver name="qemu" type="raw"/>
|
40
|
+
<source file=""/>
|
41
|
+
<target dev="hdb" bus="ide"/>
|
42
|
+
<readonly/>
|
43
|
+
<address type="pci" domain="0x0000" bus="0x00" slot="0x07" function="0x0"/>
|
44
|
+
<boot order="3"/></disk>
|
45
|
+
<controller type="usb" index="0" model="piix3-uhci">
|
46
|
+
<address type="pci" domain="0x0000" bus="0x00" slot="0x01" function="0x2"/>
|
47
|
+
</controller>
|
48
|
+
<controller type="pci" index="0" model="pci-root"/>
|
49
|
+
<interface type="network">
|
50
|
+
<mac address="52:54:00:7d:14:0e"/>
|
51
|
+
<source network="vagrant-libvirt"/>
|
52
|
+
<model type="virtio"/>
|
53
|
+
<address type="pci" domain="0x0000" bus="0x00" slot="0x05" function="0x0"/>
|
54
|
+
<boot order="4"/></interface>
|
55
|
+
<serial type="pty">
|
56
|
+
<target type="isa-serial" port="0">
|
57
|
+
<model name="isa-serial"/>
|
58
|
+
</target>
|
59
|
+
</serial>
|
60
|
+
<console type="pty">
|
61
|
+
<target type="serial" port="0"/>
|
62
|
+
</console>
|
63
|
+
<input type="mouse" bus="ps2"/>
|
64
|
+
<input type="keyboard" bus="ps2"/>
|
65
|
+
<graphics type="vnc" port="-1" autoport="yes" listen="127.0.0.1" keymap="en-us">
|
66
|
+
<listen type="address" address="127.0.0.1"/>
|
67
|
+
</graphics>
|
68
|
+
<audio id="1" type="none"/>
|
69
|
+
<video>
|
70
|
+
<model type="cirrus" vram="16384" heads="1" primary="yes"/>
|
71
|
+
<address type="pci" domain="0x0000" bus="0x00" slot="0x02" function="0x0"/>
|
72
|
+
</video>
|
73
|
+
<memballoon model="virtio">
|
74
|
+
<address type="pci" domain="0x0000" bus="0x00" slot="0x04" function="0x0"/>
|
75
|
+
</memballoon>
|
76
|
+
</devices>
|
77
|
+
</domain>
|
@@ -0,0 +1,67 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
require 'support/sharedcontext'
|
5
|
+
require 'support/libvirt_context'
|
6
|
+
|
7
|
+
require 'vagrant-libvirt/action/set_boot_order'
|
8
|
+
|
9
|
+
describe VagrantPlugins::ProviderLibvirt::Action::SetBootOrder do
|
10
|
+
subject { described_class.new(app, env) }
|
11
|
+
|
12
|
+
include_context 'unit'
|
13
|
+
include_context 'libvirt'
|
14
|
+
|
15
|
+
#before do
|
16
|
+
# allow(driver).to receive(:created?).and_return(true)
|
17
|
+
#end
|
18
|
+
|
19
|
+
describe '#call' do
|
20
|
+
it 'should return early' do
|
21
|
+
expect(connection).to_not receive(:client)
|
22
|
+
|
23
|
+
expect(subject.call(env)).to be_nil
|
24
|
+
end
|
25
|
+
|
26
|
+
context 'with boot_order defined' do
|
27
|
+
let(:domain_xml) { File.read(File.join(File.dirname(__FILE__), File.basename(__FILE__, '.rb'), test_file)) }
|
28
|
+
let(:updated_domain_xml) { File.read(File.join(File.dirname(__FILE__), File.basename(__FILE__, '.rb'), updated_test_file)) }
|
29
|
+
let(:test_file) { 'default.xml' }
|
30
|
+
let(:updated_test_file) { 'explicit_boot_order.xml' }
|
31
|
+
let(:vagrantfile_providerconfig) do
|
32
|
+
<<-EOF
|
33
|
+
libvirt.boot "hd"
|
34
|
+
libvirt.boot "cdrom"
|
35
|
+
libvirt.boot "network" => 'vagrant-libvirt'
|
36
|
+
EOF
|
37
|
+
end
|
38
|
+
|
39
|
+
before do
|
40
|
+
allow(connection).to receive(:client).and_return(libvirt_client)
|
41
|
+
allow(libvirt_client).to receive(:lookup_domain_by_uuid).and_return(libvirt_domain)
|
42
|
+
allow(libvirt_domain).to receive(:xml_desc).and_return(domain_xml)
|
43
|
+
allow(logger).to receive(:debug)
|
44
|
+
end
|
45
|
+
|
46
|
+
it 'should configure the boot order' do
|
47
|
+
expect(libvirt_client).to receive(:define_domain_xml).with(updated_domain_xml)
|
48
|
+
expect(subject.call(env)).to be_nil
|
49
|
+
end
|
50
|
+
|
51
|
+
context 'with multiple networks in bootorder' do
|
52
|
+
let(:vagrantfile_providerconfig) do
|
53
|
+
<<-EOF
|
54
|
+
libvirt.boot "hd"
|
55
|
+
libvirt.boot "cdrom"
|
56
|
+
libvirt.boot "network" => 'vagrant-libvirt'
|
57
|
+
libvirt.boot "network" => 'vagrant-libvirt'
|
58
|
+
EOF
|
59
|
+
end
|
60
|
+
|
61
|
+
it 'should raise an exception' do
|
62
|
+
expect { subject.call(env) }.to raise_error('Defined only for 1 network for boot')
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
@@ -0,0 +1,62 @@
|
|
1
|
+
<domain type='qemu'>
|
2
|
+
<name>vagrant-libvirt_default</name>
|
3
|
+
<uuid>881a931b-0110-4d10-81aa-47a1a19f5726</uuid>
|
4
|
+
<description>Source: /home/test/vagrant-libvirt/Vagrantfile</description>
|
5
|
+
<memory unit='KiB'>2097152</memory>
|
6
|
+
<currentMemory unit='KiB'>2097152</currentMemory>
|
7
|
+
<vcpu placement='static'>2</vcpu>
|
8
|
+
<os>
|
9
|
+
<type arch='x86_64' machine='pc-i440fx-6.0'>hvm</type>
|
10
|
+
<boot dev='hd'/>
|
11
|
+
</os>
|
12
|
+
<features>
|
13
|
+
<acpi/>
|
14
|
+
<apic/>
|
15
|
+
<pae/>
|
16
|
+
</features>
|
17
|
+
<cpu check='partial' mode='host-passthrough'/>
|
18
|
+
<clock offset='utc'/>
|
19
|
+
<on_poweroff>destroy</on_poweroff>
|
20
|
+
<on_reboot>restart</on_reboot>
|
21
|
+
<on_crash>destroy</on_crash>
|
22
|
+
<devices>
|
23
|
+
<emulator>/usr/bin/qemu-system-x86_64</emulator>
|
24
|
+
<disk device='disk' type='file'>
|
25
|
+
<driver name='qemu' type='qcow2'/>
|
26
|
+
<source file='/var/lib/libvirt/images/vagrant-libvirt_default.img'/>
|
27
|
+
<target bus='virtio' dev='vda'/>
|
28
|
+
<address bus='0x00' domain='0x0000' function='0x0' slot='0x03' type='pci'/>
|
29
|
+
</disk>
|
30
|
+
<controller index='0' model='pci-root' type='pci'/>
|
31
|
+
<controller index='0' model='piix3-uhci' type='usb'>
|
32
|
+
<address bus='0x00' domain='0x0000' function='0x2' slot='0x01' type='pci'/>
|
33
|
+
</controller>
|
34
|
+
<interface type='network'>
|
35
|
+
<mac address='52:54:00:7d:14:0e'/>
|
36
|
+
<source network='vagrant-libvirt'/>
|
37
|
+
<model type='virtio'/>
|
38
|
+
<address bus='0x00' domain='0x0000' function='0x0' slot='0x05' type='pci'/>
|
39
|
+
</interface>
|
40
|
+
<serial type='pty'>
|
41
|
+
<target port='0' type='isa-serial'>
|
42
|
+
<model name='isa-serial'/>
|
43
|
+
</target>
|
44
|
+
</serial>
|
45
|
+
<console type='pty'>
|
46
|
+
<target port='0' type='serial'/>
|
47
|
+
</console>
|
48
|
+
<input bus='ps2' type='mouse'/>
|
49
|
+
<input bus='ps2' type='keyboard'/>
|
50
|
+
<graphics autoport='yes' keymap='en-us' listen='127.0.0.1' port='-1' type='vnc'>
|
51
|
+
<listen address='127.0.0.1' type='address'/>
|
52
|
+
</graphics>
|
53
|
+
<audio id='1' type='none'/>
|
54
|
+
<video>
|
55
|
+
<model heads='1' primary='yes' type='cirrus' vram='16384'/>
|
56
|
+
<address bus='0x00' domain='0x0000' function='0x0' slot='0x02' type='pci'/>
|
57
|
+
</video>
|
58
|
+
<memballoon model='virtio'>
|
59
|
+
<address bus='0x00' domain='0x0000' function='0x0' slot='0x04' type='pci'/>
|
60
|
+
</memballoon>
|
61
|
+
</devices>
|
62
|
+
</domain>
|
@@ -42,7 +42,7 @@ describe VagrantPlugins::ProviderLibvirt::Action::StartDomain do
|
|
42
42
|
end
|
43
43
|
|
44
44
|
it 'should execute without changing' do
|
45
|
-
expect(ui).to_not receive(:
|
45
|
+
expect(ui).to_not receive(:warn)
|
46
46
|
expect(libvirt_client).to_not receive(:define_domain_xml)
|
47
47
|
expect(libvirt_domain).to receive(:autostart=)
|
48
48
|
expect(domain).to receive(:start)
|
@@ -64,7 +64,27 @@ describe VagrantPlugins::ProviderLibvirt::Action::StartDomain do
|
|
64
64
|
end
|
65
65
|
|
66
66
|
it 'should correctly detect the domain was updated' do
|
67
|
-
expect(ui).to_not receive(:
|
67
|
+
expect(ui).to_not receive(:warn)
|
68
|
+
expect(libvirt_domain).to receive(:autostart=)
|
69
|
+
expect(connection).to receive(:define_domain).and_return(libvirt_domain)
|
70
|
+
expect(libvirt_domain).to receive(:xml_desc).and_return(domain_xml, updated_domain_xml)
|
71
|
+
expect(domain).to receive(:start)
|
72
|
+
|
73
|
+
expect(subject.call(env)).to be_nil
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
context 'when xml elements and attributes reordered' do
|
78
|
+
let(:test_file) { 'existing.xml' }
|
79
|
+
let(:updated_test_file) { 'existing_reordered.xml' }
|
80
|
+
let(:vagrantfile_providerconfig) do
|
81
|
+
<<-EOF
|
82
|
+
libvirt.cpu_mode = "host-passthrough"
|
83
|
+
EOF
|
84
|
+
end
|
85
|
+
|
86
|
+
it 'should correctly detect the domain was updated' do
|
87
|
+
expect(ui).to_not receive(:warn)
|
68
88
|
expect(libvirt_domain).to receive(:autostart=)
|
69
89
|
expect(connection).to receive(:define_domain).and_return(libvirt_domain)
|
70
90
|
expect(libvirt_domain).to receive(:xml_desc).and_return(domain_xml, updated_domain_xml)
|
@@ -88,13 +108,16 @@ describe VagrantPlugins::ProviderLibvirt::Action::StartDomain do
|
|
88
108
|
end
|
89
109
|
|
90
110
|
it 'should error and revert the update' do
|
91
|
-
expect(ui).to receive(:
|
111
|
+
expect(ui).to receive(:warn).with(/\+ <cpu mode="host-passthrough" \/>.*Typically this means there is a bug in the XML being sent, please log an issue/m)
|
92
112
|
expect(connection).to receive(:define_domain).and_return(libvirt_domain)
|
93
|
-
expect(connection).to receive(:define_domain).with(domain_xml) # undo
|
113
|
+
#expect(connection).to receive(:define_domain).with(domain_xml) # undo
|
94
114
|
expect(libvirt_domain).to receive(:xml_desc).and_return(domain_xml, updated_domain_xml)
|
95
|
-
expect(domain).to_not receive(:start)
|
115
|
+
#expect(domain).to_not receive(:start)
|
96
116
|
|
97
|
-
expect { subject.call(env) }.to raise_error(VagrantPlugins::ProviderLibvirt::Errors::
|
117
|
+
#expect { subject.call(env) }.to raise_error(VagrantPlugins::ProviderLibvirt::Errors::UpdateServerError)
|
118
|
+
expect(libvirt_domain).to receive(:autostart=)
|
119
|
+
expect(domain).to receive(:start)
|
120
|
+
expect(subject.call(env)).to be_nil
|
98
121
|
end
|
99
122
|
end
|
100
123
|
|
@@ -112,7 +135,7 @@ describe VagrantPlugins::ProviderLibvirt::Action::StartDomain do
|
|
112
135
|
}
|
113
136
|
|
114
137
|
it 'should update the domain' do
|
115
|
-
expect(ui).to_not receive(:
|
138
|
+
expect(ui).to_not receive(:warn)
|
116
139
|
expect(libvirt_domain).to receive(:autostart=)
|
117
140
|
expect(connection).to receive(:define_domain).and_return(libvirt_domain)
|
118
141
|
expect(libvirt_domain).to receive(:xml_desc).and_return(domain_xml, updated_domain_xml)
|
@@ -151,7 +174,7 @@ describe VagrantPlugins::ProviderLibvirt::Action::StartDomain do
|
|
151
174
|
let(:updated_test_file) { 'existing_added_nvram.xml' }
|
152
175
|
|
153
176
|
it 'should add the nvram element' do
|
154
|
-
expect(ui).to_not receive(:
|
177
|
+
expect(ui).to_not receive(:warn)
|
155
178
|
expect(connection).to receive(:define_domain).with(updated_domain_xml).and_return(libvirt_domain)
|
156
179
|
expect(libvirt_domain).to receive(:xml_desc).and_return(domain_xml, updated_domain_xml)
|
157
180
|
expect(libvirt_domain).to receive(:autostart=)
|
@@ -172,7 +195,7 @@ describe VagrantPlugins::ProviderLibvirt::Action::StartDomain do
|
|
172
195
|
let(:updated_test_file) { 'nvram_domain_other_setting.xml' }
|
173
196
|
|
174
197
|
it 'should keep the XML element' do
|
175
|
-
expect(ui).to_not receive(:
|
198
|
+
expect(ui).to_not receive(:warn)
|
176
199
|
expect(connection).to receive(:define_domain).with(updated_domain_xml).and_return(libvirt_domain)
|
177
200
|
expect(libvirt_domain).to receive(:xml_desc).and_return(domain_xml, updated_domain_xml)
|
178
201
|
expect(libvirt_domain).to receive(:autostart=)
|
@@ -186,7 +209,7 @@ describe VagrantPlugins::ProviderLibvirt::Action::StartDomain do
|
|
186
209
|
let(:updated_test_file) { 'nvram_domain_removed.xml' }
|
187
210
|
|
188
211
|
it 'should delete the XML element' do
|
189
|
-
expect(ui).to_not receive(:
|
212
|
+
expect(ui).to_not receive(:warn)
|
190
213
|
expect(connection).to receive(:define_domain).with(updated_domain_xml).and_return(libvirt_domain)
|
191
214
|
expect(libvirt_domain).to receive(:xml_desc).and_return(domain_xml, updated_domain_xml)
|
192
215
|
expect(libvirt_domain).to receive(:autostart=)
|
@@ -210,7 +233,7 @@ describe VagrantPlugins::ProviderLibvirt::Action::StartDomain do
|
|
210
233
|
end
|
211
234
|
|
212
235
|
it 'should modify the domain tpm_path' do
|
213
|
-
expect(ui).to_not receive(:
|
236
|
+
expect(ui).to_not receive(:warn)
|
214
237
|
expect(logger).to receive(:debug).with('tpm config changed')
|
215
238
|
expect(connection).to receive(:define_domain).with(updated_domain_xml).and_return(libvirt_domain)
|
216
239
|
expect(libvirt_domain).to receive(:xml_desc).and_return(domain_xml, updated_domain_xml)
|
@@ -232,7 +255,7 @@ describe VagrantPlugins::ProviderLibvirt::Action::StartDomain do
|
|
232
255
|
end
|
233
256
|
|
234
257
|
it 'should modify the domain tpm_path' do
|
235
|
-
expect(ui).to_not receive(:
|
258
|
+
expect(ui).to_not receive(:warn)
|
236
259
|
expect(logger).to receive(:debug).with('tpm config changed')
|
237
260
|
expect(connection).to receive(:define_domain).with(updated_domain_xml).and_return(libvirt_domain)
|
238
261
|
expect(libvirt_domain).to receive(:xml_desc).and_return(domain_xml, updated_domain_xml)
|
@@ -255,7 +278,7 @@ describe VagrantPlugins::ProviderLibvirt::Action::StartDomain do
|
|
255
278
|
end
|
256
279
|
|
257
280
|
it 'should execute without changing' do
|
258
|
-
expect(ui).to_not receive(:
|
281
|
+
expect(ui).to_not receive(:warn)
|
259
282
|
expect(libvirt_domain).to receive(:autostart=)
|
260
283
|
expect(domain).to receive(:start)
|
261
284
|
|
@@ -275,7 +298,7 @@ describe VagrantPlugins::ProviderLibvirt::Action::StartDomain do
|
|
275
298
|
end
|
276
299
|
|
277
300
|
it 'should execute without changing' do
|
278
|
-
expect(ui).to_not receive(:
|
301
|
+
expect(ui).to_not receive(:warn)
|
279
302
|
expect(libvirt_domain).to receive(:autostart=)
|
280
303
|
expect(domain).to receive(:start)
|
281
304
|
|
@@ -295,7 +318,7 @@ describe VagrantPlugins::ProviderLibvirt::Action::StartDomain do
|
|
295
318
|
end
|
296
319
|
|
297
320
|
it 'should modify the domain' do
|
298
|
-
expect(ui).to_not receive(:
|
321
|
+
expect(ui).to_not receive(:warn)
|
299
322
|
expect(logger).to receive(:debug).with('tpm config changed')
|
300
323
|
expect(connection).to receive(:define_domain).with(updated_domain_xml).and_return(libvirt_domain)
|
301
324
|
expect(libvirt_domain).to receive(:xml_desc).and_return(domain_xml, updated_domain_xml)
|
@@ -318,7 +341,7 @@ describe VagrantPlugins::ProviderLibvirt::Action::StartDomain do
|
|
318
341
|
end
|
319
342
|
|
320
343
|
it 'should not modify the domain' do
|
321
|
-
expect(ui).to_not receive(:
|
344
|
+
expect(ui).to_not receive(:warn)
|
322
345
|
expect(logger).to_not receive(:debug).with('clock timers config changed')
|
323
346
|
expect(connection).to_not receive(:define_domain)
|
324
347
|
expect(libvirt_domain).to receive(:autostart=)
|
@@ -339,7 +362,7 @@ describe VagrantPlugins::ProviderLibvirt::Action::StartDomain do
|
|
339
362
|
let(:updated_test_file) { 'clock_timer_rtc_tsc.xml' }
|
340
363
|
|
341
364
|
it 'should modify the domain' do
|
342
|
-
expect(ui).to_not receive(:
|
365
|
+
expect(ui).to_not receive(:warn)
|
343
366
|
expect(logger).to receive(:debug).with('clock timers config changed')
|
344
367
|
expect(connection).to receive(:define_domain).with(match(/<clock offset='utc'>\s*<timer name='rtc'\/>\s*<timer name='tsc'\/>\s*<\/clock>/)).and_return(libvirt_domain)
|
345
368
|
expect(libvirt_domain).to receive(:xml_desc).and_return(domain_xml, updated_domain_xml)
|
@@ -354,7 +377,7 @@ describe VagrantPlugins::ProviderLibvirt::Action::StartDomain do
|
|
354
377
|
let(:updated_test_file) { 'clock_timer_removed.xml' }
|
355
378
|
|
356
379
|
it 'should modify the domain' do
|
357
|
-
expect(ui).to_not receive(:
|
380
|
+
expect(ui).to_not receive(:warn)
|
358
381
|
expect(logger).to receive(:debug).with('clock timers config changed')
|
359
382
|
expect(connection).to receive(:define_domain).with(match(/<clock offset='utc'>\s*<\/clock>/)).and_return(libvirt_domain)
|
360
383
|
expect(libvirt_domain).to receive(:xml_desc).and_return(domain_xml, updated_domain_xml)
|