I've skipped the revision count from v3 to v5 for this series, so it's in sync with the core HA rules patch series.
These patches have also been tested by @Michael, @Hannes Duerr and me. Changelog to v3 --------------- - rebased on newest available master - restricted ha rules so that a ha resource can only be referenced by either a single node affinity rule (this is already done in the core ha rules series since v3) or resource affinity rules, but not both at the same time [0] - the rules config test cases added in this series have been altered to accomodate for the change above - the documentation changes suggested by @Shannon have been added [0] that change was done rather prematurely, and I'll try to still work on a follow up series which will add support for the basic case, which should infer that a single node affinity rule for a ha resource already specified in a positive resource affinity rule will also apply for the other ha resources; AFAICT negative resource affinity rules should also be lifted of the restriction and do not need any inference ha-manager: Daniel Kral (14): introduce PVE::HA::HashTools module rules: introduce plugin-specific canonicalize routines rules: add haenv node list to the rules' canonicalization stage rules: introduce resource affinity rule plugin rules: add global checks between node and resource affinity rules usage: add information about a service's assigned nodes manager: apply resource affinity rules when selecting service nodes manager: handle resource affinity rules in manual migrations sim: resources: add option to limit start and migrate tries to node test: ha tester: add test cases for negative resource affinity rules test: ha tester: add test cases for positive resource affinity rules test: ha tester: add test cases for static scheduler resource affinity test: rules: add test cases for resource affinity rules api: resources: add check for resource affinity in resource migrations debian/pve-ha-manager.install | 2 + src/PVE/API2/HA/Resources.pm | 128 +++- src/PVE/API2/HA/Rules.pm | 5 +- src/PVE/CLI/ha_manager.pm | 52 +- src/PVE/HA/Config.pm | 56 ++ src/PVE/HA/Env/PVE2.pm | 2 + src/PVE/HA/HashTools.pm | 90 +++ src/PVE/HA/Makefile | 4 +- src/PVE/HA/Manager.pm | 73 +- src/PVE/HA/Rules.pm | 109 ++- src/PVE/HA/Rules/Makefile | 2 +- src/PVE/HA/Rules/ResourceAffinity.pm | 642 ++++++++++++++++++ src/PVE/HA/Sim/Env.pm | 2 + src/PVE/HA/Sim/Resources/VirtFail.pm | 28 +- src/PVE/HA/Usage.pm | 18 + src/PVE/HA/Usage/Basic.pm | 19 + src/PVE/HA/Usage/Static.pm | 19 + .../defaults-for-resource-affinity-rules.cfg | 16 + ...lts-for-resource-affinity-rules.cfg.expect | 38 ++ .../inconsistent-resource-affinity-rules.cfg | 11 + ...sistent-resource-affinity-rules.cfg.expect | 11 + ...ctive-negative-resource-affinity-rules.cfg | 17 + ...egative-resource-affinity-rules.cfg.expect | 30 + .../ineffective-resource-affinity-rules.cfg | 8 + ...fective-resource-affinity-rules.cfg.expect | 9 + ...licit-negative-resource-affinity-rules.cfg | 40 ++ ...egative-resource-affinity-rules.cfg.expect | 131 ++++ ...licit-negative-resource-affinity-rules.cfg | 16 + ...egative-resource-affinity-rules.cfg.expect | 73 ++ ...ected-positive-resource-affinity-rules.cfg | 42 ++ ...ositive-resource-affinity-rules.cfg.expect | 70 ++ .../multiple-resource-refs-in-rules.cfg | 52 ++ ...multiple-resource-refs-in-rules.cfg.expect | 111 +++ .../README | 26 + .../cmdlist | 4 + .../datacenter.cfg | 6 + .../hardware_status | 5 + .../log.expect | 120 ++++ .../manager_status | 1 + .../rules_config | 19 + .../service_config | 10 + .../static_service_stats | 10 + .../README | 20 + .../cmdlist | 4 + .../datacenter.cfg | 6 + .../hardware_status | 5 + .../log.expect | 174 +++++ .../manager_status | 1 + .../rules_config | 11 + .../service_config | 14 + .../static_service_stats | 14 + .../README | 22 + .../cmdlist | 22 + .../datacenter.cfg | 6 + .../hardware_status | 7 + .../log.expect | 272 ++++++++ .../manager_status | 1 + .../rules_config | 3 + .../service_config | 9 + .../static_service_stats | 9 + .../README | 13 + .../cmdlist | 4 + .../hardware_status | 5 + .../log.expect | 60 ++ .../manager_status | 1 + .../rules_config | 3 + .../service_config | 6 + .../README | 15 + .../cmdlist | 4 + .../hardware_status | 7 + .../log.expect | 90 +++ .../manager_status | 1 + .../rules_config | 3 + .../service_config | 10 + .../README | 16 + .../cmdlist | 4 + .../hardware_status | 7 + .../log.expect | 110 +++ .../manager_status | 1 + .../rules_config | 3 + .../service_config | 10 + .../README | 18 + .../cmdlist | 4 + .../hardware_status | 5 + .../log.expect | 69 ++ .../manager_status | 1 + .../rules_config | 3 + .../service_config | 6 + .../README | 11 + .../cmdlist | 4 + .../hardware_status | 5 + .../log.expect | 56 ++ .../manager_status | 1 + .../rules_config | 7 + .../service_config | 5 + .../README | 18 + .../cmdlist | 4 + .../hardware_status | 5 + .../log.expect | 69 ++ .../manager_status | 1 + .../rules_config | 3 + .../service_config | 6 + .../README | 15 + .../cmdlist | 5 + .../hardware_status | 5 + .../log.expect | 52 ++ .../manager_status | 1 + .../rules_config | 3 + .../service_config | 4 + .../README | 12 + .../cmdlist | 4 + .../hardware_status | 5 + .../log.expect | 38 ++ .../manager_status | 1 + .../rules_config | 3 + .../service_config | 5 + .../README | 12 + .../cmdlist | 4 + .../hardware_status | 5 + .../log.expect | 66 ++ .../manager_status | 1 + .../rules_config | 3 + .../service_config | 6 + .../README | 11 + .../cmdlist | 4 + .../hardware_status | 5 + .../log.expect | 80 +++ .../manager_status | 1 + .../rules_config | 3 + .../service_config | 8 + .../README | 17 + .../cmdlist | 4 + .../hardware_status | 5 + .../log.expect | 89 +++ .../manager_status | 1 + .../rules_config | 3 + .../service_config | 8 + .../README | 11 + .../cmdlist | 4 + .../hardware_status | 5 + .../log.expect | 59 ++ .../manager_status | 1 + .../rules_config | 3 + .../service_config | 5 + .../README | 19 + .../cmdlist | 8 + .../hardware_status | 5 + .../log.expect | 281 ++++++++ .../manager_status | 1 + .../rules_config | 15 + .../service_config | 11 + src/test/test_rules_config.pl | 6 +- 152 files changed, 4287 insertions(+), 37 deletions(-) create mode 100644 src/PVE/HA/HashTools.pm create mode 100644 src/PVE/HA/Rules/ResourceAffinity.pm create mode 100644 src/test/rules_cfgs/defaults-for-resource-affinity-rules.cfg create mode 100644 src/test/rules_cfgs/defaults-for-resource-affinity-rules.cfg.expect create mode 100644 src/test/rules_cfgs/inconsistent-resource-affinity-rules.cfg create mode 100644 src/test/rules_cfgs/inconsistent-resource-affinity-rules.cfg.expect create mode 100644 src/test/rules_cfgs/ineffective-negative-resource-affinity-rules.cfg create mode 100644 src/test/rules_cfgs/ineffective-negative-resource-affinity-rules.cfg.expect create mode 100644 src/test/rules_cfgs/ineffective-resource-affinity-rules.cfg create mode 100644 src/test/rules_cfgs/ineffective-resource-affinity-rules.cfg.expect create mode 100644 src/test/rules_cfgs/infer-implicit-negative-resource-affinity-rules.cfg create mode 100644 src/test/rules_cfgs/infer-implicit-negative-resource-affinity-rules.cfg.expect create mode 100644 src/test/rules_cfgs/merge-and-infer-implicit-negative-resource-affinity-rules.cfg create mode 100644 src/test/rules_cfgs/merge-and-infer-implicit-negative-resource-affinity-rules.cfg.expect create mode 100644 src/test/rules_cfgs/merge-connected-positive-resource-affinity-rules.cfg create mode 100644 src/test/rules_cfgs/merge-connected-positive-resource-affinity-rules.cfg.expect create mode 100644 src/test/rules_cfgs/multiple-resource-refs-in-rules.cfg create mode 100644 src/test/rules_cfgs/multiple-resource-refs-in-rules.cfg.expect create mode 100644 src/test/test-crs-static-rebalance-resource-affinity1/README create mode 100644 src/test/test-crs-static-rebalance-resource-affinity1/cmdlist create mode 100644 src/test/test-crs-static-rebalance-resource-affinity1/datacenter.cfg create mode 100644 src/test/test-crs-static-rebalance-resource-affinity1/hardware_status create mode 100644 src/test/test-crs-static-rebalance-resource-affinity1/log.expect create mode 100644 src/test/test-crs-static-rebalance-resource-affinity1/manager_status create mode 100644 src/test/test-crs-static-rebalance-resource-affinity1/rules_config create mode 100644 src/test/test-crs-static-rebalance-resource-affinity1/service_config create mode 100644 src/test/test-crs-static-rebalance-resource-affinity1/static_service_stats create mode 100644 src/test/test-crs-static-rebalance-resource-affinity2/README create mode 100644 src/test/test-crs-static-rebalance-resource-affinity2/cmdlist create mode 100644 src/test/test-crs-static-rebalance-resource-affinity2/datacenter.cfg create mode 100644 src/test/test-crs-static-rebalance-resource-affinity2/hardware_status create mode 100644 src/test/test-crs-static-rebalance-resource-affinity2/log.expect create mode 100644 src/test/test-crs-static-rebalance-resource-affinity2/manager_status create mode 100644 src/test/test-crs-static-rebalance-resource-affinity2/rules_config create mode 100644 src/test/test-crs-static-rebalance-resource-affinity2/service_config create mode 100644 src/test/test-crs-static-rebalance-resource-affinity2/static_service_stats create mode 100644 src/test/test-crs-static-rebalance-resource-affinity3/README create mode 100644 src/test/test-crs-static-rebalance-resource-affinity3/cmdlist create mode 100644 src/test/test-crs-static-rebalance-resource-affinity3/datacenter.cfg create mode 100644 src/test/test-crs-static-rebalance-resource-affinity3/hardware_status create mode 100644 src/test/test-crs-static-rebalance-resource-affinity3/log.expect create mode 100644 src/test/test-crs-static-rebalance-resource-affinity3/manager_status create mode 100644 src/test/test-crs-static-rebalance-resource-affinity3/rules_config create mode 100644 src/test/test-crs-static-rebalance-resource-affinity3/service_config create mode 100644 src/test/test-crs-static-rebalance-resource-affinity3/static_service_stats create mode 100644 src/test/test-resource-affinity-strict-negative1/README create mode 100644 src/test/test-resource-affinity-strict-negative1/cmdlist create mode 100644 src/test/test-resource-affinity-strict-negative1/hardware_status create mode 100644 src/test/test-resource-affinity-strict-negative1/log.expect create mode 100644 src/test/test-resource-affinity-strict-negative1/manager_status create mode 100644 src/test/test-resource-affinity-strict-negative1/rules_config create mode 100644 src/test/test-resource-affinity-strict-negative1/service_config create mode 100644 src/test/test-resource-affinity-strict-negative2/README create mode 100644 src/test/test-resource-affinity-strict-negative2/cmdlist create mode 100644 src/test/test-resource-affinity-strict-negative2/hardware_status create mode 100644 src/test/test-resource-affinity-strict-negative2/log.expect create mode 100644 src/test/test-resource-affinity-strict-negative2/manager_status create mode 100644 src/test/test-resource-affinity-strict-negative2/rules_config create mode 100644 src/test/test-resource-affinity-strict-negative2/service_config create mode 100644 src/test/test-resource-affinity-strict-negative3/README create mode 100644 src/test/test-resource-affinity-strict-negative3/cmdlist create mode 100644 src/test/test-resource-affinity-strict-negative3/hardware_status create mode 100644 src/test/test-resource-affinity-strict-negative3/log.expect create mode 100644 src/test/test-resource-affinity-strict-negative3/manager_status create mode 100644 src/test/test-resource-affinity-strict-negative3/rules_config create mode 100644 src/test/test-resource-affinity-strict-negative3/service_config create mode 100644 src/test/test-resource-affinity-strict-negative4/README create mode 100644 src/test/test-resource-affinity-strict-negative4/cmdlist create mode 100644 src/test/test-resource-affinity-strict-negative4/hardware_status create mode 100644 src/test/test-resource-affinity-strict-negative4/log.expect create mode 100644 src/test/test-resource-affinity-strict-negative4/manager_status create mode 100644 src/test/test-resource-affinity-strict-negative4/rules_config create mode 100644 src/test/test-resource-affinity-strict-negative4/service_config create mode 100644 src/test/test-resource-affinity-strict-negative5/README create mode 100644 src/test/test-resource-affinity-strict-negative5/cmdlist create mode 100644 src/test/test-resource-affinity-strict-negative5/hardware_status create mode 100644 src/test/test-resource-affinity-strict-negative5/log.expect create mode 100644 src/test/test-resource-affinity-strict-negative5/manager_status create mode 100644 src/test/test-resource-affinity-strict-negative5/rules_config create mode 100644 src/test/test-resource-affinity-strict-negative5/service_config create mode 100644 src/test/test-resource-affinity-strict-negative6/README create mode 100644 src/test/test-resource-affinity-strict-negative6/cmdlist create mode 100644 src/test/test-resource-affinity-strict-negative6/hardware_status create mode 100644 src/test/test-resource-affinity-strict-negative6/log.expect create mode 100644 src/test/test-resource-affinity-strict-negative6/manager_status create mode 100644 src/test/test-resource-affinity-strict-negative6/rules_config create mode 100644 src/test/test-resource-affinity-strict-negative6/service_config create mode 100644 src/test/test-resource-affinity-strict-negative7/README create mode 100644 src/test/test-resource-affinity-strict-negative7/cmdlist create mode 100644 src/test/test-resource-affinity-strict-negative7/hardware_status create mode 100644 src/test/test-resource-affinity-strict-negative7/log.expect create mode 100644 src/test/test-resource-affinity-strict-negative7/manager_status create mode 100644 src/test/test-resource-affinity-strict-negative7/rules_config create mode 100644 src/test/test-resource-affinity-strict-negative7/service_config create mode 100644 src/test/test-resource-affinity-strict-negative8/README create mode 100644 src/test/test-resource-affinity-strict-negative8/cmdlist create mode 100644 src/test/test-resource-affinity-strict-negative8/hardware_status create mode 100644 src/test/test-resource-affinity-strict-negative8/log.expect create mode 100644 src/test/test-resource-affinity-strict-negative8/manager_status create mode 100644 src/test/test-resource-affinity-strict-negative8/rules_config create mode 100644 src/test/test-resource-affinity-strict-negative8/service_config create mode 100644 src/test/test-resource-affinity-strict-positive1/README create mode 100644 src/test/test-resource-affinity-strict-positive1/cmdlist create mode 100644 src/test/test-resource-affinity-strict-positive1/hardware_status create mode 100644 src/test/test-resource-affinity-strict-positive1/log.expect create mode 100644 src/test/test-resource-affinity-strict-positive1/manager_status create mode 100644 src/test/test-resource-affinity-strict-positive1/rules_config create mode 100644 src/test/test-resource-affinity-strict-positive1/service_config create mode 100644 src/test/test-resource-affinity-strict-positive2/README create mode 100644 src/test/test-resource-affinity-strict-positive2/cmdlist create mode 100644 src/test/test-resource-affinity-strict-positive2/hardware_status create mode 100644 src/test/test-resource-affinity-strict-positive2/log.expect create mode 100644 src/test/test-resource-affinity-strict-positive2/manager_status create mode 100644 src/test/test-resource-affinity-strict-positive2/rules_config create mode 100644 src/test/test-resource-affinity-strict-positive2/service_config create mode 100644 src/test/test-resource-affinity-strict-positive3/README create mode 100644 src/test/test-resource-affinity-strict-positive3/cmdlist create mode 100644 src/test/test-resource-affinity-strict-positive3/hardware_status create mode 100644 src/test/test-resource-affinity-strict-positive3/log.expect create mode 100644 src/test/test-resource-affinity-strict-positive3/manager_status create mode 100644 src/test/test-resource-affinity-strict-positive3/rules_config create mode 100644 src/test/test-resource-affinity-strict-positive3/service_config create mode 100644 src/test/test-resource-affinity-strict-positive4/README create mode 100644 src/test/test-resource-affinity-strict-positive4/cmdlist create mode 100644 src/test/test-resource-affinity-strict-positive4/hardware_status create mode 100644 src/test/test-resource-affinity-strict-positive4/log.expect create mode 100644 src/test/test-resource-affinity-strict-positive4/manager_status create mode 100644 src/test/test-resource-affinity-strict-positive4/rules_config create mode 100644 src/test/test-resource-affinity-strict-positive4/service_config create mode 100644 src/test/test-resource-affinity-strict-positive5/README create mode 100644 src/test/test-resource-affinity-strict-positive5/cmdlist create mode 100644 src/test/test-resource-affinity-strict-positive5/hardware_status create mode 100644 src/test/test-resource-affinity-strict-positive5/log.expect create mode 100644 src/test/test-resource-affinity-strict-positive5/manager_status create mode 100644 src/test/test-resource-affinity-strict-positive5/rules_config create mode 100644 src/test/test-resource-affinity-strict-positive5/service_config docs: Daniel Kral (1): ha: add documentation about ha resource affinity rules Makefile | 1 + gen-ha-rules-resource-affinity-opts.pl | 20 +++++ ha-manager.adoc | 116 +++++++++++++++++++++++++ ha-rules-resource-affinity-opts.adoc | 8 ++ 4 files changed, 145 insertions(+) create mode 100755 gen-ha-rules-resource-affinity-opts.pl create mode 100644 ha-rules-resource-affinity-opts.adoc base-commit: c7e7bc11c3ad7c9c2cb7fb5a146b2656d684d1b2 manager: Daniel Kral (3): ui: ha: rules: add ha resource affinity rules ui: migrate: lxc: display precondition messages for ha resource affinity ui: migrate: vm: display precondition messages for ha resource affinity www/manager6/Makefile | 2 + www/manager6/ha/Rules.js | 12 ++ .../ha/rules/ResourceAffinityRuleEdit.js | 24 ++++ .../ha/rules/ResourceAffinityRules.js | 31 +++++ www/manager6/window/Migrate.js | 131 +++++++++++++++++- 5 files changed, 197 insertions(+), 3 deletions(-) create mode 100644 www/manager6/ha/rules/ResourceAffinityRuleEdit.js create mode 100644 www/manager6/ha/rules/ResourceAffinityRules.js pve-container: Daniel Kral (1): api: introduce migration preconditions api endpoint src/PVE/API2/LXC.pm | 141 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 141 insertions(+) qemu-server: Daniel Kral (1): api: migration preconditions: add checks for ha resource affinity rules src/PVE/API2/Qemu.pm | 49 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) Summary over all repositories: 163 files changed, 4819 insertions(+), 40 deletions(-) -- Generated by git-murpp 0.8.0 _______________________________________________ pve-devel mailing list pve-devel@lists.proxmox.com https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel