[pve-devel] [PATCH qemu-server 1/1] api: create/store: allow adding VM as HA resource after creation

Michael Köppl m.koeppl at proxmox.com
Mon Oct 6 17:52:29 CEST 2025


Extend the creation and restore actions with a 'ha-managed' parameter
that, if enabled, will also add the VM as a new HA resource. The 'state'
parameter for this new resource will match the value of the 'start'
parameter used during creation of the VM, such that the resulting state
of the resource and VM both match the user's expectation (avoid
situation where user creates a VM, does not select 'Start after
creation', but the default 'started' state of the resource would start
the VM anyway).

Signed-off-by: Michael Köppl <m.koeppl at proxmox.com>
---
 src/PVE/API2/Qemu.pm | 25 +++++++++++++++++++++++++
 1 file changed, 25 insertions(+)

diff --git a/src/PVE/API2/Qemu.pm b/src/PVE/API2/Qemu.pm
index 7fced6c6..71bedc1e 100644
--- a/src/PVE/API2/Qemu.pm
+++ b/src/PVE/API2/Qemu.pm
@@ -1170,6 +1170,12 @@ __PACKAGE__->register_method({
                     default => 0,
                     description => "Start VM after it was created successfully.",
                 },
+                'ha-managed' => {
+                    optional => 1,
+                    type => 'boolean',
+                    default => 0,
+                    description => "Add the VM as a HA resource after it was created.",
+                },
                 'import-working-storage' => get_standard_option(
                     'pve-storage-id',
                     {
@@ -1204,6 +1210,7 @@ __PACKAGE__->register_method({
         my $force = extract_param($param, 'force');
         my $pool = extract_param($param, 'pool');
         my $start_after_create = extract_param($param, 'start');
+        my $ha_managed = extract_param($param, 'ha-managed');
         my $storage = extract_param($param, 'storage');
         my $unique = extract_param($param, 'unique');
         my $live_restore = extract_param($param, 'live-restore');
@@ -1380,6 +1387,15 @@ __PACKAGE__->register_method({
                 eval { PVE::API2::Qemu->vm_start({ vmid => $vmid, node => $node }) };
                 warn $@ if $@;
             }
+
+            if ($ha_managed) {
+                print "Add as HA resource\n";
+                my $state = $start_after_create ? 'started' : 'stopped';
+                eval {
+                    PVE::API2::HA::Resources->create({ sid => "vm:$vmid", state => $state });
+                };
+                warn $@ if $@;
+            }
         };
 
         my $createfn = sub {
@@ -1463,6 +1479,15 @@ __PACKAGE__->register_method({
 
             PVE::QemuConfig->lock_config_full($vmid, 1, $realcmd);
 
+            if ($ha_managed) {
+                print "Add as HA resource\n";
+                my $state = $start_after_create ? 'started' : 'stopped';
h
+                eval {
+                    PVE::API2::HA::Resources->create({ sid => "vm:$vmid", state => $state });
+                };
+                warn $@ if $@;
+            }
+
             if ($start_after_create && !$live_restore) {
                 print "Execute autostart\n";
                 eval { PVE::API2::Qemu->vm_start({ vmid => $vmid, node => $node }) };
-- 
2.47.3





More information about the pve-devel mailing list