Since there exists a compiled representation of the HA rules config now, which is currently used by both the HA Manager and API endpoints, add the compiled representation to the test cases to document and follow changes through these test cases.
Signed-off-by: Daniel Kral <d.k...@proxmox.com> --- ...efaults-for-node-affinity-rules.cfg.expect | 29 +++ ...lts-for-resource-affinity-rules.cfg.expect | 15 ++ ...nt-node-resource-affinity-rules.cfg.expect | 51 ++++++ ...sistent-resource-affinity-rules.cfg.expect | 8 + ...egative-resource-affinity-rules.cfg.expect | 21 +++ ...fective-resource-affinity-rules.cfg.expect | 8 + ...egative-resource-affinity-rules.cfg.expect | 88 +++++++++ ...ositive-resource-affinity-rules.cfg.expect | 173 ++++++++++++++++++ ...egative-resource-affinity-rules.cfg.expect | 44 +++++ ...ositive-resource-affinity-rules.cfg.expect | 128 +++++++++++++ ...ty-with-resource-affinity-rules.cfg.expect | 30 +++ ...rce-refs-in-node-affinity-rules.cfg.expect | 84 +++++++++ src/test/test_rules_config.pl | 3 + 13 files changed, 682 insertions(+) diff --git a/src/test/rules_cfgs/defaults-for-node-affinity-rules.cfg.expect b/src/test/rules_cfgs/defaults-for-node-affinity-rules.cfg.expect index 8ea928f2..35d061bd 100644 --- a/src/test/rules_cfgs/defaults-for-node-affinity-rules.cfg.expect +++ b/src/test/rules_cfgs/defaults-for-node-affinity-rules.cfg.expect @@ -58,3 +58,32 @@ "node-affinity-strict" : 4 } } +--- Compiled Config --- +{ + "node-affinity" : { + "vm:101" : { + "nodes" : { + "node1" : { + "priority" : 0 + }, + "node2" : { + "priority" : -1 + }, + "node3" : { + "priority" : -1 + } + } + }, + "vm:104" : { + "nodes" : { + "node3" : { + "priority" : 0 + } + } + } + }, + "resource-affinity" : { + "negative" : {}, + "positive" : {} + } +} diff --git a/src/test/rules_cfgs/defaults-for-resource-affinity-rules.cfg.expect b/src/test/rules_cfgs/defaults-for-resource-affinity-rules.cfg.expect index 7af19a18..d6a1121e 100644 --- a/src/test/rules_cfgs/defaults-for-resource-affinity-rules.cfg.expect +++ b/src/test/rules_cfgs/defaults-for-resource-affinity-rules.cfg.expect @@ -36,3 +36,18 @@ "resource-affinity-disabled-explicit" : 3 } } +--- Compiled Config --- +{ + "node-affinity" : {}, + "resource-affinity" : { + "negative" : { + "vm:101" : { + "vm:102" : 1 + }, + "vm:102" : { + "vm:101" : 1 + } + }, + "positive" : {} + } +} diff --git a/src/test/rules_cfgs/inconsistent-node-resource-affinity-rules.cfg.expect b/src/test/rules_cfgs/inconsistent-node-resource-affinity-rules.cfg.expect index ad517077..4317292b 100644 --- a/src/test/rules_cfgs/inconsistent-node-resource-affinity-rules.cfg.expect +++ b/src/test/rules_cfgs/inconsistent-node-resource-affinity-rules.cfg.expect @@ -75,3 +75,54 @@ Drop rule 'vm503-must-be-on-node2', because at least one resource is in a positi "vm202-must-be-on-node2" : 4 } } +--- Compiled Config --- +{ + "node-affinity" : { + "vm:101" : { + "nodes" : { + "node1" : { + "priority" : 0 + } + } + }, + "vm:102" : { + "nodes" : { + "node1" : { + "priority" : 0 + } + } + }, + "vm:201" : { + "nodes" : { + "node1" : { + "priority" : 0 + } + } + }, + "vm:202" : { + "nodes" : { + "node2" : { + "priority" : 0 + } + } + } + }, + "resource-affinity" : { + "negative" : { + "vm:201" : { + "vm:202" : 1 + }, + "vm:202" : { + "vm:201" : 1 + } + }, + "positive" : { + "vm:101" : { + "vm:102" : 1 + }, + "vm:102" : { + "vm:101" : 1 + } + } + } +} diff --git a/src/test/rules_cfgs/inconsistent-resource-affinity-rules.cfg.expect b/src/test/rules_cfgs/inconsistent-resource-affinity-rules.cfg.expect index f47828c6..70d51ffd 100644 --- a/src/test/rules_cfgs/inconsistent-resource-affinity-rules.cfg.expect +++ b/src/test/rules_cfgs/inconsistent-resource-affinity-rules.cfg.expect @@ -12,3 +12,11 @@ Drop rule 'stick-together1', because rule shares two or more resources with a ne "ids" : {}, "order" : {} } +--- Compiled Config --- +{ + "node-affinity" : {}, + "resource-affinity" : { + "negative" : {}, + "positive" : {} + } +} diff --git a/src/test/rules_cfgs/ineffective-negative-resource-affinity-rules.cfg.expect b/src/test/rules_cfgs/ineffective-negative-resource-affinity-rules.cfg.expect index e2c1ad11..42fa7d24 100644 --- a/src/test/rules_cfgs/ineffective-negative-resource-affinity-rules.cfg.expect +++ b/src/test/rules_cfgs/ineffective-negative-resource-affinity-rules.cfg.expect @@ -28,3 +28,24 @@ Drop rule 'remove-me2', because rule defines more resources than available nodes "do-not-remove-me2" : 2 } } +--- Compiled Config --- +{ + "node-affinity" : {}, + "resource-affinity" : { + "negative" : { + "vm:101" : { + "vm:102" : 1, + "vm:103" : 1 + }, + "vm:102" : { + "vm:101" : 1, + "vm:103" : 1 + }, + "vm:103" : { + "vm:101" : 1, + "vm:102" : 1 + } + }, + "positive" : {} + } +} diff --git a/src/test/rules_cfgs/ineffective-resource-affinity-rules.cfg.expect b/src/test/rules_cfgs/ineffective-resource-affinity-rules.cfg.expect index 4bbc782a..9c61944f 100644 --- a/src/test/rules_cfgs/ineffective-resource-affinity-rules.cfg.expect +++ b/src/test/rules_cfgs/ineffective-resource-affinity-rules.cfg.expect @@ -7,3 +7,11 @@ Drop rule 'lonely-resource2', because rule is ineffective as there are less than "ids" : {}, "order" : {} } +--- Compiled Config --- +{ + "node-affinity" : {}, + "resource-affinity" : { + "negative" : {}, + "positive" : {} + } +} diff --git a/src/test/rules_cfgs/infer-implicit-negative-resource-affinity-rules.cfg.expect b/src/test/rules_cfgs/infer-implicit-negative-resource-affinity-rules.cfg.expect index d3f1c7c3..f863c9fa 100644 --- a/src/test/rules_cfgs/infer-implicit-negative-resource-affinity-rules.cfg.expect +++ b/src/test/rules_cfgs/infer-implicit-negative-resource-affinity-rules.cfg.expect @@ -129,3 +129,91 @@ Drop rule 'do-not-infer-inconsistent-positive1', because rule shares two or more "infer-two-positive1" : 4 } } +--- Compiled Config --- +{ + "node-affinity" : {}, + "resource-affinity" : { + "negative" : { + "vm:201" : { + "vm:204" : 1 + }, + "vm:202" : { + "vm:204" : 1 + }, + "vm:203" : { + "vm:204" : 1 + }, + "vm:204" : { + "vm:201" : 1, + "vm:202" : 1, + "vm:203" : 1 + }, + "vm:301" : { + "vm:304" : 1, + "vm:305" : 1 + }, + "vm:302" : { + "vm:304" : 1, + "vm:305" : 1 + }, + "vm:303" : { + "vm:304" : 1, + "vm:305" : 1 + }, + "vm:304" : { + "vm:301" : 1, + "vm:302" : 1, + "vm:303" : 1 + }, + "vm:305" : { + "vm:301" : 1, + "vm:302" : 1, + "vm:303" : 1 + }, + "vm:401" : { + "vm:404" : 1 + }, + "vm:404" : { + "vm:401" : 1 + } + }, + "positive" : { + "vm:101" : { + "vm:102" : 1, + "vm:103" : 1 + }, + "vm:102" : { + "vm:101" : 1, + "vm:103" : 1 + }, + "vm:103" : { + "vm:101" : 1, + "vm:102" : 1 + }, + "vm:201" : { + "vm:202" : 1, + "vm:203" : 1 + }, + "vm:202" : { + "vm:201" : 1, + "vm:203" : 1 + }, + "vm:203" : { + "vm:201" : 1, + "vm:202" : 1 + }, + "vm:301" : { + "vm:302" : 1, + "vm:303" : 1 + }, + "vm:302" : { + "vm:301" : 1, + "vm:303" : 1 + }, + "vm:303" : { + "vm:301" : 1, + "vm:302" : 1 + } + } + } +} diff --git a/src/test/rules_cfgs/infer-node-affinity-for-positive-resource-affinity-rules.cfg.expect b/src/test/rules_cfgs/infer-node-affinity-for-positive-resource-affinity-rules.cfg.expect index 3f5cd6d8..ed339777 100644 --- a/src/test/rules_cfgs/infer-node-affinity-for-positive-resource-affinity-rules.cfg.expect +++ b/src/test/rules_cfgs/infer-node-affinity-for-positive-resource-affinity-rules.cfg.expect @@ -109,3 +109,176 @@ "infer-single-resource2" : 6 } } +--- Compiled Config --- +{ + "node-affinity" : { + "vm:201" : { + "nodes" : { + "node1" : { + "priority" : -1 + }, + "node2" : { + "priority" : -1 + }, + "node3" : { + "priority" : 0 + } + } + }, + "vm:203" : { + "nodes" : { + "node1" : { + "priority" : 0 + }, + "node2" : { + "priority" : 0 + } + } + }, + "vm:301" : { + "nodes" : { + "node1" : { + "priority" : -1 + }, + "node2" : { + "priority" : -1 + }, + "node3" : { + "priority" : 0 + } + } + }, + "vm:302" : { + "nodes" : { + "node1" : { + "priority" : -1 + }, + "node2" : { + "priority" : -1 + }, + "node3" : { + "priority" : 0 + } + } + }, + "vm:303" : { + "nodes" : { + "node1" : { + "priority" : -1 + }, + "node2" : { + "priority" : -1 + }, + "node3" : { + "priority" : 0 + } + } + }, + "vm:401" : { + "nodes" : { + "node1" : { + "priority" : 0 + }, + "node3" : { + "priority" : 0 + } + } + }, + "vm:402" : { + "nodes" : { + "node1" : { + "priority" : 0 + }, + "node3" : { + "priority" : 0 + } + } + }, + "vm:403" : { + "nodes" : { + "node1" : { + "priority" : 0 + }, + "node3" : { + "priority" : 0 + } + } + }, + "vm:404" : { + "nodes" : { + "node1" : { + "priority" : 0 + }, + "node3" : { + "priority" : 0 + } + } + }, + "vm:405" : { + "nodes" : { + "node1" : { + "priority" : 0 + }, + "node3" : { + "priority" : 0 + } + } + } + }, + "resource-affinity" : { + "negative" : { + "vm:201" : { + "vm:203" : 1 + }, + "vm:203" : { + "vm:201" : 1 + } + }, + "positive" : { + "vm:101" : { + "vm:102" : 1, + "vm:103" : 1 + }, + "vm:102" : { + "vm:101" : 1, + "vm:103" : 1 + }, + "vm:103" : { + "vm:101" : 1, + "vm:102" : 1 + }, + "vm:301" : { + "vm:302" : 1, + "vm:303" : 1 + }, + "vm:302" : { + "vm:301" : 1, + "vm:303" : 1 + }, + "vm:303" : { + "vm:301" : 1, + "vm:302" : 1 + }, + "vm:401" : { + "vm:402" : 1, + "vm:403" : 1, + "vm:404" : 1 + }, + "vm:402" : { + "vm:401" : 1, + "vm:403" : 1, + "vm:404" : 1 + }, + "vm:403" : { + "vm:401" : 1, + "vm:402" : 1, + "vm:404" : 1 + }, + "vm:404" : { + "vm:401" : 1, + "vm:402" : 1, + "vm:403" : 1 + } + } + } +} diff --git a/src/test/rules_cfgs/merge-and-infer-implicit-negative-resource-affinity-rules.cfg.expect b/src/test/rules_cfgs/merge-and-infer-implicit-negative-resource-affinity-rules.cfg.expect index 0002dc2a..98c8079a 100644 --- a/src/test/rules_cfgs/merge-and-infer-implicit-negative-resource-affinity-rules.cfg.expect +++ b/src/test/rules_cfgs/merge-and-infer-implicit-negative-resource-affinity-rules.cfg.expect @@ -71,3 +71,47 @@ "infer-connected-negative2" : 4 } } +--- Compiled Config --- +{ + "node-affinity" : {}, + "resource-affinity" : { + "negative" : { + "vm:101" : { + "vm:104" : 1, + "vm:105" : 1 + }, + "vm:102" : { + "vm:104" : 1, + "vm:105" : 1 + }, + "vm:103" : { + "vm:104" : 1, + "vm:105" : 1 + }, + "vm:104" : { + "vm:101" : 1, + "vm:102" : 1, + "vm:103" : 1 + }, + "vm:105" : { + "vm:101" : 1, + "vm:102" : 1, + "vm:103" : 1 + } + }, + "positive" : { + "vm:101" : { + "vm:102" : 1, + "vm:103" : 1 + }, + "vm:102" : { + "vm:101" : 1, + "vm:103" : 1 + }, + "vm:103" : { + "vm:101" : 1, + "vm:102" : 1 + } + } + } +} diff --git a/src/test/rules_cfgs/merge-connected-positive-resource-affinity-rules.cfg.expect b/src/test/rules_cfgs/merge-connected-positive-resource-affinity-rules.cfg.expect index 935a4f7c..07461626 100644 --- a/src/test/rules_cfgs/merge-connected-positive-resource-affinity-rules.cfg.expect +++ b/src/test/rules_cfgs/merge-connected-positive-resource-affinity-rules.cfg.expect @@ -68,3 +68,131 @@ "do-not-merge-positive2" : 5 } } +--- Compiled Config --- +{ + "node-affinity" : {}, + "resource-affinity" : { + "negative" : { + "vm:101" : { + "vm:102" : 1 + }, + "vm:102" : { + "vm:101" : 1, + "vm:103" : 1 + }, + "vm:103" : { + "vm:102" : 1 + }, + "vm:104" : { + "vm:105" : 1 + }, + "vm:105" : { + "vm:104" : 1 + } + }, + "positive" : { + "vm:201" : { + "vm:202" : 1 + }, + "vm:202" : { + "vm:201" : 1 + }, + "vm:203" : { + "vm:204" : 1 + }, + "vm:204" : { + "vm:203" : 1 + }, + "vm:301" : { + "vm:302" : 1, + "vm:303" : 1, + "vm:304" : 1, + "vm:305" : 1, + "vm:306" : 1, + "vm:307" : 1, + "vm:308" : 1, + "vm:309" : 1 + }, + "vm:302" : { + "vm:301" : 1, + "vm:303" : 1, + "vm:304" : 1, + "vm:305" : 1, + "vm:306" : 1, + "vm:307" : 1, + "vm:308" : 1, + "vm:309" : 1 + }, + "vm:303" : { + "vm:301" : 1, + "vm:302" : 1, + "vm:304" : 1, + "vm:305" : 1, + "vm:306" : 1, + "vm:307" : 1, + "vm:308" : 1, + "vm:309" : 1 + }, + "vm:304" : { + "vm:301" : 1, + "vm:302" : 1, + "vm:303" : 1, + "vm:305" : 1, + "vm:306" : 1, + "vm:307" : 1, + "vm:308" : 1, + "vm:309" : 1 + }, + "vm:305" : { + "vm:301" : 1, + "vm:302" : 1, + "vm:303" : 1, + "vm:304" : 1, + "vm:306" : 1, + "vm:307" : 1, + "vm:308" : 1, + "vm:309" : 1 + }, + "vm:306" : { + "vm:301" : 1, + "vm:302" : 1, + "vm:303" : 1, + "vm:304" : 1, + "vm:305" : 1, + "vm:307" : 1, + "vm:308" : 1, + "vm:309" : 1 + }, + "vm:307" : { + "vm:301" : 1, + "vm:302" : 1, + "vm:303" : 1, + "vm:304" : 1, + "vm:305" : 1, + "vm:306" : 1, + "vm:308" : 1, + "vm:309" : 1 + }, + "vm:308" : { + "vm:301" : 1, + "vm:302" : 1, + "vm:303" : 1, + "vm:304" : 1, + "vm:305" : 1, + "vm:306" : 1, + "vm:307" : 1, + "vm:309" : 1 + }, + "vm:309" : { + "vm:301" : 1, + "vm:302" : 1, + "vm:303" : 1, + "vm:304" : 1, + "vm:305" : 1, + "vm:306" : 1, + "vm:307" : 1, + "vm:308" : 1 + } + } + } +} diff --git a/src/test/rules_cfgs/multi-priority-node-affinity-with-resource-affinity-rules.cfg.expect b/src/test/rules_cfgs/multi-priority-node-affinity-with-resource-affinity-rules.cfg.expect index e2d5ee00..68a2b75f 100644 --- a/src/test/rules_cfgs/multi-priority-node-affinity-with-resource-affinity-rules.cfg.expect +++ b/src/test/rules_cfgs/multi-priority-node-affinity-with-resource-affinity-rules.cfg.expect @@ -46,3 +46,33 @@ Drop rule 'vm201-vm202-must-be-on-node1-or-node2', because resources are in a re "vm302-must-be-on-node2-with-prio-2" : 6 } } +--- Compiled Config --- +{ + "node-affinity" : { + "vm:301" : { + "nodes" : { + "node1" : { + "priority" : 1 + } + } + }, + "vm:302" : { + "nodes" : { + "node2" : { + "priority" : 2 + } + } + } + }, + "resource-affinity" : { + "negative" : { + "vm:301" : { + "vm:302" : 1 + }, + "vm:302" : { + "vm:301" : 1 + } + }, + "positive" : {} + } +} diff --git a/src/test/rules_cfgs/multiple-resource-refs-in-node-affinity-rules.cfg.expect b/src/test/rules_cfgs/multiple-resource-refs-in-node-affinity-rules.cfg.expect index 30633d8c..425de2b1 100644 --- a/src/test/rules_cfgs/multiple-resource-refs-in-node-affinity-rules.cfg.expect +++ b/src/test/rules_cfgs/multiple-resource-refs-in-node-affinity-rules.cfg.expect @@ -61,3 +61,87 @@ Drop rule 'same-resource3', because resource 'vm:201' is already used in another "no-same-resource3" : 3 } } +--- Compiled Config --- +{ + "node-affinity" : { + "vm:101" : { + "nodes" : { + "node1" : { + "priority" : 0 + }, + "node2" : { + "priority" : 2 + }, + "node3" : { + "priority" : -1 + } + } + }, + "vm:102" : { + "nodes" : { + "node1" : { + "priority" : 0 + }, + "node2" : { + "priority" : 2 + }, + "node3" : { + "priority" : -1 + } + } + }, + "vm:103" : { + "nodes" : { + "node1" : { + "priority" : 0 + }, + "node2" : { + "priority" : 2 + }, + "node3" : { + "priority" : -1 + } + } + }, + "vm:104" : { + "nodes" : { + "node1" : { + "priority" : 0 + }, + "node2" : { + "priority" : 2 + }, + "node3" : { + "priority" : -1 + } + } + }, + "vm:105" : { + "nodes" : { + "node1" : { + "priority" : 0 + }, + "node2" : { + "priority" : 2 + }, + "node3" : { + "priority" : -1 + } + } + }, + "vm:106" : { + "nodes" : { + "node1" : { + "priority" : 0 + }, + "node2" : { + "priority" : 2 + } + } + } + }, + "resource-affinity" : { + "negative" : {}, + "positive" : {} + } +} diff --git a/src/test/test_rules_config.pl b/src/test/test_rules_config.pl index edfcb3b7..f0792ff9 100755 --- a/src/test/test_rules_config.pl +++ b/src/test/test_rules_config.pl @@ -54,9 +54,12 @@ sub check_cfg { my $cfg = PVE::HA::Rules->parse_config($cfg_fn, $raw); PVE::HA::Rules->set_rule_defaults($_) for values %{ $cfg->{ids} }; my $messages = PVE::HA::Rules->transform($cfg, $nodes); + my $compiled_cfg = PVE::HA::Rules->compile($cfg, $nodes); print $_ for @$messages; print "--- Config ---\n"; print to_json($cfg, { canonical => 1, pretty => 1, utf8 => 1 }); + print "--- Compiled Config ---\n"; + print to_json($compiled_cfg, { canonical => 1, pretty => 1, utf8 => 1 }); select(STDOUT); } -- 2.47.2 _______________________________________________ pve-devel mailing list pve-devel@lists.proxmox.com https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel