From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from firstgate.proxmox.com (firstgate.proxmox.com [IPv6:2a01:7e0:0:424::9]) by lore.proxmox.com (Postfix) with ESMTPS id B2E7B1FF2F6 for ; Wed, 29 May 2024 14:23:37 +0200 (CEST) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id 1A9335A64; Wed, 29 May 2024 14:23:59 +0200 (CEST) From: Markus Frank To: pve-devel@lists.proxmox.com Date: Wed, 29 May 2024 14:23:46 +0200 Message-Id: <20240529122348.1267369-4-m.frank@proxmox.com> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20240529122348.1267369-1-m.frank@proxmox.com> References: <20240529122348.1267369-1-m.frank@proxmox.com> MIME-Version: 1.0 X-SPAM-LEVEL: Spam detection results: 0 AWL -0.022 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DMARC_MISSING 0.1 Missing DMARC policy KAM_DMARC_STATUS 0.01 Test Rule for DKIM or SPF Failure with Strict Alignment SPF_HELO_NONE 0.001 SPF: HELO does not publish an SPF Record SPF_PASS -0.001 SPF: sender matches SPF record T_SCC_BODY_TEXT_LINE -0.01 - URIBL_BLOCKED 0.001 ADMINISTRATOR NOTICE: The query to URIBL was blocked. See http://wiki.apache.org/spamassassin/DnsBlocklists#dnsbl-block for more information. [qemuserver.pm, qemu.pm, qemumigrate.pm] Subject: [pve-devel] [PATCH qemu-server v11 3/5] migration: add check_non_migratable_resources function X-BeenThere: pve-devel@lists.proxmox.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Proxmox VE development discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: Proxmox VE development discussion Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: pve-devel-bounces@lists.proxmox.com Sender: "pve-devel" The function checks for resources that cannot be migrated, snapshoted, or suspended. Signed-off-by: Markus Frank --- changes v11: * this patch is new to v11 PVE/API2/Qemu.pm | 5 ++++- PVE/QemuMigrate.pm | 2 +- PVE/QemuServer.pm | 23 ++++++++++++++++++++++- 3 files changed, 27 insertions(+), 3 deletions(-) diff --git a/PVE/API2/Qemu.pm b/PVE/API2/Qemu.pm index 2a1d4d7..8f36cf8 100644 --- a/PVE/API2/Qemu.pm +++ b/PVE/API2/Qemu.pm @@ -4504,7 +4504,7 @@ __PACKAGE__->register_method({ $res->{running} = PVE::QemuServer::check_running($vmid) ? 1:0; my ($local_resources, $mapped_resources, $missing_mappings_by_node) = - PVE::QemuServer::check_local_resources($vmconf, 1); + PVE::QemuServer::check_local_resources($vmconf, $res->{running}, 1); delete $missing_mappings_by_node->{$localnode}; my $vga = PVE::QemuServer::parse_vga($vmconf->{vga}); @@ -5192,6 +5192,9 @@ __PACKAGE__->register_method({ die "unable to use snapshot name 'pending' (reserved name)\n" if lc($snapname) eq 'pending'; + my $vmconf = PVE::QemuConfig->load_config($vmid); + PVE::QemuServer::check_non_migratable_resources($vmconf, $param->{vmstate}, 0); + my $realcmd = sub { PVE::Cluster::log_msg('info', $authuser, "snapshot VM $vmid: $snapname"); PVE::QemuConfig->snapshot_create($vmid, $snapname, $param->{vmstate}, diff --git a/PVE/QemuMigrate.pm b/PVE/QemuMigrate.pm index 33d5b2d..27043c1 100644 --- a/PVE/QemuMigrate.pm +++ b/PVE/QemuMigrate.pm @@ -232,7 +232,7 @@ sub prepare { $self->{vm_was_paused} = 1 if PVE::QemuServer::vm_is_paused($vmid, 0); } - my ($loc_res, $mapped_res, $missing_mappings_by_node) = PVE::QemuServer::check_local_resources($conf, 1); + my ($loc_res, $mapped_res, $missing_mappings_by_node) = PVE::QemuServer::check_local_resources($conf, $running, 1); my $blocking_resources = []; for my $res ($loc_res->@*) { if (!grep($res, $mapped_res->@*)) { diff --git a/PVE/QemuServer.pm b/PVE/QemuServer.pm index 31a7ee9..9f342bf 100644 --- a/PVE/QemuServer.pm +++ b/PVE/QemuServer.pm @@ -2563,13 +2563,32 @@ sub config_list { return $res; } +sub check_non_migratable_resources { + my ($conf, $state, $noerr) = @_; + + my @non_migr_res = (); + if ($state && $conf->{amd_sev}) { + push @non_migr_res, "amd_sev"; + } + + if (scalar @non_migr_res && !$noerr) { + die "Cannot live-migrate, snapshot (with RAM), or hibernate a VM with:" + ." @non_migr_res\n"; + } + + return @non_migr_res; +} + # test if VM uses local resources (to prevent migration) sub check_local_resources { - my ($conf, $noerr) = @_; + my ($conf, $state, $noerr) = @_; my @loc_res = (); my $mapped_res = []; + my @non_migr_res = check_non_migratable_resources($conf, $state, $noerr); + push(@loc_res, @non_migr_res); + my $nodelist = PVE::Cluster::get_nodelist(); my $pci_map = PVE::Mapping::PCI::config(); my $usb_map = PVE::Mapping::USB::config(); @@ -6362,6 +6381,8 @@ sub vm_suspend { die "cannot suspend to disk during backup\n" if $is_backing_up && $includestate; + check_non_migratable_resources($conf, $includestate, 0); + if ($includestate) { $conf->{lock} = 'suspending'; my $date = strftime("%Y-%m-%d", localtime(time())); -- 2.39.2 _______________________________________________ pve-devel mailing list pve-devel@lists.proxmox.com https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel