[pve-devel] [PATCH ha-manager v2 03/12] tree-wide: pass optional parameters as hash values for for_each_rule helper

Daniel Kral d.kral at proxmox.com
Fri Aug 1 18:22:18 CEST 2025


Make call sites to the for_each_rule more readable and while at remove
unnecessary variables in the helper body as well.

Suggested-by: Thomas Lamprecht <t.lamprecht at proxmox.com>
Signed-off-by: Daniel Kral <d.kral at proxmox.com>
---
 src/PVE/API2/HA/Rules.pm             |  6 ++----
 src/PVE/HA/Rules.pm                  | 16 +++++++---------
 src/PVE/HA/Rules/NodeAffinity.pm     | 14 +++++---------
 src/PVE/HA/Rules/ResourceAffinity.pm | 22 ++++++++--------------
 4 files changed, 22 insertions(+), 36 deletions(-)

diff --git a/src/PVE/API2/HA/Rules.pm b/src/PVE/API2/HA/Rules.pm
index 1591df28..b180d2ed 100644
--- a/src/PVE/API2/HA/Rules.pm
+++ b/src/PVE/API2/HA/Rules.pm
@@ -192,10 +192,8 @@ __PACKAGE__->register_method({
 
                 push @$res, $cfg;
             },
-            {
-                type => $type,
-                sid => $resource,
-            },
+            type => $type,
+            sid => $resource,
         );
 
         return $res;
diff --git a/src/PVE/HA/Rules.pm b/src/PVE/HA/Rules.pm
index e5d12571..e2b77215 100644
--- a/src/PVE/HA/Rules.pm
+++ b/src/PVE/HA/Rules.pm
@@ -419,13 +419,13 @@ sub canonicalize : prototype($$$) {
 
 =head3 foreach_rule(...)
 
-=head3 foreach_rule($rules, $func [, $opts])
+=head3 foreach_rule($rules, $func [, %opts])
 
 Filters the given C<$rules> according to the C<$opts> and loops over the
 resulting rules in the order as defined in the section config and executes
 C<$func> with the parameters C<L<< ($rule, $ruleid) >>>.
 
-The filter properties for C<$opts> are:
+The following key-value pairs for C<$opts> as filter properties are:
 
 =over
 
@@ -439,12 +439,10 @@ The filter properties for C<$opts> are:
 
 =cut
 
-sub foreach_rule : prototype($$;$) {
-    my ($rules, $func, $opts) = @_;
+sub foreach_rule : prototype($$;%) {
+    my ($rules, $func, %opts) = @_;
 
-    my $sid = $opts->{sid};
-    my $type = $opts->{type};
-    my $exclude_disabled_rules = $opts->{exclude_disabled_rules};
+    my $sid = $opts{sid};
 
     my @ruleids = sort {
         $rules->{order}->{$a} <=> $rules->{order}->{$b}
@@ -455,8 +453,8 @@ sub foreach_rule : prototype($$;$) {
 
         next if !$rule; # skip invalid rules
         next if defined($sid) && !defined($rule->{resources}->{$sid});
-        next if defined($type) && $rule->{type} ne $type;
-        next if $exclude_disabled_rules && exists($rule->{disable});
+        next if defined($opts{type}) && $rule->{type} ne $opts{type};
+        next if $opts{exclude_disabled_rules} && exists($rule->{disable});
 
         $func->($rule, $ruleid);
     }
diff --git a/src/PVE/HA/Rules/NodeAffinity.pm b/src/PVE/HA/Rules/NodeAffinity.pm
index ee3ef985..09a8e67c 100644
--- a/src/PVE/HA/Rules/NodeAffinity.pm
+++ b/src/PVE/HA/Rules/NodeAffinity.pm
@@ -148,10 +148,8 @@ sub get_plugin_check_arguments {
 
             $result->{node_affinity_rules}->{$ruleid} = $rule;
         },
-        {
-            type => 'node-affinity',
-            exclude_disabled_rules => 1,
-        },
+        type => 'node-affinity',
+        exclude_disabled_rules => 1,
     );
 
     return $result;
@@ -231,11 +229,9 @@ my $get_resource_node_affinity_rule = sub {
 
             $node_affinity_rule = dclone($rule) if !$node_affinity_rule;
         },
-        {
-            sid => $sid,
-            type => 'node-affinity',
-            exclude_disabled_rules => 1,
-        },
+        sid => $sid,
+        type => 'node-affinity',
+        exclude_disabled_rules => 1,
     );
 
     return $node_affinity_rule;
diff --git a/src/PVE/HA/Rules/ResourceAffinity.pm b/src/PVE/HA/Rules/ResourceAffinity.pm
index 6b5670ac..1d2ed1ed 100644
--- a/src/PVE/HA/Rules/ResourceAffinity.pm
+++ b/src/PVE/HA/Rules/ResourceAffinity.pm
@@ -92,10 +92,8 @@ sub get_plugin_check_arguments {
             $result->{positive_rules}->{$ruleid} = $rule if $rule->{affinity} eq 'positive';
             $result->{negative_rules}->{$ruleid} = $rule if $rule->{affinity} eq 'negative';
         },
-        {
-            type => 'resource-affinity',
-            exclude_disabled_rules => 1,
-        },
+        type => 'resource-affinity',
+        exclude_disabled_rules => 1,
     );
 
     return $result;
@@ -490,11 +488,9 @@ sub get_affinitive_resources : prototype($$) {
                 $affinity_set->{$csid} = 1 if $csid ne $sid;
             }
         },
-        {
-            sid => $sid,
-            type => 'resource-affinity',
-            exclude_disabled_rules => 1,
-        },
+        sid => $sid,
+        type => 'resource-affinity',
+        exclude_disabled_rules => 1,
     );
 
     return ($together, $separate);
@@ -560,11 +556,9 @@ sub get_resource_affinity : prototype($$$) {
                 }
             }
         },
-        {
-            sid => $sid,
-            type => 'resource-affinity',
-            exclude_disabled_rules => 1,
-        },
+        sid => $sid,
+        type => 'resource-affinity',
+        exclude_disabled_rules => 1,
     );
 
     return ($together, $separate);
-- 
2.47.2





More information about the pve-devel mailing list