From: Daniel Kral <d.kral@proxmox.com>
To: pve-devel@lists.proxmox.com
Subject: [pve-devel] [PATCH ha-manager v2 03/12] tree-wide: pass optional parameters as hash values for for_each_rule helper
Date: Fri, 1 Aug 2025 18:22:18 +0200 [thread overview]
Message-ID: <20250801162230.296214-4-d.kral@proxmox.com> (raw)
In-Reply-To: <20250801162230.296214-1-d.kral@proxmox.com>
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@proxmox.com>
Signed-off-by: Daniel Kral <d.kral@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
_______________________________________________
pve-devel mailing list
pve-devel@lists.proxmox.com
https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel
next prev parent reply other threads:[~2025-08-01 16:22 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-08-01 16:22 [pve-devel] [PATCH ha-manager v2 00/12] HA rules follow up (part 1) Daniel Kral
2025-08-01 16:22 ` [pve-devel] [PATCH ha-manager v2 01/12] manager: fix ~revision version check for ha groups migration Daniel Kral
2025-08-01 16:22 ` [pve-devel] [PATCH ha-manager v2 02/12] test: ha tester: add ha groups migration tests with runtime upgrades Daniel Kral
2025-08-01 16:22 ` Daniel Kral [this message]
2025-08-01 16:22 ` [pve-devel] [PATCH ha-manager v2 04/12] api: rules: add missing return schema for the read_rule api endpoint Daniel Kral
2025-08-01 16:22 ` [pve-devel] [PATCH ha-manager v2 05/12] api: rules: ignore disable parameter if it is set to a falsy value Daniel Kral
2025-08-01 16:22 ` [pve-devel] [PATCH ha-manager v2 06/12] rules: resource affinity: make message in inter-consistency check clearer Daniel Kral
2025-08-01 16:22 ` [pve-devel] [PATCH ha-manager v2 07/12] config, manager: do not check ignored resources with affinity when migrating Daniel Kral
2025-08-01 16:22 ` [pve-devel] [PATCH ha-manager v2 08/12] rules: make positive affinity resources migrate on single resource fail Daniel Kral
2025-08-01 16:22 ` [pve-devel] [PATCH ha-manager v2 09/12] rules: allow same resources in node and resource affinity rules Daniel Kral
2025-08-01 16:22 ` [pve-devel] [PATCH ha-manager v2 10/12] rules: restrict inter-plugin resource references to simple cases Daniel Kral
2025-08-01 16:22 ` [pve-devel] [PATCH ha-manager v2 11/12] test: rules: add test cases for inter-plugin checks allowing simple use cases Daniel Kral
2025-08-01 16:22 ` [pve-devel] [PATCH ha-manager v2 12/12] test: ha tester: add resource affinity test cases mixed with node affinity rules Daniel Kral
2025-08-01 17:36 ` [pve-devel] applied: [PATCH ha-manager v2 00/12] HA rules follow up (part 1) Thomas Lamprecht
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20250801162230.296214-4-d.kral@proxmox.com \
--to=d.kral@proxmox.com \
--cc=pve-devel@lists.proxmox.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox