From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from gate001.proxmox.com (gate001.proxmox.com [45.144.208.40]) by lore.proxmox.com (Postfix) with ESMTPS id BC1AF1FF0AF for ; Thu, 24 Sep 2026 18:17:20 +0200 (CEST) Received: from gate001.proxmox.com (localhost.localdomain [127.0.0.1]) by gate001.proxmox.com (Proxmox) with ESMTP id 5A7D021822; Thu, 24 Sep 2026 18:15:44 +0200 (CEST) From: =?UTF-8?q?Michael=20K=C3=B6ppl?= To: pve-devel@lists.proxmox.com Subject: [PATCH qemu-server v6 11/18] api, remote migrate: exempt existing VMs from next-id enforcement Date: Thu, 24 Sep 2026 18:15:03 +0200 Message-ID: <20260924161510.847362-12-m.koeppl@proxmox.com> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260924161510.847362-1-m.koeppl@proxmox.com> References: <20260924161510.847362-1-m.koeppl@proxmox.com> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Bm-Milter-Handled: 55990f41-d878-4baa-be0a-ee34c49e34d2 X-Bm-Transport-Timestamp: 1790266513373 X-SPAM-LEVEL: Spam detection results: 0 AWL 0.415 Adjusted score from AWL reputation of From: address DMARC_MISSING 0.1 Missing DMARC policy KAM_DMARC_STATUS 0.01 Test Rule for DKIM or SPF Failure with Strict Alignment (newer systems) RCVD_IN_DNSWL_MED -2.3 Sender listed at https://www.dnswl.org/, medium trust SPF_HELO_NONE 0.001 SPF: HELO does not publish an SPF Record SPF_PASS -0.001 SPF: sender matches SPF record Message-ID-Hash: KZ46M3IACXCTLMUVQDJ2TKKDUALQPRBG X-Message-ID-Hash: KZ46M3IACXCTLMUVQDJ2TKKDUALQPRBG X-MailFrom: m.koeppl@proxmox.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; loop; banned-address; emergency; member-moderation; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header X-Mailman-Version: 3.3.10 Precedence: list List-Id: Proxmox VE development discussion List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: With 'enforce' set in the next-id datacenter option, register_used_id() rejects IDs outside the configured range and, with 'unique', IDs that were used before. However, this behavior is only meant for IDs claimed by new guests. Destroying a VM and removing the source VM after a remote migration with --delete both record the ID of a VM that already exists. That ID was recorded when the VM was created and it may lie outside the configured range if the range was changed later. Thus, exempt these cases from enforcement. Cloning creates a new VM and stays subject to enforcement. Signed-off-by: Michael Köppl --- src/PVE/API2/Qemu.pm | 2 +- src/PVE/QemuMigrate.pm | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/PVE/API2/Qemu.pm b/src/PVE/API2/Qemu.pm index 9cb36e2b..210a0861 100644 --- a/src/PVE/API2/Qemu.pm +++ b/src/PVE/API2/Qemu.pm @@ -2860,7 +2860,7 @@ __PACKAGE__->register_method({ $early_checks->(); # record before destroying anything, so a failure here leaves the VM intact - eval { PVE::GuestID::register_used_id($vmid) }; + eval { PVE::GuestID::register_used_id($vmid, { existing => 1 }) }; die "unable to destroy VM $vmid - $@" if $@; my $realcmd = sub { diff --git a/src/PVE/QemuMigrate.pm b/src/PVE/QemuMigrate.pm index 3f2d9b91..680b5960 100644 --- a/src/PVE/QemuMigrate.pm +++ b/src/PVE/QemuMigrate.pm @@ -1905,7 +1905,7 @@ sub phase3_cleanup { } if ($self->{opts}->{remote} && $self->{opts}->{delete}) { - eval { PVE::GuestID::register_used_id($vmid) }; + eval { PVE::GuestID::register_used_id($vmid, { existing => 1 }) }; warn $@ if $@; eval { PVE::QemuServer::destroy_vm($self->{storecfg}, $vmid, 1, undef, 0) }; -- 2.47.3