vagrant-libvirt 0.10.3 → 0.10.6

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e424c510119507bbfc057c3f53ddef7151863d0680be4957c104cacd514ce737
4
- data.tar.gz: 9453b83d2078e8787535da2dc6c558bfa44a44b4ce87e2218485e11d8eea0f70
3
+ metadata.gz: 67234309e889d2254d68de7a257d1bf051bb507afcfc0ff03c28906dcceae43d
4
+ data.tar.gz: 1b0f05ff1fd494b46b99715ba500a20237e2262e2de0066ddfb07c46fac5d192
5
5
  SHA512:
6
- metadata.gz: 3abe6c5883f9c6b2b38890d7a2dfe1f87fc2f9290aad30e4742e62d9ba736ed6aacbb394b161e44621ab354087ba5b395d119bb31b006baf6166152553ea8d43
7
- data.tar.gz: 69ce100c38dc5b7968da4bf2f0369e3eaa1b61763aa7d1fcd03cad117e060bc45df35560691c9928aebe42851414b6ba6ee73441943061e9a871461d70a21dcd
6
+ metadata.gz: eb86380ba32e7c6d93856e3d6f168a3ea93d7bb4c532063764239f2875ea9371ca6c113f3a54671c90ba51a8b38166c271794932c1ce104981f40ab45be93de2
7
+ data.tar.gz: 035da37488d87c895b8f92b3bd0f616db26447edcbc7ee88fd7d4aa8b33c9f077893aef63ce6fd01e5f961349d938218aa749f0717be69becc4a2363656ac3ef
@@ -1,14 +1,17 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'diffy'
4
3
  require 'log4r'
4
+
5
5
  require 'rexml/document'
6
6
 
7
+ require 'vagrant-libvirt/util/xml'
8
+
7
9
  module VagrantPlugins
8
10
  module ProviderLibvirt
9
11
  module Action
10
12
  # Just start the domain.
11
13
  class StartDomain
14
+
12
15
  def initialize(app, _env)
13
16
  @logger = Log4r::Logger.new('vagrant_libvirt::action::start_domain')
14
17
  @app = app
@@ -425,24 +428,15 @@ module VagrantPlugins
425
428
  end
426
429
 
427
430
  begin
428
- proposed = Nokogiri::XML(new_xml, &:noblanks)
429
-
430
- # This normalizes the attribute order to be consistent across both XML docs to eliminate differences
431
- # for subsequent comparison by diffy
432
- updated_xml_descr = REXML::Document.new(libvirt_domain.xml_desc(1))
433
- updated_xml = String.new
434
- updated_xml_descr.write(updated_xml)
435
-
436
- updated = Nokogiri::XML(updated_xml, &:noblanks)
431
+ # need to check whether the updated XML contains all the changes requested
432
+ proposed = VagrantPlugins::ProviderLibvirt::Util::Xml.new(new_xml)
433
+ applied = VagrantPlugins::ProviderLibvirt::Util::Xml.new(libvirt_domain.xml_desc(1))
437
434
 
438
- pretty_proposed = StringIO.new
439
- pretty_updated = StringIO.new
440
- proposed.write_xml_to(pretty_proposed, indent: 2)
441
- updated.write_xml_to(pretty_updated, indent: 2)
435
+ if proposed != applied
436
+ require 'diffy'
442
437
 
443
- diff = Diffy::Diff.new(pretty_proposed.string, pretty_updated.string, :context => 3).to_s(:text)
438
+ diff = Diffy::Diff.new(proposed, applied, :context => 3).to_s(:text)
444
439
 
445
- unless diff.empty?
446
440
  error_msg = "Libvirt failed to fully update the domain with the specified XML. Result differs from requested:\n" +
447
441
  "--- requested\n+++ result\n#{diff}\n" +
448
442
  "Typically this means there is a bug in the XML being sent, please log an issue"
@@ -0,0 +1,47 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'xmlsimple'
4
+
5
+ module VagrantPlugins
6
+ module ProviderLibvirt
7
+ module Util
8
+ class Xml
9
+ attr_reader :xml
10
+
11
+ def initialize(xmlstr)
12
+ @xml = compact_content(XmlSimple.xml_in(xmlstr, {'NormaliseSpace' => 2}))
13
+ end
14
+
15
+ def to_str
16
+ XmlSimple.xml_out(@xml)
17
+ end
18
+
19
+ def ==(other)
20
+ @xml == other.xml
21
+ end
22
+
23
+ private
24
+
25
+ # content elements that are empty are preserved by xml-simple and will result
26
+ # in the structures being considered different even if functionality the same
27
+ # strip any empty ones to avoid.
28
+ def compact_content(node)
29
+ if node.is_a?(Array)
30
+ node.map! do |element|
31
+ compact_content(element)
32
+ end
33
+ elsif node.is_a?(Hash)
34
+ if node['content'] and node['content'].empty?
35
+ node.delete('content')
36
+ end
37
+ node.each do |k, v|
38
+ node[k] = compact_content(v)
39
+ end
40
+ else
41
+ return node
42
+ end
43
+ end
44
+ end
45
+ end
46
+ end
47
+ end
@@ -1 +1 @@
1
- 0.10.3
1
+ 0.10.6
@@ -0,0 +1,37 @@
1
+ <domain xmlns:qemu='http://libvirt.org/schemas/domain/qemu/1.0' type=''>
2
+ <name/>
3
+ <title/>
4
+ <description/>
5
+ <uuid/>
6
+ <memory/>
7
+ <vcpu>1</vcpu>
8
+ <cpu check="none" mode="host-model">
9
+
10
+
11
+ </cpu>
12
+ <os>
13
+ <type>hvm</type>
14
+ <kernel/>
15
+ <initrd/>
16
+ <cmdline/>
17
+ </os>
18
+ <features>
19
+ <acpi/>
20
+ <apic/>
21
+ <pae/>
22
+ </features>
23
+ <clock offset='utc'/>
24
+ <devices>
25
+ <serial type='pty'>
26
+ <target port='0'/>
27
+ </serial>
28
+ <console type='pty'>
29
+ <target port='0'/>
30
+ </console>
31
+ <input bus='ps2' type='mouse'/>
32
+ <graphics autoport='yes' keymap='en-us' listen='127.0.0.1' port='-1' type='vnc'/>
33
+ <video>
34
+ <model heads='1' type='cirrus' vram='16384'/>
35
+ </video>
36
+ </devices>
37
+ </domain>
@@ -50,6 +50,54 @@ describe VagrantPlugins::ProviderLibvirt::Action::StartDomain do
50
50
  expect(subject.call(env)).to be_nil
51
51
  end
52
52
 
53
+ context 'when xml is formatted differently' do
54
+ let(:test_file) { 'default_with_different_formatting.xml' }
55
+ let(:updated_domain_xml) {
56
+ new_xml = domain_xml.dup
57
+ new_xml.gsub!(/<cpu .*<\/cpu>/m, '<cpu check="none" mode="host-passthrough"/>')
58
+ new_xml
59
+ }
60
+ let(:vagrantfile_providerconfig) do
61
+ <<-EOF
62
+ libvirt.cpu_mode = "host-passthrough"
63
+ EOF
64
+ end
65
+
66
+ it 'should correctly detect the domain was updated' do
67
+ expect(ui).to_not receive(:error)
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 not applied' do
78
+ let(:test_file) { 'default_with_different_formatting.xml' }
79
+ let(:updated_domain_xml) {
80
+ new_xml = domain_xml.dup
81
+ new_xml.gsub!(/<cpu .*<\/cpu>/m, '<cpu mode="host-passthrough"/>')
82
+ new_xml
83
+ }
84
+ let(:vagrantfile_providerconfig) do
85
+ <<-EOF
86
+ libvirt.cpu_mode = "host-passthrough"
87
+ EOF
88
+ end
89
+
90
+ it 'should error and revert the update' do
91
+ expect(ui).to receive(:error)
92
+ expect(connection).to receive(:define_domain).and_return(libvirt_domain)
93
+ expect(connection).to receive(:define_domain).with(domain_xml) # undo
94
+ expect(libvirt_domain).to receive(:xml_desc).and_return(domain_xml, updated_domain_xml)
95
+ expect(domain).to_not receive(:start)
96
+
97
+ expect { subject.call(env) }.to raise_error(VagrantPlugins::ProviderLibvirt::Errors::FogError)
98
+ end
99
+ end
100
+
53
101
  context 'when any setting changed' do
54
102
  let(:vagrantfile_providerconfig) do
55
103
  <<-EOF
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.10.3
4
+ version: 0.10.6
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: 2022-08-26 00:00:00.000000000 Z
14
+ date: 2022-08-30 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: fog-libvirt
@@ -55,6 +55,20 @@ dependencies:
55
55
  - - ">="
56
56
  - !ruby/object:Gem::Version
57
57
  version: '0'
58
+ - !ruby/object:Gem::Dependency
59
+ name: xml-simple
60
+ requirement: !ruby/object:Gem::Requirement
61
+ requirements:
62
+ - - ">="
63
+ - !ruby/object:Gem::Version
64
+ version: '0'
65
+ type: :runtime
66
+ prerelease: false
67
+ version_requirements: !ruby/object:Gem::Requirement
68
+ requirements:
69
+ - - ">="
70
+ - !ruby/object:Gem::Version
71
+ version: '0'
58
72
  - !ruby/object:Gem::Dependency
59
73
  name: diffy
60
74
  requirement: !ruby/object:Gem::Requirement
@@ -222,6 +236,7 @@ files:
222
236
  - lib/vagrant-libvirt/util/timer.rb
223
237
  - lib/vagrant-libvirt/util/ui.rb
224
238
  - lib/vagrant-libvirt/util/unindent.rb
239
+ - lib/vagrant-libvirt/util/xml.rb
225
240
  - lib/vagrant-libvirt/version
226
241
  - lib/vagrant-libvirt/version.rb
227
242
  - locales/en.yml
@@ -290,6 +305,7 @@ files:
290
305
  - spec/unit/action/start_domain_spec/default.xml
291
306
  - spec/unit/action/start_domain_spec/default_added_tpm_path.xml
292
307
  - spec/unit/action/start_domain_spec/default_added_tpm_version.xml
308
+ - spec/unit/action/start_domain_spec/default_with_different_formatting.xml
293
309
  - spec/unit/action/start_domain_spec/existing.xml
294
310
  - spec/unit/action/start_domain_spec/existing_added_nvram.xml
295
311
  - spec/unit/action/start_domain_spec/nvram_domain.xml
@@ -319,7 +335,7 @@ licenses:
319
335
  - MIT
320
336
  metadata:
321
337
  source_code_uri: https://github.com/vagrant-libvirt/vagrant-libvirt
322
- post_install_message:
338
+ post_install_message:
323
339
  rdoc_options: []
324
340
  require_paths:
325
341
  - lib
@@ -334,97 +350,98 @@ required_rubygems_version: !ruby/object:Gem::Requirement
334
350
  - !ruby/object:Gem::Version
335
351
  version: '0'
336
352
  requirements: []
337
- rubygems_version: 3.0.9
338
- signing_key:
353
+ rubygems_version: 3.2.3
354
+ signing_key:
339
355
  specification_version: 4
340
356
  summary: libvirt provider for Vagrant.
341
357
  test_files:
358
+ - spec/acceptance/additional_storage_spec.rb
342
359
  - spec/acceptance/package_domain_spec.rb
343
360
  - spec/acceptance/provider_settings_spec.rb
344
- - spec/acceptance/two_disks_spec.rb
345
- - spec/acceptance/additional_storage_spec.rb
361
+ - spec/acceptance/simple_vm_provision_via_shell_spec.rb
362
+ - spec/acceptance/snapshots_spec.rb
346
363
  - spec/acceptance/support-skeletons/package_complex/Vagrantfile.testbox
347
364
  - spec/acceptance/support-skeletons/package_complex/scripts/sysprep.sh
348
365
  - spec/acceptance/support-skeletons/package_simple/Vagrantfile.testbox
349
- - spec/acceptance/simple_vm_provision_via_shell_spec.rb
350
- - spec/acceptance/snapshots_spec.rb
366
+ - spec/acceptance/two_disks_spec.rb
351
367
  - spec/acceptance/use_qemu_agent_for_connectivity_spec.rb
352
- - spec/support/matchers/have_file_content.rb
353
- - spec/support/binding_proc.rb
354
- - spec/support/acceptance/context.rb
368
+ - spec/spec_helper.rb
355
369
  - spec/support/acceptance/configuration.rb
370
+ - spec/support/acceptance/context.rb
356
371
  - spec/support/acceptance/isolated_environment.rb
372
+ - spec/support/binding_proc.rb
357
373
  - spec/support/environment_helper.rb
358
- - spec/support/libvirt_context.rb
359
- - spec/support/temporary_dir.rb
360
374
  - spec/support/libvirt_acceptance_context.rb
375
+ - spec/support/libvirt_context.rb
376
+ - spec/support/matchers/have_file_content.rb
361
377
  - spec/support/sharedcontext.rb
362
- - spec/unit/config_spec.rb
363
- - spec/unit/action_spec.rb
364
- - spec/unit/cap/synced_folder_9p_spec.rb
365
- - spec/unit/cap/synced_folder_virtiofs_spec.rb
366
- - spec/unit/plugin_spec.rb
367
- - spec/unit/driver_spec.rb
368
- - spec/unit/templates/domain_custom_cpu_model.xml
369
- - spec/unit/templates/domain_all_settings.xml
370
- - spec/unit/templates/domain_spec.rb
371
- - spec/unit/templates/domain_defaults.xml
372
- - spec/unit/templates/domain_scsi_multiple_controllers_storage.xml
373
- - spec/unit/templates/domain_cpu_mode_passthrough.xml
374
- - spec/unit/templates/domain_scsi_bus_storage.xml
375
- - spec/unit/templates/domain_scsi_device_storage.xml
376
- - spec/unit/templates/tpm/version_1.2.xml
377
- - spec/unit/templates/tpm/version_2.0.xml
378
- - spec/unit/util/byte_number_spec.rb
379
- - spec/unit/util/resolvers_spec.rb
380
- - spec/unit/action/package_domain_spec.rb
381
- - spec/unit/action/create_domain_volume_spec/three_disks_in_storage_disk_1.xml
382
- - spec/unit/action/create_domain_volume_spec/one_disk_in_storage.xml
383
- - spec/unit/action/create_domain_volume_spec/three_disks_in_storage_disk_2.xml
384
- - spec/unit/action/create_domain_volume_spec/three_disks_in_storage_disk_0.xml
385
- - spec/unit/action/destroy_domain_spec.rb
386
- - spec/unit/action/set_name_of_domain_spec.rb
387
- - spec/unit/action/remove_libvirt_image_spec.rb
388
- - spec/unit/action/halt_domain_spec.rb
378
+ - spec/support/temporary_dir.rb
379
+ - spec/unit/action/clean_machine_folder_spec.rb
380
+ - spec/unit/action/cleanup_on_failure_spec.rb
389
381
  - spec/unit/action/create_domain_spec/additional_disks_domain.xml
382
+ - spec/unit/action/create_domain_spec/custom_disk_settings.xml
390
383
  - spec/unit/action/create_domain_spec/default_domain.xml
391
- - spec/unit/action/create_domain_spec/sysinfo.xml
392
384
  - spec/unit/action/create_domain_spec/default_user_storage_pool.xml
393
- - spec/unit/action/create_domain_spec/custom_disk_settings.xml
385
+ - spec/unit/action/create_domain_spec/sysinfo.xml
394
386
  - spec/unit/action/create_domain_spec/sysinfo_only_required.xml
395
387
  - spec/unit/action/create_domain_spec/two_disk_settings.xml
388
+ - spec/unit/action/create_domain_spec.rb
389
+ - spec/unit/action/create_domain_volume_spec/one_disk_in_storage.xml
390
+ - spec/unit/action/create_domain_volume_spec/three_disks_in_storage_disk_0.xml
391
+ - spec/unit/action/create_domain_volume_spec/three_disks_in_storage_disk_1.xml
392
+ - spec/unit/action/create_domain_volume_spec/three_disks_in_storage_disk_2.xml
396
393
  - spec/unit/action/create_domain_volume_spec.rb
397
- - spec/unit/action/resolve_disk_settings_spec/default_domain.xml
398
- - spec/unit/action/resolve_disk_settings_spec/multi_volume_box.xml
399
- - spec/unit/action/resolve_disk_settings_spec/default_no_aliases.xml
400
- - spec/unit/action/resolve_disk_settings_spec/multi_volume_box_additional_storage.xml
401
- - spec/unit/action/resolve_disk_settings_spec/multi_volume_box_additional_and_custom_no_aliases.xml
402
- - spec/unit/action/resolve_disk_settings_spec/default_system_storage_pool.xml
403
- - spec/unit/action/handle_box_image_spec.rb
404
- - spec/unit/action/wait_till_up_spec.rb
405
- - spec/unit/action/cleanup_on_failure_spec.rb
406
- - spec/unit/action/clean_machine_folder_spec.rb
407
- - spec/unit/action/resolve_disk_settings_spec.rb
408
- - spec/unit/action/start_domain_spec.rb
409
- - spec/unit/action/start_domain_spec/default_added_tpm_path.xml
410
- - spec/unit/action/start_domain_spec/nvram_domain.xml
411
- - spec/unit/action/start_domain_spec/default_added_tpm_version.xml
412
- - spec/unit/action/start_domain_spec/default.xml
413
- - spec/unit/action/start_domain_spec/clock_timer_rtc_tsc.xml
414
- - spec/unit/action/start_domain_spec/nvram_domain_removed.xml
415
- - spec/unit/action/start_domain_spec/nvram_domain_other_setting.xml
416
- - spec/unit/action/start_domain_spec/clock_timer_removed.xml
417
- - spec/unit/action/start_domain_spec/existing_added_nvram.xml
418
- - spec/unit/action/start_domain_spec/clock_timer_rtc.xml
419
- - spec/unit/action/start_domain_spec/existing.xml
420
394
  - spec/unit/action/destroy_domain_spec/additional_disks_domain.xml
421
395
  - spec/unit/action/destroy_domain_spec/box_multiple_disks.xml
396
+ - spec/unit/action/destroy_domain_spec/box_multiple_disks_and_additional_and_custom_disks.xml
422
397
  - spec/unit/action/destroy_domain_spec/box_multiple_disks_and_additional_and_custom_disks_no_aliases.xml
423
398
  - spec/unit/action/destroy_domain_spec/box_multiple_disks_and_additional_disks.xml
424
- - spec/unit/action/destroy_domain_spec/box_multiple_disks_and_additional_and_custom_disks.xml
425
399
  - spec/unit/action/destroy_domain_spec/cdrom_domain.xml
426
- - spec/unit/action/create_domain_spec.rb
400
+ - spec/unit/action/destroy_domain_spec.rb
401
+ - spec/unit/action/forward_ports_spec.rb
402
+ - spec/unit/action/halt_domain_spec.rb
403
+ - spec/unit/action/handle_box_image_spec.rb
404
+ - spec/unit/action/package_domain_spec.rb
427
405
  - spec/unit/action/prepare_nfs_settings_spec.rb
406
+ - spec/unit/action/remove_libvirt_image_spec.rb
407
+ - spec/unit/action/resolve_disk_settings_spec/default_domain.xml
408
+ - spec/unit/action/resolve_disk_settings_spec/default_no_aliases.xml
409
+ - spec/unit/action/resolve_disk_settings_spec/default_system_storage_pool.xml
410
+ - spec/unit/action/resolve_disk_settings_spec/multi_volume_box.xml
411
+ - spec/unit/action/resolve_disk_settings_spec/multi_volume_box_additional_and_custom_no_aliases.xml
412
+ - spec/unit/action/resolve_disk_settings_spec/multi_volume_box_additional_storage.xml
413
+ - spec/unit/action/resolve_disk_settings_spec.rb
414
+ - spec/unit/action/set_name_of_domain_spec.rb
428
415
  - spec/unit/action/shutdown_domain_spec.rb
429
- - spec/unit/action/forward_ports_spec.rb
430
- - spec/spec_helper.rb
416
+ - spec/unit/action/start_domain_spec/clock_timer_removed.xml
417
+ - spec/unit/action/start_domain_spec/clock_timer_rtc.xml
418
+ - spec/unit/action/start_domain_spec/clock_timer_rtc_tsc.xml
419
+ - spec/unit/action/start_domain_spec/default.xml
420
+ - spec/unit/action/start_domain_spec/default_added_tpm_path.xml
421
+ - spec/unit/action/start_domain_spec/default_added_tpm_version.xml
422
+ - spec/unit/action/start_domain_spec/default_with_different_formatting.xml
423
+ - spec/unit/action/start_domain_spec/existing.xml
424
+ - spec/unit/action/start_domain_spec/existing_added_nvram.xml
425
+ - spec/unit/action/start_domain_spec/nvram_domain.xml
426
+ - spec/unit/action/start_domain_spec/nvram_domain_other_setting.xml
427
+ - spec/unit/action/start_domain_spec/nvram_domain_removed.xml
428
+ - spec/unit/action/start_domain_spec.rb
429
+ - spec/unit/action/wait_till_up_spec.rb
430
+ - spec/unit/action_spec.rb
431
+ - spec/unit/cap/synced_folder_9p_spec.rb
432
+ - spec/unit/cap/synced_folder_virtiofs_spec.rb
433
+ - spec/unit/config_spec.rb
434
+ - spec/unit/driver_spec.rb
435
+ - spec/unit/plugin_spec.rb
436
+ - spec/unit/templates/domain_all_settings.xml
437
+ - spec/unit/templates/domain_cpu_mode_passthrough.xml
438
+ - spec/unit/templates/domain_custom_cpu_model.xml
439
+ - spec/unit/templates/domain_defaults.xml
440
+ - spec/unit/templates/domain_scsi_bus_storage.xml
441
+ - spec/unit/templates/domain_scsi_device_storage.xml
442
+ - spec/unit/templates/domain_scsi_multiple_controllers_storage.xml
443
+ - spec/unit/templates/domain_spec.rb
444
+ - spec/unit/templates/tpm/version_1.2.xml
445
+ - spec/unit/templates/tpm/version_2.0.xml
446
+ - spec/unit/util/byte_number_spec.rb
447
+ - spec/unit/util/resolvers_spec.rb