vagrant-libvirt 0.10.5 → 0.10.6

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 85294c7015420a6e696381e22f64562b72d18ad88e131b80ee4b4496afca3ca0
4
- data.tar.gz: ddaf423ba6a7e76c723048fcedd463f921b0cd613a8ac0982bd7496494cc9f2a
3
+ metadata.gz: 67234309e889d2254d68de7a257d1bf051bb507afcfc0ff03c28906dcceae43d
4
+ data.tar.gz: 1b0f05ff1fd494b46b99715ba500a20237e2262e2de0066ddfb07c46fac5d192
5
5
  SHA512:
6
- metadata.gz: 446f775fe8ff2c61f06980692e6f311d9f79a78e0a077c6237c854173e4e33aae622cf3f8a0a1240cfd059ea806106eb1d3f846fde332aed6fbd773155813b1c
7
- data.tar.gz: f6e0f39e8c1e1b13ce852cdc00a91cbb3eefd1fe22907b97bce58f11c427658762af8e65440e501b0611d560d4167a531ae26c5d5757c56d70e9b0fee926789a
6
+ metadata.gz: eb86380ba32e7c6d93856e3d6f168a3ea93d7bb4c532063764239f2875ea9371ca6c113f3a54671c90ba51a8b38166c271794932c1ce104981f40ab45be93de2
7
+ data.tar.gz: 035da37488d87c895b8f92b3bd0f616db26447edcbc7ee88fd7d4aa8b33c9f077893aef63ce6fd01e5f961349d938218aa749f0717be69becc4a2363656ac3ef
@@ -2,14 +2,16 @@
2
2
 
3
3
  require 'log4r'
4
4
 
5
- require 'compare-xml'
6
5
  require 'rexml/document'
7
6
 
7
+ require 'vagrant-libvirt/util/xml'
8
+
8
9
  module VagrantPlugins
9
10
  module ProviderLibvirt
10
11
  module Action
11
12
  # Just start the domain.
12
13
  class StartDomain
14
+
13
15
  def initialize(app, _env)
14
16
  @logger = Log4r::Logger.new('vagrant_libvirt::action::start_domain')
15
17
  @app = app
@@ -427,27 +429,13 @@ module VagrantPlugins
427
429
 
428
430
  begin
429
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))
430
434
 
431
- # This normalizes the attribute order to be consistent across both XML docs to
432
- # eliminate differences for subsequent comparison by diffy
433
- applied_xml_descr = REXML::Document.new(libvirt_domain.xml_desc(1))
434
- applied_xml = String.new
435
- applied_xml_descr.write(applied_xml)
436
-
437
- proposed = Nokogiri::XML(new_xml, &:noblanks)
438
- applied = Nokogiri::XML(applied_xml, &:noblanks)
439
-
440
- if CompareXML.equivalent?(proposed, applied, { force_children: true })
435
+ if proposed != applied
441
436
  require 'diffy'
442
437
 
443
- # pretty print the XML as even though there can be additional changes,
444
- # the output with diffy appears to be clearer
445
- pretty_proposed = StringIO.new
446
- pretty_applied = StringIO.new
447
- proposed.write_xml_to(pretty_proposed, indent: 2)
448
- applied.write_xml_to(pretty_applied, indent: 2)
449
-
450
- diff = Diffy::Diff.new(pretty_proposed.string, pretty_applied.string, :context => 3).to_s(:text)
438
+ diff = Diffy::Diff.new(proposed, applied, :context => 3).to_s(:text)
451
439
 
452
440
  error_msg = "Libvirt failed to fully update the domain with the specified XML. Result differs from requested:\n" +
453
441
  "--- requested\n+++ result\n#{diff}\n" +
@@ -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.5
1
+ 0.10.6
@@ -72,7 +72,30 @@ describe VagrantPlugins::ProviderLibvirt::Action::StartDomain do
72
72
 
73
73
  expect(subject.call(env)).to be_nil
74
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
75
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
76
99
  end
77
100
 
78
101
  context 'when any setting changed' do
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: vagrant-libvirt
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.10.5
4
+ version: 0.10.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Lukas Stanek
@@ -11,7 +11,7 @@ authors:
11
11
  autorequire:
12
12
  bindir: bin
13
13
  cert_chain: []
14
- date: 2022-08-29 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
@@ -56,7 +56,7 @@ dependencies:
56
56
  - !ruby/object:Gem::Version
57
57
  version: '0'
58
58
  - !ruby/object:Gem::Dependency
59
- name: compare-xml
59
+ name: xml-simple
60
60
  requirement: !ruby/object:Gem::Requirement
61
61
  requirements:
62
62
  - - ">="
@@ -236,6 +236,7 @@ files:
236
236
  - lib/vagrant-libvirt/util/timer.rb
237
237
  - lib/vagrant-libvirt/util/ui.rb
238
238
  - lib/vagrant-libvirt/util/unindent.rb
239
+ - lib/vagrant-libvirt/util/xml.rb
239
240
  - lib/vagrant-libvirt/version
240
241
  - lib/vagrant-libvirt/version.rb
241
242
  - locales/en.yml
@@ -349,98 +350,98 @@ required_rubygems_version: !ruby/object:Gem::Requirement
349
350
  - !ruby/object:Gem::Version
350
351
  version: '0'
351
352
  requirements: []
352
- rubygems_version: 3.0.9
353
+ rubygems_version: 3.2.3
353
354
  signing_key:
354
355
  specification_version: 4
355
356
  summary: libvirt provider for Vagrant.
356
357
  test_files:
357
- - spec/unit/config_spec.rb
358
- - spec/unit/action_spec.rb
359
- - spec/unit/action/forward_ports_spec.rb
360
- - spec/unit/action/destroy_domain_spec/box_multiple_disks_and_additional_and_custom_disks.xml
358
+ - spec/acceptance/additional_storage_spec.rb
359
+ - spec/acceptance/package_domain_spec.rb
360
+ - spec/acceptance/provider_settings_spec.rb
361
+ - spec/acceptance/simple_vm_provision_via_shell_spec.rb
362
+ - spec/acceptance/snapshots_spec.rb
363
+ - spec/acceptance/support-skeletons/package_complex/Vagrantfile.testbox
364
+ - spec/acceptance/support-skeletons/package_complex/scripts/sysprep.sh
365
+ - spec/acceptance/support-skeletons/package_simple/Vagrantfile.testbox
366
+ - spec/acceptance/two_disks_spec.rb
367
+ - spec/acceptance/use_qemu_agent_for_connectivity_spec.rb
368
+ - spec/spec_helper.rb
369
+ - spec/support/acceptance/configuration.rb
370
+ - spec/support/acceptance/context.rb
371
+ - spec/support/acceptance/isolated_environment.rb
372
+ - spec/support/binding_proc.rb
373
+ - spec/support/environment_helper.rb
374
+ - spec/support/libvirt_acceptance_context.rb
375
+ - spec/support/libvirt_context.rb
376
+ - spec/support/matchers/have_file_content.rb
377
+ - spec/support/sharedcontext.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
381
+ - spec/unit/action/create_domain_spec/additional_disks_domain.xml
382
+ - spec/unit/action/create_domain_spec/custom_disk_settings.xml
383
+ - spec/unit/action/create_domain_spec/default_domain.xml
384
+ - spec/unit/action/create_domain_spec/default_user_storage_pool.xml
385
+ - spec/unit/action/create_domain_spec/sysinfo.xml
386
+ - spec/unit/action/create_domain_spec/sysinfo_only_required.xml
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
393
+ - spec/unit/action/create_domain_volume_spec.rb
394
+ - spec/unit/action/destroy_domain_spec/additional_disks_domain.xml
361
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
362
397
  - spec/unit/action/destroy_domain_spec/box_multiple_disks_and_additional_and_custom_disks_no_aliases.xml
363
398
  - spec/unit/action/destroy_domain_spec/box_multiple_disks_and_additional_disks.xml
364
399
  - spec/unit/action/destroy_domain_spec/cdrom_domain.xml
365
- - spec/unit/action/destroy_domain_spec/additional_disks_domain.xml
366
- - spec/unit/action/cleanup_on_failure_spec.rb
367
- - spec/unit/action/create_domain_spec.rb
368
- - spec/unit/action/resolve_disk_settings_spec/default_system_storage_pool.xml
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
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
369
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
370
411
  - spec/unit/action/resolve_disk_settings_spec/multi_volume_box_additional_and_custom_no_aliases.xml
371
412
  - spec/unit/action/resolve_disk_settings_spec/multi_volume_box_additional_storage.xml
372
- - spec/unit/action/resolve_disk_settings_spec/multi_volume_box.xml
373
- - spec/unit/action/resolve_disk_settings_spec/default_domain.xml
374
- - spec/unit/action/start_domain_spec/existing.xml
375
- - spec/unit/action/start_domain_spec/nvram_domain_removed.xml
376
- - spec/unit/action/start_domain_spec/default.xml
377
- - spec/unit/action/start_domain_spec/default_added_tpm_version.xml
378
- - spec/unit/action/start_domain_spec/default_with_different_formatting.xml
379
- - spec/unit/action/start_domain_spec/nvram_domain_other_setting.xml
380
- - spec/unit/action/start_domain_spec/clock_timer_rtc.xml
413
+ - spec/unit/action/resolve_disk_settings_spec.rb
414
+ - spec/unit/action/set_name_of_domain_spec.rb
415
+ - spec/unit/action/shutdown_domain_spec.rb
381
416
  - spec/unit/action/start_domain_spec/clock_timer_removed.xml
417
+ - spec/unit/action/start_domain_spec/clock_timer_rtc.xml
382
418
  - spec/unit/action/start_domain_spec/clock_timer_rtc_tsc.xml
383
- - spec/unit/action/start_domain_spec/nvram_domain.xml
419
+ - spec/unit/action/start_domain_spec/default.xml
384
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
385
424
  - spec/unit/action/start_domain_spec/existing_added_nvram.xml
386
- - spec/unit/action/prepare_nfs_settings_spec.rb
387
- - spec/unit/action/package_domain_spec.rb
388
- - spec/unit/action/handle_box_image_spec.rb
389
- - spec/unit/action/create_domain_volume_spec/three_disks_in_storage_disk_0.xml
390
- - spec/unit/action/create_domain_volume_spec/three_disks_in_storage_disk_1.xml
391
- - spec/unit/action/create_domain_volume_spec/three_disks_in_storage_disk_2.xml
392
- - spec/unit/action/create_domain_volume_spec/one_disk_in_storage.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
393
428
  - spec/unit/action/start_domain_spec.rb
394
- - spec/unit/action/clean_machine_folder_spec.rb
395
- - spec/unit/action/destroy_domain_spec.rb
396
429
  - spec/unit/action/wait_till_up_spec.rb
397
- - spec/unit/action/create_domain_volume_spec.rb
398
- - spec/unit/action/halt_domain_spec.rb
399
- - spec/unit/action/set_name_of_domain_spec.rb
400
- - spec/unit/action/resolve_disk_settings_spec.rb
401
- - spec/unit/action/remove_libvirt_image_spec.rb
402
- - spec/unit/action/shutdown_domain_spec.rb
403
- - spec/unit/action/create_domain_spec/custom_disk_settings.xml
404
- - spec/unit/action/create_domain_spec/two_disk_settings.xml
405
- - spec/unit/action/create_domain_spec/default_user_storage_pool.xml
406
- - spec/unit/action/create_domain_spec/sysinfo_only_required.xml
407
- - spec/unit/action/create_domain_spec/default_domain.xml
408
- - spec/unit/action/create_domain_spec/sysinfo.xml
409
- - spec/unit/action/create_domain_spec/additional_disks_domain.xml
410
- - spec/unit/templates/domain_scsi_multiple_controllers_storage.xml
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
411
440
  - spec/unit/templates/domain_scsi_bus_storage.xml
412
441
  - spec/unit/templates/domain_scsi_device_storage.xml
413
- - spec/unit/templates/domain_all_settings.xml
442
+ - spec/unit/templates/domain_scsi_multiple_controllers_storage.xml
414
443
  - spec/unit/templates/domain_spec.rb
415
- - spec/unit/templates/tpm/version_2.0.xml
416
444
  - spec/unit/templates/tpm/version_1.2.xml
417
- - spec/unit/templates/domain_cpu_mode_passthrough.xml
418
- - spec/unit/templates/domain_defaults.xml
419
- - spec/unit/templates/domain_custom_cpu_model.xml
420
- - spec/unit/cap/synced_folder_virtiofs_spec.rb
421
- - spec/unit/cap/synced_folder_9p_spec.rb
422
- - spec/unit/plugin_spec.rb
423
- - spec/unit/driver_spec.rb
445
+ - spec/unit/templates/tpm/version_2.0.xml
424
446
  - spec/unit/util/byte_number_spec.rb
425
447
  - spec/unit/util/resolvers_spec.rb
426
- - spec/support/temporary_dir.rb
427
- - spec/support/environment_helper.rb
428
- - spec/support/sharedcontext.rb
429
- - spec/support/matchers/have_file_content.rb
430
- - spec/support/libvirt_acceptance_context.rb
431
- - spec/support/acceptance/configuration.rb
432
- - spec/support/acceptance/isolated_environment.rb
433
- - spec/support/acceptance/context.rb
434
- - spec/support/libvirt_context.rb
435
- - spec/support/binding_proc.rb
436
- - spec/acceptance/provider_settings_spec.rb
437
- - spec/acceptance/two_disks_spec.rb
438
- - spec/acceptance/package_domain_spec.rb
439
- - spec/acceptance/snapshots_spec.rb
440
- - spec/acceptance/additional_storage_spec.rb
441
- - spec/acceptance/simple_vm_provision_via_shell_spec.rb
442
- - spec/acceptance/use_qemu_agent_for_connectivity_spec.rb
443
- - spec/acceptance/support-skeletons/package_simple/Vagrantfile.testbox
444
- - spec/acceptance/support-skeletons/package_complex/Vagrantfile.testbox
445
- - spec/acceptance/support-skeletons/package_complex/scripts/sysprep.sh
446
- - spec/spec_helper.rb