Add information about positive and negative ha resource affinity rules,
which the VM is part of, to the migration precondition API endpoint.
These inform callees about any comigrated resources or blocking
resources that are caused by the resource affinity rules.

Signed-off-by: Daniel Kral <d.k...@proxmox.com>
---
 src/PVE/API2/Qemu.pm | 49 ++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 49 insertions(+)

diff --git a/src/PVE/API2/Qemu.pm b/src/PVE/API2/Qemu.pm
index 2e6358e4..8a122cfb 100644
--- a/src/PVE/API2/Qemu.pm
+++ b/src/PVE/API2/Qemu.pm
@@ -5094,6 +5094,28 @@ __PACKAGE__->register_method({
                             description => 'A storage',
                         },
                     },
+                    'blocking-ha-resources' => {
+                        description => "HA resources, which are blocking the"
+                            . " VM from being migrated to the node.",
+                        type => 'array',
+                        optional => 1,
+                        items => {
+                            description => "A blocking HA resource",
+                            type => 'object',
+                            properties => {
+                                sid => {
+                                    type => 'string',
+                                    description => "The blocking HA resource 
id",
+                                },
+                                cause => {
+                                    type => 'string',
+                                    description => "The reason why the HA"
+                                        . " resource is blocking the 
migration.",
+                                    enum => ['resource-affinity'],
+                                },
+                            },
+                        },
+                    },
                 },
                 description => "List of not allowed nodes with additional 
information.",
             },
@@ -5146,6 +5168,17 @@ __PACKAGE__->register_method({
                 description =>
                     "Object of mapped resources with additional information 
such if they're live migratable.",
             },
+            'comigrated-ha-resources' => {
+                description => "HA resources, which will be migrated to the"
+                    . " same target node as the VM, because these are in"
+                    . " positive affinity with the VM.",
+                type => 'array',
+                optional => 1,
+                items => {
+                    type => 'string',
+                    description => "A comigrated HA resource",
+                },
+            },
         },
     },
     code => sub {
@@ -5186,6 +5219,14 @@ __PACKAGE__->register_method({
         my $storage_nodehash =
             PVE::QemuServer::check_local_storage_availability($vmconf, 
$storecfg);
 
+        my $comigrated_ha_resources = {};
+        my $blocking_ha_resources_by_node = {};
+
+        if (PVE::HA::Config::vm_is_ha_managed($vmid)) {
+            ($comigrated_ha_resources, $blocking_ha_resources_by_node) =
+                PVE::HA::Config::get_resource_motion_info("vm:$vmid");
+        }
+
         my $nodelist = PVE::Cluster::get_nodelist();
         for my $node ($nodelist->@*) {
             next if $node eq $localnode;
@@ -5202,6 +5243,12 @@ __PACKAGE__->register_method({
                     $missing_mappings;
             }
 
+            # extracting blocking resources for current node
+            if (my $blocking_ha_resources = 
$blocking_ha_resources_by_node->{$node}) {
+                $res->{not_allowed_nodes}->{$node}->{'blocking-ha-resources'} =
+                    $blocking_ha_resources;
+            }
+
             # if nothing came up, add it to the allowed nodes
             if (scalar($res->{not_allowed_nodes}->{$node}->%*) == 0) {
                 push $res->{allowed_nodes}->@*, $node;
@@ -5215,6 +5262,8 @@ __PACKAGE__->register_method({
         $res->{'mapped-resources'} = [sort keys $mapped_resources->%*];
         $res->{'mapped-resource-info'} = $mapped_resources;
 
+        $res->{'comigrated-ha-resources'} = $comigrated_ha_resources;
+
         return $res;
 
     },
-- 
2.39.5



_______________________________________________
pve-devel mailing list
pve-devel@lists.proxmox.com
https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel

Reply via email to