[Pkg-libvirt-maintainers] Bug#1076540: virt-install: --cloud-init option is ignored when used in conjunction with --location
Olivier Gayot
olivier.gayot at canonical.com
Thu Jul 18 09:17:40 BST 2024
Package: virt-manager
Version: 1:4.1.0-4
Severity: normal
Tags: patch
User: ubuntu-devel at lists.ubuntu.com
Usertags: origin-ubuntu oracular ubuntu-patch
Dear Maintainer,
When running virt-install with both --location and --cloud-init options,
the latter is silently ignored. Although the --cloud-init option is
properly honored when used with --cdrom instead of --location ; but
--cdrom is incompatible with --extra-args ; which is useful as well.
There is an upstream bug report [1] with an open PR [2]. I have added
the patch from the PR as a quilt patch (refreshed) in the attached
debdiff.
[1] https://github.com/virt-manager/virt-manager/issues/469
[2] https://github.com/virt-manager/virt-manager/pull/485
In Ubuntu, the attached patch was applied to achieve the following:
* d/p/virtinstall-Fix-location-and-cloud-init-conflict.patch: do not ignore
virt-install's --cloud-init option when used in conjunction with
--location. (LP: #2073461)
Thanks for considering the patch.
-- System Information:
Debian Release: trixie/sid
APT prefers noble-updates
APT policy: (500, 'noble-updates'), (500, 'noble-security'), (500, 'noble'), (100, 'noble-backports')
Architecture: amd64 (x86_64)
Foreign Architectures: i386
Kernel: Linux 6.8.0-38-generic (SMP w/8 CPU threads; PREEMPT)
Kernel taint flags: TAINT_PROPRIETARY_MODULE, TAINT_OOT_MODULE
Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8), LANGUAGE not set
Shell: /bin/sh linked to /usr/bin/dash
Init: systemd (via /run/systemd/system)
LSM: AppArmor: enabled
Versions of packages virt-manager is related to:
ii libvirt-clients 10.0.0-2ubuntu8.2
ii libvirt-daemon 10.0.0-2ubuntu8.2
ii libvirt0 10.0.0-2ubuntu8.2
ii osinfo-db 0.20240523-0ubuntu0.24.04.1
-------------- next part --------------
diff -Nru virt-manager-4.1.0/debian/patches/series virt-manager-4.1.0/debian/patches/series
--- virt-manager-4.1.0/debian/patches/series 2024-05-09 09:45:01.000000000 +0200
+++ virt-manager-4.1.0/debian/patches/series 2024-07-18 09:54:44.000000000 +0200
@@ -3,3 +3,4 @@
upstream_tests-Fix-host-copy-XML-with-libvirt-10.1.0.patch
upstream_build-use-super.patch
upstream_build-use-setuptools.command.build-when-available.patch
+virtinstall-Fix-location-and-cloud-init-conflict.patch
diff -Nru virt-manager-4.1.0/debian/patches/virtinstall-Fix-location-and-cloud-init-conflict.patch virt-manager-4.1.0/debian/patches/virtinstall-Fix-location-and-cloud-init-conflict.patch
--- virt-manager-4.1.0/debian/patches/virtinstall-Fix-location-and-cloud-init-conflict.patch 1970-01-01 01:00:00.000000000 +0100
+++ virt-manager-4.1.0/debian/patches/virtinstall-Fix-location-and-cloud-init-conflict.patch 2024-07-18 09:54:44.000000000 +0200
@@ -0,0 +1,208 @@
+Description: virtinstall: Fix --location and --cloud-init conflict
+ So far, --cloud-init is ignored when --location is specified.
+ .
+ Resolves: virt-manager#469
+Author: Patrice Lacouture <p.lacouture at see.fr>
+Origin: upstream, https://github.com/virt-manager/virt-manager/pull/485
+Bug: https://github.com/virt-manager/virt-manager/issues/469
+Bug-Ubuntu: https://launchpad.net/bugs/2073461
+Applied-Upstream: no
+Last-Update: 2024-07-18
+---
+This patch header follows DEP-3: http://dep.debian.net/deps/dep3/
+--- /dev/null
++++ b/tests/data/cli/compare/virt-install-location-iso-and-cloud-init.xml
+@@ -0,0 +1,172 @@
++<domain type="kvm">
++ <name>fedora17</name>
++ <uuid>00000000-1111-2222-3333-444444444444</uuid>
++ <metadata>
++ <libosinfo:libosinfo xmlns:libosinfo="http://libosinfo.org/xmlns/libvirt/domain/1.0">
++ <libosinfo:os id="http://fedoraproject.org/fedora/17"/>
++ </libosinfo:libosinfo>
++ </metadata>
++ <memory>65536</memory>
++ <currentMemory>65536</currentMemory>
++ <vcpu>2</vcpu>
++ <os>
++ <type arch="x86_64" machine="pc-i440fx-6.1">hvm</type>
++ <kernel>/VIRTINST-TESTSUITE/vmlinuz</kernel>
++ <initrd>/VIRTINST-TESTSUITE/initrd.img</initrd>
++ <smbios mode="sysinfo"/>
++ </os>
++ <features>
++ <acpi/>
++ <apic/>
++ <vmport state="off"/>
++ </features>
++ <cpu mode="host-passthrough"/>
++ <clock offset="utc">
++ <timer name="rtc" tickpolicy="catchup"/>
++ <timer name="pit" tickpolicy="delay"/>
++ <timer name="hpet" present="no"/>
++ </clock>
++ <pm>
++ <suspend-to-mem enabled="no"/>
++ <suspend-to-disk enabled="no"/>
++ </pm>
++ <devices>
++ <emulator>/usr/bin/qemu-system-x86_64</emulator>
++ <disk type="file" device="disk">
++ <driver name="qemu" type="qcow2"/>
++ <source file="/pool-dir/testvol1.img"/>
++ <target dev="vda" bus="virtio"/>
++ </disk>
++ <disk type="file" device="cdrom">
++ <driver name="qemu"/>
++ <source file="TESTSUITE_SCRUBBED/tests/data/fakemedia/fake-fedora17-tree.iso"/>
++ <target dev="hda" bus="ide"/>
++ <readonly/>
++ </disk>
++ <controller type="usb" model="ich9-ehci1"/>
++ <controller type="usb" model="ich9-uhci1">
++ <master startport="0"/>
++ </controller>
++ <controller type="usb" model="ich9-uhci2">
++ <master startport="2"/>
++ </controller>
++ <controller type="usb" model="ich9-uhci3">
++ <master startport="4"/>
++ </controller>
++ <console type="pty"/>
++ <channel type="unix">
++ <source mode="bind"/>
++ <target type="virtio" name="org.qemu.guest_agent.0"/>
++ </channel>
++ <channel type="spicevmc">
++ <target type="virtio" name="com.redhat.spice.0"/>
++ </channel>
++ <input type="tablet" bus="usb"/>
++ <graphics type="spice" port="-1" tlsPort="-1" autoport="yes">
++ <image compression="off"/>
++ </graphics>
++ <sound model="ich6"/>
++ <video>
++ <model type="qxl"/>
++ </video>
++ <redirdev bus="usb" type="spicevmc"/>
++ <redirdev bus="usb" type="spicevmc"/>
++ <memballoon model="virtio"/>
++ <rng model="virtio">
++ <backend model="random">/dev/urandom</backend>
++ </rng>
++ <disk type="file" device="cdrom">
++ <driver name="qemu" type="raw"/>
++ <source file="/VIRTINST-TESTSUITE/cloudinit.iso"/>
++ <target dev="hdb" bus="ide"/>
++ <readonly/>
++ </disk>
++ </devices>
++ <sysinfo type="smbios">
++ <system>
++ <entry name="serial">ds=nocloud</entry>
++ </system>
++ </sysinfo>
++ <on_reboot>destroy</on_reboot>
++</domain>
++<domain type="kvm">
++ <name>fedora17</name>
++ <uuid>00000000-1111-2222-3333-444444444444</uuid>
++ <metadata>
++ <libosinfo:libosinfo xmlns:libosinfo="http://libosinfo.org/xmlns/libvirt/domain/1.0">
++ <libosinfo:os id="http://fedoraproject.org/fedora/17"/>
++ </libosinfo:libosinfo>
++ </metadata>
++ <memory>65536</memory>
++ <currentMemory>65536</currentMemory>
++ <vcpu>2</vcpu>
++ <os>
++ <type arch="x86_64" machine="pc-i440fx-6.1">hvm</type>
++ <boot dev="hd"/>
++ </os>
++ <features>
++ <acpi/>
++ <apic/>
++ <vmport state="off"/>
++ </features>
++ <cpu mode="host-passthrough"/>
++ <clock offset="utc">
++ <timer name="rtc" tickpolicy="catchup"/>
++ <timer name="pit" tickpolicy="delay"/>
++ <timer name="hpet" present="no"/>
++ </clock>
++ <pm>
++ <suspend-to-mem enabled="no"/>
++ <suspend-to-disk enabled="no"/>
++ </pm>
++ <devices>
++ <emulator>/usr/bin/qemu-system-x86_64</emulator>
++ <disk type="file" device="disk">
++ <driver name="qemu" type="qcow2"/>
++ <source file="/pool-dir/testvol1.img"/>
++ <target dev="vda" bus="virtio"/>
++ </disk>
++ <disk type="file" device="cdrom">
++ <driver name="qemu"/>
++ <source file="TESTSUITE_SCRUBBED/tests/data/fakemedia/fake-fedora17-tree.iso"/>
++ <target dev="hda" bus="ide"/>
++ <readonly/>
++ </disk>
++ <controller type="usb" model="ich9-ehci1"/>
++ <controller type="usb" model="ich9-uhci1">
++ <master startport="0"/>
++ </controller>
++ <controller type="usb" model="ich9-uhci2">
++ <master startport="2"/>
++ </controller>
++ <controller type="usb" model="ich9-uhci3">
++ <master startport="4"/>
++ </controller>
++ <console type="pty"/>
++ <channel type="unix">
++ <source mode="bind"/>
++ <target type="virtio" name="org.qemu.guest_agent.0"/>
++ </channel>
++ <channel type="spicevmc">
++ <target type="virtio" name="com.redhat.spice.0"/>
++ </channel>
++ <input type="tablet" bus="usb"/>
++ <graphics type="spice" port="-1" tlsPort="-1" autoport="yes">
++ <image compression="off"/>
++ </graphics>
++ <sound model="ich6"/>
++ <video>
++ <model type="qxl"/>
++ </video>
++ <redirdev bus="usb" type="spicevmc"/>
++ <redirdev bus="usb" type="spicevmc"/>
++ <memballoon model="virtio"/>
++ <rng model="virtio">
++ <backend model="random">/dev/urandom</backend>
++ </rng>
++ <disk type="file" device="cdrom">
++ <target dev="hdb" bus="ide"/>
++ <readonly/>
++ </disk>
++ </devices>
++</domain>
+--- a/tests/test_cli.py
++++ b/tests/test_cli.py
+@@ -1088,6 +1088,7 @@
+ c.add_compare("--osinfo linux2020 --pxe", "linux2020", prerun_check=no_osinfo_linux2020_virtio)
+ c.add_compare("--osinfo generic --disk none --location %(ISO-NO-OS)s,kernel=frib.img,initrd=/frob.img", "location-manual-kernel", prerun_check=missing_xorriso) # --location with an unknown ISO but manually specified kernel paths
+ c.add_compare("--disk %(EXISTIMG1)s --location %(ISOTREE)s --nonetworks", "location-iso", prerun_check=missing_xorriso) # Using --location iso mounting
++c.add_compare("--disk %(EXISTIMG1)s --location %(ISOTREE)s --nonetworks --cloud-init user-data=%(XMLDIR)s/cloudinit/user-data.txt,meta-data=%(XMLDIR)s/cloudinit/meta-data.txt", "location-iso-and-cloud-init", prerun_check=missing_xorriso) # Using --location iso mounting and --cloud-init at the same time
+ c.add_compare("--disk %(EXISTIMG1)s --cdrom %(ISOLABEL)s", "cdrom-centos-label") # Using --cdrom with centos CD label, should use virtio etc.
+ c.add_compare("--disk %(EXISTIMG1)s --install bootdev=network --os-variant rhel5.4 --cloud-init none", "kvm-rhel5") # RHEL5 defaults
+ c.add_compare("--disk %(EXISTIMG1)s --install kernel=%(ISO-WIN7)s,initrd=%(ISOLABEL)s,kernel_args='foo bar' --os-variant rhel6.4 --unattended none", "kvm-rhel6") # RHEL6 defaults. ISO paths are just to point at existing files
+--- a/virtinst/install/installer.py
++++ b/virtinst/install/installer.py
+@@ -393,7 +393,7 @@
+ elif unattended_scripts:
+ self._prepare_unattended_data(guest, meter, unattended_scripts)
+
+- elif self._cloudinit_data:
++ if self._cloudinit_data:
+ self._prepare_cloudinit(guest, meter)
+
+ def _cleanup(self, guest):
More information about the Pkg-libvirt-maintainers
mailing list