In preparation of the next patch, remove the overly restrictive checker, which disallows that resources are used in node affinity rules and resource affinity rules at the same time.
Signed-off-by: Daniel Kral <d.k...@proxmox.com> --- This could be squashed into the next, but I figured it's good measure for documentation to have its own patch. src/PVE/HA/Rules.pm | 70 ----------- .../multiple-resource-refs-in-rules.cfg | 52 -------- ...multiple-resource-refs-in-rules.cfg.expect | 111 ------------------ 3 files changed, 233 deletions(-) delete mode 100644 src/test/rules_cfgs/multiple-resource-refs-in-rules.cfg delete mode 100644 src/test/rules_cfgs/multiple-resource-refs-in-rules.cfg.expect diff --git a/src/PVE/HA/Rules.pm b/src/PVE/HA/Rules.pm index e2b77215..64dae1e4 100644 --- a/src/PVE/HA/Rules.pm +++ b/src/PVE/HA/Rules.pm @@ -475,74 +475,4 @@ sub get_next_ordinal : prototype($) { return $current_order + 1; } -=head1 INTER-PLUGIN RULE CHECKERS - -=cut - -=head3 check_single_global_resource_reference($node_affinity_rules, $resource_affinity_rules) - -Returns all rules in C<$node_affinity_rules> and C<$resource_affinity_rules> as -a list of lists, each consisting of the rule id and the resource id, where one -of the resources is used in both a node affinity rule and resource affinity rule -at the same time. - -If there are none, the returned list is empty. - -=cut - -sub check_single_global_resource_reference { - my ($node_affinity_rules, $resource_affinity_rules) = @_; - - my @conflicts = (); - my $resource_ruleids = {}; - - while (my ($ruleid, $rule) = each %$node_affinity_rules) { - for my $sid (keys $rule->{resources}->%*) { - push $resource_ruleids->{$sid}->{node_affinity}->@*, $ruleid; - } - } - while (my ($ruleid, $rule) = each %$resource_affinity_rules) { - for my $sid (keys $rule->{resources}->%*) { - push $resource_ruleids->{$sid}->{resource_affinity}->@*, $ruleid; - } - } - - for my $sid (keys %$resource_ruleids) { - my $node_affinity_ruleids = $resource_ruleids->{$sid}->{node_affinity} // []; - my $resource_affinity_ruleids = $resource_ruleids->{$sid}->{resource_affinity} // []; - - next if @$node_affinity_ruleids > 0 && !@$resource_affinity_ruleids; - next if @$resource_affinity_ruleids > 0 && !@$node_affinity_ruleids; - - for my $ruleid (@$node_affinity_ruleids, @$resource_affinity_ruleids) { - push @conflicts, [$ruleid, $sid]; - } - } - - @conflicts = sort { $a->[0] cmp $b->[0] || $a->[1] cmp $b->[1] } @conflicts; - return \@conflicts; -} - -__PACKAGE__->register_check( - sub { - my ($args) = @_; - - return check_single_global_resource_reference( - $args->{node_affinity_rules}, - $args->{resource_affinity_rules}, - ); - }, - sub { - my ($conflicts, $errors) = @_; - - for my $conflict (@$conflicts) { - my ($ruleid, $sid) = @$conflict; - - push $errors->{$ruleid}->{resources}->@*, - "resource '$sid' cannot be used in both a node affinity rule" - . " and a resource affinity rule at the same time"; - } - }, -); - 1; diff --git a/src/test/rules_cfgs/multiple-resource-refs-in-rules.cfg b/src/test/rules_cfgs/multiple-resource-refs-in-rules.cfg deleted file mode 100644 index 6608a5c3..00000000 --- a/src/test/rules_cfgs/multiple-resource-refs-in-rules.cfg +++ /dev/null @@ -1,52 +0,0 @@ -# Case 1: Do not remove node/resource affinity rules, which do not share resources between these types. -node-affinity: different-resource1 - resources vm:101,vm:102,vm:103 - nodes node1,node2:2 - strict 0 - -resource-affinity: different-resource2 - resources vm:104,vm:105 - affinity positive - -node-affinity: different-resource3 - resources vm:106 - nodes node1,node2:2 - strict 1 - -resource-affinity: different-resource4 - resources vm:107,vm:109 - affinity negative - -# Case 2: Remove rules, which share the same resource(s) between different rule types. -node-affinity: same-resource1 - resources vm:201 - nodes node1,node2:2 - strict 0 - -resource-affinity: same-resource2 - resources vm:201,vm:205 - affinity negative - -resource-affinity: same-resource3 - resources vm:201,vm:203,vm:204 - affinity negative - -node-affinity: same-resource4 - resources vm:205,vm:206,vm:207 - nodes node1:2,node3:3 - strict 1 - -# Case 3: Do not remove rules, which do not share resources between them. -node-affinity: other-different-resource1 - resources vm:301,vm:308 - nodes node1,node2:2 - strict 0 - -resource-affinity: other-different-resource2 - resources vm:302,vm:304,vm:305 - affinity positive - -node-affinity: other-different-resource3 - resources vm:303,vm:306,vm:309 - nodes node1,node2:2 - strict 1 diff --git a/src/test/rules_cfgs/multiple-resource-refs-in-rules.cfg.expect b/src/test/rules_cfgs/multiple-resource-refs-in-rules.cfg.expect deleted file mode 100644 index 972c042d..00000000 --- a/src/test/rules_cfgs/multiple-resource-refs-in-rules.cfg.expect +++ /dev/null @@ -1,111 +0,0 @@ ---- Log --- -Drop rule 'same-resource1', because resource 'vm:201' cannot be used in both a node affinity rule and a resource affinity rule at the same time. -Drop rule 'same-resource2', because resource 'vm:201' cannot be used in both a node affinity rule and a resource affinity rule at the same time. -Drop rule 'same-resource2', because resource 'vm:205' cannot be used in both a node affinity rule and a resource affinity rule at the same time. -Drop rule 'same-resource3', because resource 'vm:201' cannot be used in both a node affinity rule and a resource affinity rule at the same time. -Drop rule 'same-resource4', because resource 'vm:205' cannot be used in both a node affinity rule and a resource affinity rule at the same time. ---- Config --- -$VAR1 = { - 'digest' => 'fcbdf84d442d38b4c901d989c211fb62024c5515', - 'ids' => { - 'different-resource1' => { - 'nodes' => { - 'node1' => { - 'priority' => 0 - }, - 'node2' => { - 'priority' => 2 - } - }, - 'resources' => { - 'vm:101' => 1, - 'vm:102' => 1, - 'vm:103' => 1 - }, - 'strict' => 0, - 'type' => 'node-affinity' - }, - 'different-resource2' => { - 'affinity' => 'positive', - 'resources' => { - 'vm:104' => 1, - 'vm:105' => 1 - }, - 'type' => 'resource-affinity' - }, - 'different-resource3' => { - 'nodes' => { - 'node1' => { - 'priority' => 0 - }, - 'node2' => { - 'priority' => 2 - } - }, - 'resources' => { - 'vm:106' => 1 - }, - 'strict' => 1, - 'type' => 'node-affinity' - }, - 'different-resource4' => { - 'affinity' => 'negative', - 'resources' => { - 'vm:107' => 1, - 'vm:109' => 1 - }, - 'type' => 'resource-affinity' - }, - 'other-different-resource1' => { - 'nodes' => { - 'node1' => { - 'priority' => 0 - }, - 'node2' => { - 'priority' => 2 - } - }, - 'resources' => { - 'vm:301' => 1, - 'vm:308' => 1 - }, - 'strict' => 0, - 'type' => 'node-affinity' - }, - 'other-different-resource2' => { - 'affinity' => 'positive', - 'resources' => { - 'vm:302' => 1, - 'vm:304' => 1, - 'vm:305' => 1 - }, - 'type' => 'resource-affinity' - }, - 'other-different-resource3' => { - 'nodes' => { - 'node1' => { - 'priority' => 0 - }, - 'node2' => { - 'priority' => 2 - } - }, - 'resources' => { - 'vm:303' => 1, - 'vm:306' => 1, - 'vm:309' => 1 - }, - 'strict' => 1, - 'type' => 'node-affinity' - } - }, - 'order' => { - 'different-resource1' => 1, - 'different-resource2' => 2, - 'different-resource3' => 3, - 'different-resource4' => 4, - 'other-different-resource1' => 9, - 'other-different-resource2' => 10, - 'other-different-resource3' => 11 - } - }; -- 2.47.2 _______________________________________________ pve-devel mailing list pve-devel@lists.proxmox.com https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel