With SPICE and QXL, Linux guests get 'max_outputs=4' on the display
device, so they can use up to four displays with a single device. For
the VirtIO GPU, there is no way to change QEMU's default of a single
output, so using multiple displays requires passing the whole device
via custom arguments.
Add a 'max-outputs' option to the 'vga' property, which sets the
'max_outputs' property of the VirtIO GPU, for both 'virtio' and
'virtio-gl'. QEMU supports up to 16 outputs. Other display types
reject the option, as QXL handles multiple displays on its own.
Signed-off-by: Michal Fox <me@dualfroz.com>
Disks can be excluded from backups with the 'backup' flag, but the TPM
state does not support it. Guests can keep secrets in the TPM, like
the key to automatically unlock disk encryption, so a backup that
includes the TPM state can be enough to get at the data. Users might
want to keep the TPM state out of the backup and rely on a recovery
key after restoring instead.
Add the 'backup' flag to the TPM state, like for other disks. Backups
already honor it for all volumes of the configuration, so a TPM state
with 'backup=0' is skipped and logged as excluded in the backup task
log, and on restore, its line is commented out like for other excluded
disks.
Signed-off-by: Michal Fox <me@dualfroz.com>
When a VM has no local ISO image attached anymore, but one of its
snapshots still references it, migration fails with:
can't migrate local disk 'local:iso/debian.iso': local cdrom image
which does not tell where the image is coming from, since it is not
visible in the current configuration of the VM.
Add the names of the snapshots referencing the image to the error in
that case, like it is already done for a physical CD/DVD drive. The
check for the physical drive now reuses the same hint.
Signed-off-by: Michal Fox <me@dualfroz.com>
Restoring a backup keeps the 'vmstatestorage' option of the backed up
VM. When the backup is restored on another node or cluster, that
storage might not exist there or not be enabled for the node, so that
hibernating the VM or taking a snapshot including RAM fails later on,
for example with "storage 'local-zfs-pve1' does not exist".
If the configured VM state storage is not available on the node the
backup is restored to, drop the option, so that the storage is
selected automatically, like for VMs without it, and log that in the
restore task log.
A 'vmstatestorage' passed explicitly when restoring is applied after
this and is not affected.
Signed-off-by: Michal Fox <me@dualfroz.com>
The network configuration for configdrive2 is in the format of
/etc/network/interfaces, where the DNS settings are configured with the
'dns-nameservers' and 'dns-search' options in an interface stanza.
But they were written with an underscore instead of a dash, and right
after the stanza of the loopback interface, so cloud-init ignored them
and the configured nameservers and search domains never ended up in the
guest. Just using the correct option names would not be enough, as
cloud-init does not apply the DNS settings of the loopback interface
when rendering the configuration with netplan, for example.
Write the options with a dash and add them to the stanzas of the
statically configured interfaces, like it is already done for the
cloudbase-init configuration.
Signed-off-by: Michal Fox <me@dualfroz.com>
When the last tag of a VM gets removed, for example in the web UI, the
API gets an empty 'tags' value, which then ends up as an empty 'tags:'
line in the config and in the output of 'qm config'. As the config
parser reads that line back as a single space, it also gets written out
again on every following config change.
Skip a tag list without any tag when writing the config, which also
cleans up existing configs with such a line on their next change. The
pending section still needs to keep it, otherwise the removal of all
tags would get lost between writing the pending change and applying it.
Signed-off-by: Michal Fox <me@dualfroz.com>
When hugepages are enabled, each custom NUMA node must be bound to a
single host node. This was checked with a regex that only accepts a
single digit, so any host node from 10 upwards was rejected with a
misleading "more than 1 hostnode value" error, making hugepages
unusable on hosts with more than ten NUMA nodes.
Accept any single node number instead. Ranges and lists are still
rejected as before.
Signed-off-by: Michal Fox <me@dualfroz.com>
Reviewed-by: Max R. Carrara <m.carrara@proxmox.com>
Tested-by: Max R. Carrara <m.carrara@proxmox.com>
Link: https://lore.proxmox.com/20260926084115.7-1-me@dualfroz.com
[TL: add a multi-digit host node case to the memory tests]
Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
When hugepages are enabled, each custom NUMA node must be bound to a
single host node. This was checked with a regex that only accepts a
single digit, so any host node from 10 upwards was rejected with a
misleading "more than 1 hostnode value" error, making hugepages
unusable on hosts with more than ten NUMA nodes.
Accept any single node number instead. Ranges and lists are still
rejected as before.
Signed-off-by: Michal Fox <me@dualfroz.com>