mirror of
https://git.proxmox.com/git/qemu-server
synced 2025-08-06 06:01:51 +00:00

The previously introduced approach can fail for pinned versions when a new QEMU release is introduced. The saner approach is to use a mapping that gives one pve-version for each QEMU release. Fortunately, the old system has not been bumped yet, so we can still change it without too much effort. QEMU versions without a mapping are assumed to be pve0, 4.1 is mapped to pve1 since thats what we had as our default previously. Pinned machine versions (i.e. pc-i440fx-4.1) are always assumed to be pve0, for specific pve-versions they'd have to be pinned as well (i.e. pc-i440fx-4.1+pve1). The new logic also makes the pve-version dynamic, and starts VMs with the lowest possible 'feature-level', i.e. if a feature is only available with 4.1+pve2, but the VM isn't using it, we still start it with 4.1+pve0. We die if we don't support a version that is requested from us. This allows us to use the pve-version as live-migration blocks (i.e. bumping the version and then live-migrating a VM which uses the new feature (so is running with the bumped version) to an outdated node will present the user with a helpful error message and fail instead of silently modifying the config and only failing *after* the migration). $version_guard is introduced in config_to_command to use for features that need to check pve-version, it automatically handles selecting the newest necessary pve-version for the VM. Tests have to be adjusted, since all of them now resolve to pve0 instead of pve1. EXPECT_ERROR matching is changed to use 'eq' instead of regex to allow special characters in error messages. Signed-off-by: Stefan Reiter <s.reiter@proxmox.com>
35 lines
1.9 KiB
Batchfile
35 lines
1.9 KiB
Batchfile
/usr/bin/kvm \
|
|
-id 8006 \
|
|
-name vm8006 \
|
|
-chardev 'socket,id=qmp,path=/var/run/qemu-server/8006.qmp,server,nowait' \
|
|
-mon 'chardev=qmp,mode=control' \
|
|
-chardev 'socket,id=qmp-event,path=/var/run/qmeventd.sock,reconnect=5' \
|
|
-mon 'chardev=qmp-event,mode=control' \
|
|
-pidfile /var/run/qemu-server/8006.pid \
|
|
-daemonize \
|
|
-smbios 'type=1,uuid=3dd750ce-d910-44d0-9493-525c0be4e687' \
|
|
-drive 'if=pflash,unit=0,format=raw,readonly,file=/usr/share/pve-edk2-firmware//OVMF_CODE.fd' \
|
|
-drive 'if=pflash,unit=1,format=qcow2,id=drive-efidisk0,file=/var/lib/vz/images/100/vm-100-disk-1.qcow2' \
|
|
-smp '2,sockets=2,cores=1,maxcpus=2' \
|
|
-nodefaults \
|
|
-boot 'menu=on,strict=on,reboot-timeout=1000,splash=/usr/share/qemu-server/bootsplash.jpg' \
|
|
-vnc unix:/var/run/qemu-server/8006.vnc,password \
|
|
-cpu kvm64,+lahf_lm,+sep,+kvm_pv_unhalt,+kvm_pv_eoi,enforce \
|
|
-m 512 \
|
|
-object 'memory-backend-ram,id=ram-node0,size=256M' \
|
|
-numa 'node,nodeid=0,cpus=0,memdev=ram-node0' \
|
|
-object 'memory-backend-ram,id=ram-node1,size=256M' \
|
|
-numa 'node,nodeid=1,cpus=1,memdev=ram-node1' \
|
|
-readconfig /usr/share/qemu-server/pve-q35-4.0.cfg \
|
|
-device 'vmgenid,guid=54d1c06c-8f5b-440f-b5b2-6eab1380e13d' \
|
|
-device 'usb-tablet,id=tablet,bus=ehci.0,port=1' \
|
|
-device 'vfio-pci,host=0000:f0:43.0,id=hostpci0.0,bus=pci.0,addr=0x10.0,multifunction=on' \
|
|
-device 'vfio-pci,host=0000:f0:43.1,id=hostpci0.1,bus=pci.0,addr=0x10.1' \
|
|
-device 'vfio-pci,host=1234:f0:43.1,id=hostpci1,bus=pci.0,addr=0x11' \
|
|
-device 'VGA,id=vga,bus=pcie.0,addr=0x1' \
|
|
-device 'virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x3' \
|
|
-iscsi 'initiator-name=iqn.1993-08.org.debian:01:aabbccddeeff' \
|
|
-netdev 'type=tap,id=net0,ifname=tap8006i0,script=/var/lib/qemu-server/pve-bridge,downscript=/var/lib/qemu-server/pve-bridgedown,vhost=on' \
|
|
-device 'virtio-net-pci,mac=2E:01:68:F9:9C:87,netdev=net0,bus=pci.0,addr=0x12,id=net0,bootindex=300' \
|
|
-machine 'type=q35+pve0'
|