From: Daniel Kral <d.kral@proxmox.com>
To: pve-devel@lists.proxmox.com
Subject: [PATCH-SERIES container/ha-manager/manager/qemu-server v3 00/17] HA node affinity blockers (#1497)
Date: Mon, 11 May 2026 11:46:21 +0200 [thread overview]
Message-ID: <20260511094707.142930-1-d.kral@proxmox.com> (raw)
v1: https://lore.proxmox.com/pve-devel/20251215155334.476984-1-d.kral@proxmox.com/
v2: https://lore.proxmox.com/pve-devel/20260120152755.499037-1-d.kral@proxmox.com/
Changes v2 -> v3:
- rebase on master (relevant: {dis,}arm-ha and load balancer)
- add 'fix #1497' prefix to relevant patches
- add patch to make service config hash global and remove a duplicate
service config read from the Manager class
Changes v1 -> v2 (Thanks @Fiona!):
- rebase on master
- fix initial node assignments in test case descriptions
- make get_resource_motion_info(...) only read files once (introducing 3
additional patches)
Tested changes with strict & non-strict HA node affinity rules and manual
migrations (in the CLI & web interface) as well as failback set and
cleared and ran `git rebase master --exec 'make clean && make deb' and
`make tidy` on all repositories.
If pve-ha-manager is applied but not the other packages, it might show
that the HA resource cannot be moved because of resource affinity rules,
which is wrong though. So it might be nice to have a version bump here.
This patch series implements node affinity rule migration blockers
similar to the blockers introduced with resource affinity rules.
The node affinity rule migraton blockers prevent users from migrating HA
resources to nodes, which would make them migrate somewhere else
immediately afterwards. This includes:
- online nodes, which are not part of the strict node affinity rule's
allowed node set at all, or
- if the HA resource has failback set, online nodes, which are not in the
currently highest priority group of the strict or non-strict node
affinity rule.
The first few patches are some overall cleanup for things the series
touches + deduplicating the resource_motion_info logic and sharing it
between the Manager and the public
PVE::HA::Config::get_resource_motion_info(...), as well as exposing these
in the relevant VM/LXC API handlers and web interface.
ha-manager:
Daniel Kral (14):
ha: put source files on individual new lines
d/pve-ha-manager.install: remove duplicate Config.pm
config: group and sort use statements
manager: group and sort use statements
manager: report all reasons when resources are blocked from migration
config, manager: factor out resource motion info logic
tests: add test cases for migrating resources with node affinity rules
fix #1497: handle strict node affinity rules in manual migrations
config: improve variable names in read_and_check_resources_config
config: factor out checked_resources_config helper
manager: store global reference to service config hash
manager: remove duplicate service config read in update_crm_commands
fix #1497: handle node affinity rules with failback in manual
migrations
config: remove duplicate config reads in get_resource_motion_info
debian/pve-ha-manager.install | 2 +-
src/PVE/API2/HA/Resources.pm | 4 +-
src/PVE/CLI/ha_manager.pm | 14 +--
src/PVE/HA/Config.pm | 88 ++++++++-----------
src/PVE/HA/Helpers.pm | 63 +++++++++++++
src/PVE/HA/Makefile | 16 +++-
src/PVE/HA/Manager.pm | 72 ++++++++-------
.../test-node-affinity-nonstrict1/log.expect | 16 +---
src/test/test-node-affinity-nonstrict7/README | 9 ++
.../test-node-affinity-nonstrict7/cmdlist | 9 ++
.../hardware_status | 5 ++
.../test-node-affinity-nonstrict7/log.expect | 65 ++++++++++++++
.../manager_status | 1 +
.../rules_config | 7 ++
.../service_config | 4 +
.../test-node-affinity-strict1/log.expect | 16 +---
.../test-node-affinity-strict2/log.expect | 16 +---
src/test/test-node-affinity-strict7/README | 9 ++
src/test/test-node-affinity-strict7/cmdlist | 9 ++
.../hardware_status | 5 ++
.../test-node-affinity-strict7/log.expect | 51 +++++++++++
.../test-node-affinity-strict7/manager_status | 1 +
.../test-node-affinity-strict7/rules_config | 9 ++
.../test-node-affinity-strict7/service_config | 4 +
src/test/test-recovery4/log.expect | 2 +-
25 files changed, 355 insertions(+), 142 deletions(-)
create mode 100644 src/PVE/HA/Helpers.pm
create mode 100644 src/test/test-node-affinity-nonstrict7/README
create mode 100644 src/test/test-node-affinity-nonstrict7/cmdlist
create mode 100644 src/test/test-node-affinity-nonstrict7/hardware_status
create mode 100644 src/test/test-node-affinity-nonstrict7/log.expect
create mode 100644 src/test/test-node-affinity-nonstrict7/manager_status
create mode 100644 src/test/test-node-affinity-nonstrict7/rules_config
create mode 100644 src/test/test-node-affinity-nonstrict7/service_config
create mode 100644 src/test/test-node-affinity-strict7/README
create mode 100644 src/test/test-node-affinity-strict7/cmdlist
create mode 100644 src/test/test-node-affinity-strict7/hardware_status
create mode 100644 src/test/test-node-affinity-strict7/log.expect
create mode 100644 src/test/test-node-affinity-strict7/manager_status
create mode 100644 src/test/test-node-affinity-strict7/rules_config
create mode 100644 src/test/test-node-affinity-strict7/service_config
qemu-server:
Daniel Kral (1):
api: migration preconditions: add node affinity as blocking cause
src/PVE/API2/Qemu.pm | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
container:
Daniel Kral (1):
api: migration preconditions: add node affinity as blocking cause
src/PVE/API2/LXC.pm | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
manager:
Daniel Kral (1):
ui: migrate: display precondition messages for ha node affinity
www/manager6/window/Migrate.js | 10 ++++++++++
1 file changed, 10 insertions(+)
Summary over all repositories:
28 files changed, 367 insertions(+), 144 deletions(-)
--
Generated by murpp 0.11.0
next reply other threads:[~2026-05-11 9:49 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-05-11 9:46 Daniel Kral [this message]
2026-05-11 9:46 ` [PATCH ha-manager v3 01/17] ha: put source files on individual new lines Daniel Kral
2026-05-11 9:46 ` [PATCH ha-manager v3 02/17] d/pve-ha-manager.install: remove duplicate Config.pm Daniel Kral
2026-05-11 9:46 ` [PATCH ha-manager v3 03/17] config: group and sort use statements Daniel Kral
2026-05-11 9:46 ` [PATCH ha-manager v3 04/17] manager: " Daniel Kral
2026-05-11 9:46 ` [PATCH ha-manager v3 05/17] manager: report all reasons when resources are blocked from migration Daniel Kral
2026-05-11 9:46 ` [PATCH ha-manager v3 06/17] config, manager: factor out resource motion info logic Daniel Kral
2026-05-11 9:46 ` [PATCH ha-manager v3 07/17] tests: add test cases for migrating resources with node affinity rules Daniel Kral
2026-05-11 9:46 ` [PATCH ha-manager v3 08/17] fix #1497: handle strict node affinity rules in manual migrations Daniel Kral
2026-05-11 9:46 ` [PATCH ha-manager v3 09/17] config: improve variable names in read_and_check_resources_config Daniel Kral
2026-05-11 9:46 ` [PATCH ha-manager v3 10/17] config: factor out checked_resources_config helper Daniel Kral
2026-05-11 9:46 ` [PATCH ha-manager v3 11/17] manager: store global reference to service config hash Daniel Kral
2026-05-11 9:46 ` [PATCH ha-manager v3 12/17] manager: remove duplicate service config read in update_crm_commands Daniel Kral
2026-05-11 9:46 ` [PATCH ha-manager v3 13/17] fix #1497: handle node affinity rules with failback in manual migrations Daniel Kral
2026-05-11 9:46 ` [PATCH ha-manager v3 14/17] config: remove duplicate config reads in get_resource_motion_info Daniel Kral
2026-05-11 9:46 ` [PATCH qemu-server v3 15/17] api: migration preconditions: add node affinity as blocking cause Daniel Kral
2026-05-11 9:46 ` [PATCH container v3 16/17] " Daniel Kral
2026-05-11 9:46 ` [PATCH manager v3 17/17] ui: migrate: display precondition messages for ha node affinity Daniel Kral
2026-05-15 4:51 ` applied: [PATCH-SERIES container/ha-manager/manager/qemu-server v3 00/17] HA node affinity blockers (#1497) Thomas Lamprecht
2026-05-15 5:04 ` 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=20260511094707.142930-1-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