Compare commits

..

No commits in common. "rawhide" and "f39" have entirely different histories.

5 changed files with 4 additions and 324 deletions

View file

@ -1,116 +0,0 @@
From ec4daf33cf6135f9a29c48a61dd8a6e8b9bf0dc1 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?V=C3=ADt=20Ondruch?= <vondruch@redhat.com>
Date: Fri, 31 Oct 2025 17:35:48 +0100
Subject: [PATCH] Fix REXML 3.4.2+ compatibility
REXML 3.4.2+ deprecated accepting array as an element in `XPath.match`
[[1]]. This led to test errors such as:
~~~
3) VagrantPlugins::ProviderLibvirt::Action::ResolveDiskSettings#call when vm box is in use when box metadata is not available when multiple volumes in domain config should populate domain volumes with devices
Failure/Error:
expect(env[:domain_volumes]).to match(
[
hash_including(
device: 'vda',
absolute_path: '/var/lib/libvirt/images/vagrant-test_default.img'
),
hash_including(
device: 'vdb',
absolute_path: '/var/lib/libvirt/images/vagrant-test_default_1.img'
),
expected [{absolute_path: "/var/lib/libvirt/images/vagrant-test_default.img", bus: "virtio", cache: "default", device: "vda", name: "vagrant-test_default.img"}] to match [#<RSpec::Mocks::ArgumentMatchers::HashIncludingMatcher:0x00007fff921b3db8 @expected={device: "vda", absolute_path: "/var/lib/libvirt/images/vagrant-test_default.img"}>, #<RSpec::Mocks::ArgumentMatchers::HashIncludingMatcher:0x00007fff921b3d40 @expected={device: "vdb", absolute_path: "/var/lib/libvirt/images/vagrant-test_default_1.img"}>, #<RSpec::Mocks::ArgumentMatchers::HashIncludingMatcher:0x00007fff921b3cc8 @expected={device: "vdc", absolute_path: "/var/lib/libvirt/images/vagrant-test_default_2.img"}>]
Diff:
@@ -1,4 +1,6 @@
-[hash_including(device: "vda", absolute_path: "/var/lib/libvirt/images/vagrant-test_default.img"),
- hash_including(device: "vdb", absolute_path: "/var/lib/libvirt/images/vagrant-test_default_1.img"),
- hash_including(device: "vdc", absolute_path: "/var/lib/libvirt/images/vagrant-test_default_2.img")]
+[{absolute_path: "/var/lib/libvirt/images/vagrant-test_default.img",
+ bus: "virtio",
+ cache: "default",
+ device: "vda",
+ name: "vagrant-test_default.img"}]
# ./spec/unit/action/resolve_disk_settings_spec.rb:200:in 'block (6 levels) in <top (required)>'
# ./spec/support/unit_context.rb:51:in 'block (3 levels) in <top (required)>'
# ./spec/support/unit_context.rb:43:in 'block (2 levels) in <top (required)>'
# ./spec/support/unit_context.rb:51:in 'block (3 levels) in <top (required)>'
# ./spec/support/unit_context.rb:43:in 'block (2 levels) in <top (required)>'
~~~
This changes the logic in a way, that XPath is matching against whole
XML document, instead of array of XML elements.
[1]: https://github.com/ruby/rexml/pull/252
---
lib/vagrant-libvirt/action/destroy_domain.rb | 10 ++++++----
lib/vagrant-libvirt/action/resolve_disk_settings.rb | 9 +++++----
2 files changed, 11 insertions(+), 8 deletions(-)
diff --git a/lib/vagrant-libvirt/action/destroy_domain.rb b/lib/vagrant-libvirt/action/destroy_domain.rb
index 4d6cc6ee8..fba6aee6d 100644
--- a/lib/vagrant-libvirt/action/destroy_domain.rb
+++ b/lib/vagrant-libvirt/action/destroy_domain.rb
@@ -59,7 +59,7 @@ def call(env)
domain_xml = libvirt_domain.xml_desc(1)
xml_descr = REXML::Document.new(domain_xml)
disks_xml = REXML::XPath.match(xml_descr, '/domain/devices/disk[@device="disk"]')
- have_aliases = !(REXML::XPath.match(disks_xml, './alias[@name="ua-box-volume-0"]').first).nil?
+ have_aliases = !REXML::XPath.match(xml_descr, '/domain/devices/disk[@device="disk"]/alias[@name="ua-box-volume-0"]').first.nil?
if !have_aliases
env[:ui].warn(I18n.t('vagrant_libvirt.domain_xml.obsolete_method'))
end
@@ -73,7 +73,9 @@ def call(env)
# the additional storage devices are.
detected_box_volumes = 0
if have_aliases
- REXML::XPath.match(disks_xml, './alias[contains(@name, "ua-box-volume-")]').each do |box_disk|
+ REXML::XPath.match(xml_descr,
+ '/domain/devices/disk[@device="disk"]/alias[contains(@name, "ua-box-volume-")]'
+ ).each do |box_disk|
diskname = box_disk.parent.elements['source'].attributes['file'].rpartition('/').last
detected_box_volumes += 1
@@ -130,13 +132,13 @@ def call(env)
# look for exact match using aliases which will be used
# for subsequent domain creations
if have_aliases
- domain_disk = REXML::XPath.match(disks_xml, './alias[@name="ua-disk-volume-' + index.to_s + '"]').first
+ domain_disk = REXML::XPath.match(xml_descr, '/domain/devices/disk[@device="disk"]/alias[@name="ua-disk-volume-' + index.to_s + '"]').first
domain_disk = domain_disk.parent if !domain_disk.nil?
else
# otherwise fallback to find the disk by device if specified by user
# and finally index counting with offset and hope the match is correct
if !disk[:device].nil?
- domain_disk = REXML::XPath.match(disks_xml, './target[@dev="' + disk[:device] + '"]').first
+ domain_disk = REXML::XPath.match(xml_descr, '/domain/devices/disk[@device="disk"]/target[@dev="' + disk[:device] + '"]').first
domain_disk = domain_disk.parent if !domain_disk.nil?
else
domain_disk = disks_xml[offset + index]
diff --git a/lib/vagrant-libvirt/action/resolve_disk_settings.rb b/lib/vagrant-libvirt/action/resolve_disk_settings.rb
index f1a3f6755..add3e1021 100644
--- a/lib/vagrant-libvirt/action/resolve_disk_settings.rb
+++ b/lib/vagrant-libvirt/action/resolve_disk_settings.rb
@@ -50,18 +50,19 @@ def call(env)
domain_xml = libvirt_domain.xml_desc(1)
xml_descr = REXML::Document.new(domain_xml)
domain_name = xml_descr.elements['domain'].elements['name'].text
- disks_xml = REXML::XPath.match(xml_descr, '/domain/devices/disk[@device="disk"]')
- have_aliases = !REXML::XPath.match(disks_xml, './alias[@name="ua-box-volume-0"]').first.nil?
+ have_aliases = !REXML::XPath.match(xml_descr, '/domain/devices/disk[@device="disk"]/alias[@name="ua-box-volume-0"]').first.nil?
env[:ui].warn(I18n.t('vagrant_libvirt.domain_xml.obsolete_method')) unless have_aliases
if have_aliases
- REXML::XPath.match(disks_xml,
- './alias[contains(@name, "ua-box-volume-")]').each_with_index do |alias_xml, idx|
+ REXML::XPath.match(xml_descr,
+ '/domain/devices/disk[@device="disk"]/alias[contains(@name, "ua-box-volume-")]'
+ ).each_with_index do |alias_xml, idx|
domain_volumes.push(volume_from_xml(alias_xml.parent, domain_name, idx))
end
else
# fallback to try and infer which boxes are box images, as they are listed first
# as soon as there is no match, can exit
+ disks_xml = REXML::XPath.match(xml_descr, '/domain/devices/disk[@device="disk"]')
disks_xml.each_with_index do |box_disk_xml, idx|
diskname = box_disk_xml.elements['source'].attributes['file'].rpartition('/').last

View file

@ -1,31 +0,0 @@
From 5bb08ec8150ee3ceca74c772f4c72b49b61f988f Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Janek=20Ziele=C5=BAnicki?= <janek.zieleznicki@gmail.com>
Date: Mon, 18 Nov 2024 19:16:07 +0100
Subject: [PATCH 1/2] Remove config unsupported by fog-libvirt
fog-libvirt dropped support for libvirt < 1.2.8 in version v0.13.0
This config is no longer supported nor needed
---
lib/vagrant-libvirt/driver.rb | 5 -----
1 file changed, 5 deletions(-)
diff --git a/lib/vagrant-libvirt/driver.rb b/lib/vagrant-libvirt/driver.rb
index 73f0f7a45..90e0e6118 100644
--- a/lib/vagrant-libvirt/driver.rb
+++ b/lib/vagrant-libvirt/driver.rb
@@ -32,14 +32,9 @@ def connection
config = @machine.provider_config
uri = config.uri
- # Setup command for retrieving IP address for newly created machine
- # with some MAC address. Get it from dnsmasq leases table
- ip_command = %q( awk "/$mac/ {print \$1}" /proc/net/arp )
-
conn_attr = {
provider: 'libvirt',
libvirt_uri: uri,
- libvirt_ip_command: ip_command,
}
conn_attr[:libvirt_username] = config.username if config.username
conn_attr[:libvirt_password] = config.password if config.password

View file

@ -1,41 +0,0 @@
From dfb9fd59bd6eca13f4e22e5038247473f9cd108d Mon Sep 17 00:00:00 2001
From: Jarek Prokop <jprokop@redhat.com>
Date: Tue, 16 Dec 2025 12:18:01 +0100
Subject: [PATCH] Replace CGI.parse with URI equivalent.
For Ruby 4.0 compatibility, where CGI is no longer a part
of the upstream Ruby distribution.
Replace the CGI.parse with URI.decode_www_form and some filtering
on top so that the replacement keeps existing behavior.
---
lib/vagrant-libvirt/config.rb | 10 +++++++---
1 file changed, 7 insertions(+), 3 deletions(-)
diff --git a/lib/vagrant-libvirt/config.rb b/lib/vagrant-libvirt/config.rb
index cdee174..96261ca 100644
--- a/lib/vagrant-libvirt/config.rb
+++ b/lib/vagrant-libvirt/config.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-require 'cgi'
+require 'uri'
require 'vagrant'
require 'vagrant/action/builtin/mixin_synced_folders'
@@ -1335,8 +1335,12 @@ module VagrantPlugins
@username = nil if @username == UNSET_VALUE
@username = uri.user if uri.user
if uri.query
- params = CGI.parse(uri.query)
- @id_ssh_key_file = params['keyfile'].first if params.has_key?('keyfile')
+ params = URI
+ .decode_www_form(uri.query)
+ .select { |k, v| k == 'keyfile' }
+ .map { |_,v| v }
+ .first
+ @id_ssh_key_file = params if params
end
finalize_id_ssh_key_file

View file

@ -1,81 +0,0 @@
From fcafe97cee012e4c3ae1996bb78f8d88a1077dcb Mon Sep 17 00:00:00 2001
From: Mamoru TASAKA <mtasaka@fedoraproject.org>
Date: Sun, 29 Dec 2024 18:41:57 +0900
Subject: [PATCH] TEST: Support REXML 3.3.2 output change
With https://github.com/ruby/rexml/pull/167
REXML::Document.write may chomp output string compared to before.
This change affects VagrantPlugins::ProviderLibvirt::Action::StartDomain#call
internal behavior.
Modify rspec testsuite to support this REXML behavior change.
Closes #1836 .
---
spec/unit/action/start_domain_spec.rb | 18 ++++++++++++------
1 file changed, 12 insertions(+), 6 deletions(-)
diff --git a/spec/unit/action/start_domain_spec.rb b/spec/unit/action/start_domain_spec.rb
index 330612beb..af9999cf9 100644
--- a/spec/unit/action/start_domain_spec.rb
+++ b/spec/unit/action/start_domain_spec.rb
@@ -364,7 +364,8 @@
it 'should add the nvram element' do
expect(ui).to_not receive(:warn)
- expect(connection).to receive(:define_domain).with(updated_domain_xml).and_return(libvirt_domain)
+ arg_domain_xml = REXML::VERSION >= "3.3.2" ? updated_domain_xml.chomp : updated_domain_xml
+ expect(connection).to receive(:define_domain).with(arg_domain_xml).and_return(libvirt_domain)
expect(libvirt_domain).to receive(:xml_desc).and_return(domain_xml, updated_domain_xml)
expect(libvirt_domain).to receive(:autostart=)
expect(domain).to receive(:start)
@@ -385,7 +385,8 @@
it 'should keep the XML element' do
expect(ui).to_not receive(:warn)
- expect(connection).to receive(:define_domain).with(updated_domain_xml).and_return(libvirt_domain)
+ arg_domain_xml = REXML::VERSION >= "3.3.2" ? updated_domain_xml.chomp : updated_domain_xml
+ expect(connection).to receive(:define_domain).with(arg_domain_xml).and_return(libvirt_domain)
expect(libvirt_domain).to receive(:xml_desc).and_return(domain_xml, updated_domain_xml)
expect(libvirt_domain).to receive(:autostart=)
expect(domain).to receive(:start)
@@ -399,7 +399,8 @@
it 'should delete the XML element' do
expect(ui).to_not receive(:warn)
- expect(connection).to receive(:define_domain).with(updated_domain_xml).and_return(libvirt_domain)
+ arg_domain_xml = REXML::VERSION >= "3.3.2" ? updated_domain_xml.chomp : updated_domain_xml
+ expect(connection).to receive(:define_domain).with(arg_domain_xml).and_return(libvirt_domain)
expect(libvirt_domain).to receive(:xml_desc).and_return(domain_xml, updated_domain_xml)
expect(libvirt_domain).to receive(:autostart=)
expect(domain).to receive(:start)
@@ -424,7 +424,8 @@
it 'should modify the domain tpm_path' do
expect(ui).to_not receive(:warn)
expect(logger).to receive(:debug).with('tpm config changed')
- expect(connection).to receive(:define_domain).with(updated_domain_xml).and_return(libvirt_domain)
+ arg_domain_xml = REXML::VERSION >= "3.3.2" ? updated_domain_xml.chomp : updated_domain_xml
+ expect(connection).to receive(:define_domain).with(arg_domain_xml).and_return(libvirt_domain)
expect(libvirt_domain).to receive(:xml_desc).and_return(domain_xml, updated_domain_xml)
expect(libvirt_domain).to receive(:autostart=)
expect(domain).to receive(:start)
@@ -446,7 +446,8 @@
it 'should modify the domain tpm_path' do
expect(ui).to_not receive(:warn)
expect(logger).to receive(:debug).with('tpm config changed')
- expect(connection).to receive(:define_domain).with(updated_domain_xml).and_return(libvirt_domain)
+ arg_domain_xml = REXML::VERSION >= "3.3.2" ? updated_domain_xml.chomp : updated_domain_xml
+ expect(connection).to receive(:define_domain).with(arg_domain_xml).and_return(libvirt_domain)
expect(libvirt_domain).to receive(:xml_desc).and_return(domain_xml, updated_domain_xml)
expect(libvirt_domain).to receive(:autostart=)
expect(domain).to receive(:start)
@@ -509,7 +509,8 @@
it 'should modify the domain' do
expect(ui).to_not receive(:warn)
expect(logger).to receive(:debug).with('tpm config changed')
- expect(connection).to receive(:define_domain).with(updated_domain_xml).and_return(libvirt_domain)
+ arg_domain_xml = REXML::VERSION >= "3.3.2" ? updated_domain_xml.chomp : updated_domain_xml
+ expect(connection).to receive(:define_domain).with(arg_domain_xml).and_return(libvirt_domain)
expect(libvirt_domain).to receive(:xml_desc).and_return(domain_xml, updated_domain_xml)
expect(libvirt_domain).to receive(:autostart=)
expect(domain).to receive(:start)

View file

@ -4,7 +4,7 @@
Name: %{vagrant_plugin_name}
Version: 0.11.2
Release: 11%{?dist}
Release: 2%{?dist}
Summary: libvirt provider for Vagrant
License: MIT
URL: https://github.com/vagrant-libvirt/vagrant-libvirt
@ -23,19 +23,6 @@ Patch0: vagrant-libvirt-pr1709-ruby32-File_exists-URL-parse.patch
# We do not care about synced folder check when testing MAC configuration.
# https://github.com/vagrant-libvirt/vagrant-libvirt/pull/1721
Patch1: vagrant-libvirt-0.11.2-Allow-a-mock-object-to-receive-synced_folders.patch
# https://github.com/vagrant-libvirt/vagrant-libvirt/pull/1837
# related to https://github.com/ruby/rexml/pull/167
Patch2: vagrant-libvirt-pr1837-testsuite-support-rexml-332.patch
# Get rid of a warning generated due to usage of option
# no longer supported by fog-libvirt
# https://github.com/vagrant-libvirt/vagrant-libvirt/pull/1835
Patch3: vagrant-libvirt-0.12.2-Remove-config-unsupported-by-fog-libvirt.patch
# Fix compatibility with REXML 3.4.2+
# https://github.com/vagrant-libvirt/vagrant-libvirt/pull/1861
Patch4: vagrant-libvirt-0.12.2-Fix-REXML-3-4-2-compatibility.patch
# Replace CGI, removed from Ruby 4.0 bundled gems with URI.
# https://github.com/vagrant-libvirt/vagrant-libvirt/pull/1866
Patch5: vagrant-libvirt-0.12.2-Replace-CGI.parse-with-URI-equivalent.patch
# Enable QEMU Session by default
# https://github.com/vagrant-libvirt/vagrant-libvirt/pull/969
@ -82,13 +69,9 @@ Documentation for %{name}.
%prep
%setup -q -n %{vagrant_plugin_name}-%{version} -b 1
%patch 0 -p1
%patch 1 -p1
%patch 2 -p1
%patch 3 -p1
%patch 4 -p1
%patch 5 -p1
%patch 100 -p1
%patch0 -p1
%patch1 -p1
%patch100 -p1
%build
gem build ../%{vagrant_plugin_name}-%{version}.gemspec
@ -117,9 +100,6 @@ pushd .%{vagrant_plugin_instdir}
# Create dummy Gemfile and load dependencies via gemspec file
cat > Gemfile <<EOG
gem 'vagrant'
gem 'base64'
gem 'logger'
gem 'ostruct'
gem 'rdoc'
gem 'rexml'
gem 'vagrant-spec', :path => '%{_builddir}/vagrant-spec-%{vagrant_spec_commit}'
@ -157,37 +137,6 @@ popd
%{vagrant_plugin_instdir}/spec
%changelog
* Fri Jul 17 2026 Fedora Release Engineering <releng@fedoraproject.org> - 0.11.2-11
- Rebuilt for https://fedoraproject.org/wiki/Fedora_45_Mass_Rebuild
* Sat Jan 17 2026 Fedora Release Engineering <releng@fedoraproject.org> - 0.11.2-10
- Rebuilt for https://fedoraproject.org/wiki/Fedora_44_Mass_Rebuild
* Tue Dec 16 2025 Jarek Prokop <jprokop@redhat.com> - 0.11.2-9
- Fix Ruby 4.0 compatibility by replacing CGI with URI equivalent.
* Mon Nov 03 2025 Vít Ondruch <vondruch@redhat.com> - 0.11.2-8
- Fix compatibility with REXML 3.4.2+
* Fri Jul 25 2025 Fedora Release Engineering <releng@fedoraproject.org> - 0.11.2-7
- Rebuilt for https://fedoraproject.org/wiki/Fedora_43_Mass_Rebuild
* Sun Jan 19 2025 Fedora Release Engineering <releng@fedoraproject.org> - 0.11.2-6
- Rebuilt for https://fedoraproject.org/wiki/Fedora_42_Mass_Rebuild
* Tue Jan 07 2025 Jarek Prokop <jprokop@redhat.com> - 0.11.2-5
- Stop warning being emitted due to setting unsupported option in fog-libvirt.
* Sun Dec 29 2024 Mamoru TASAKA <mtasaka@fedoraproject.org> - 0.11.2-5
- Add some gem dependency on testsuite for ruby3.4
- Support REXML 3.3.2 output behavior change
* Sat Jul 20 2024 Fedora Release Engineering <releng@fedoraproject.org> - 0.11.2-4
- Rebuilt for https://fedoraproject.org/wiki/Fedora_41_Mass_Rebuild
* Sat Jan 27 2024 Fedora Release Engineering <releng@fedoraproject.org> - 0.11.2-3
- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild
* Sat Jul 22 2023 Fedora Release Engineering <releng@fedoraproject.org> - 0.11.2-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild