[pve-devel] [RFC common/cluster/ha-manager/docs/manager v2 00/40] HA colocation rules
Daniel Kral
d.kral at proxmox.com
Fri Jun 20 16:31:08 CEST 2025
This is a follow-up to the previous RFC patch series for the HA
colocation rules feature, which allow users to specify colocation rules
(or affinity/anti-affinity) for the HA Manager, so that two or more
services are either kept together or apart with respect to each other.
Changelog
---------
I've added per-patch changelogs for patches that have been changed, but
here's a better overview about the overall changes since the RFC:
- rebased to master and formatted with proxmox-{perltidy,biome}
- implemented the API/CLI endpoints and web interface integration for HA
rules
- added user-facing documentation about HA rules
- implemented HA location rules as semantically equivalent replacements
to HA groups (with the addition that the 'nofailback' flag was moved
to HA services as an inverted 'failback' to remove the double negation)
- implemented a "use-location-rules" feature flag in the datacenter
config to allow users to upgrade to the feature on their own
- dropped the 'loose' colocation rules for now, as these can be a
separate feature and it's unsure how these should act without user
feedback (there are a few special cases where non-strict colocation
rules could result in cycles or infinite back-and-forward migrations;
these should be easy to resolve with some introduced state, but that
would put unnecessary complexity in an initial implementation); i have
them implemented in a separate tree with not a lot of changes in
between these patches here, so they are easy to rebase as a follow-up
patch series
- moved global rule checkers to the base rules plugin and made them
more modular and aware of their own plugin-specific rule set
- fixed a race condition where positively colocated services are split
and stay on multiple nodes (e.g. when the rule has been newly added
and the services are on different nodes) -> selects the node where
most of the pos. colocated service are now
- made the HA manager aware of the positive and negative colocations
when migrating, i.e., migrating other pos. colocated service with the
to-be-migrated service and blocking if a service is migrated to a node
where a neg. colocated service already is
- refactored the select_service_node(...) subroutine a bit to have less
arguments
TODO
----
There are some things left to be done or discussed for a proper patch
series:
- Implement check which does not allow negative colocation rules with
more services than nodes, because these cannot be applied. Or should
we just fail the remaining services which cannot be separated to any
node since these do not have anywhere to go?
- How can the migration process from HA groups to HA location rules be
improved? Add a 'Migrate' button to the HA Groups page and then
auto-toggle the use-location-rules feature flag? Should the
use-location-rules feature flag even be user-toggleable?
- Add web interface and/or CLI facing messages about the HA service
migration blockers and side-effects. The rough idea would be like the
following (feedback highly appreciated!):
- For the web interface, I'd make these visible through the already
existing precondition checks (which need to also be added for
containers, as there is no existing API endpoint there).
Side-effects would be 'warning' items, which just state that some
positively colocated service is migrated with them (the 'Migrate'
button then is the confirmation for that). Blockers would be
'error' items, which state that a negatively colocated service is
on the requested target node and therefore the migration is
blocked because of that.
- For bulk migrations in the web interface, these are still visible
through the console that is popped up afterwards, which should
print the messages from the migrate/relocate crm-command API
endpoints.
- For the CLI, I'd add another 'force' flag or something similar. If
there are side-effects and the force flag is not set, then no
migration happens at all, but the user gets a list of the
migrations that will be done and should confirm by making another
call to 'migrate'/'relocate' with the force flag set to confirm
these choices.
- Add more user documentation (especially about conflicts, migrations,
restrictions and failover scenario handling)
- Add mixed test cases with HA location and HA colocation rules
------
Below is the updated initial cover letter of the first RFC.
------
I chose the name "colocation" in favor of affinity/anti-affinity, since
it is a bit more concise that it is about co-locating services between
each other in contrast to locating services on nodes, but no hard
feelings to change it (same for any other names in this series).
Many thanks to @Thomas, @Fiona, @Friedrich, @Fabian, @Lukas and @Hannes
Duerr for the discussions about this feature off-list!
Recap: HA groups
----------------
The HA Manager currently allows a service to be assigned to one HA
groups, which essentially implements an affinity to a set of nodes. This
affinity can either be unrestricted or restricted, where the first
allows recovery to nodes outside of the HA group's nodes, if those are
currently unavailable.
This allows users to constrain the set of nodes, that can be selected
from as the starting and/or recovery node. Furthermore, each node in a
HA group can have an individual priority. This further constraints the
set of possible recovery nodes to the subset of online nodes in the
highest priority group.
Introduction
------------
Colocation is the concept of an inter-service affinity relationship,
which can either be positive (keep services together) or negative (keep
services apart). This is in contrast with the service-nodes affinity
relationship implemented by HA groups.
Motivation
----------
There are many different use cases to support colocation, but two simple
examples that come to mind are:
- Two or more services need to communicate with each other very
frequently. To reduce the communication path length and therefore
hopefully the latency, keep them together on one node.
- Two or more services need a lot of computational resources and will
therefore consume much of the assigned node's resource capacity. To
reduce starving and memory stalls, keep them separate on multiple
nodes, so that they have enough resources for themselves.
And some more concrete use cases from current HA Manager users:
- "For example: let's say we have three DB VMs (DB nodes in a cluster)
which we want to run on ANY PVE host, but we don't want them to be on
the same host." [1]
- "An example is: When Server from the DMZ zone start on the same host
like the firewall or another example the application servers start on
the same host like the sql server. Services they depend on each other
have short latency to each other." [2]
HA Rules
--------
To implement colocation, this patch series introduces HA rules, which
allows users to specify the colocation requirements on services. These
are implemented with the widely used section config, where each type of
rule is a individual plugin (for now 'location' and 'colocation').
This introduces some small initial complexity for testing satisfiability
of the rules, but allows the constraint interface to be extensible, and
hopefully allow easier reasoning about the node selection process with
the added constraint rules in the future.
Colocation Rules
----------------
The two properties of colocation rules, as described in the
introduction, are rather straightforward. A typical colocation rule
inside of the config would look like the following:
colocation: some-lonely-services
services vm:101,vm:103,ct:909
affinity separate
This means that the three services vm:101, vm:103 and ct:909 must be
kept separate on different nodes. I'm very keen on naming suggestions
since I think there could be a better word than 'affinity' here. I
played around with 'keep-services', since then it would always read
something like 'keep-services separate', which is very declarative, but
this might suggest that this is a binary option to too much users (I
mean it is, but not with the values 0 and 1).
Feasibility and Inference
-------------------------
Since rules allow more complexity, it is necessary to check whether
rules are (1) feasible and (2) can be simplified, so that as many HA
rules can still be applied as are feasible.
| Feasibility
----------
The feasibility checks are implemented in PVE::HA::Rules::Location,
PVE::HA::Rules::Colocation, and PVE::HA::Rules, where the latter handles
global checks in between rule types.
| Canonicalization
----------
Additionally, colocation rules are currently simplified as follows:
- If there are multiple positive colocation rules with common services
and the same strictness, these are merged to a single positive
colocation rule (so it is easier to check which services are
positively colocated with a service).
This is implemented in PVE::HA::Rules::Colocation::plugin_canonicalize.
Special negative colocation scenarios
-------------------------------------
Just to be aware of these, there's a distinction between the following
two sets of negative colocation rules:
colocation: separate-vms
services vm:101,vm:102,vm:103
affinity separate
and
colocation: separate-vms1
services vm:101,vm:102
affinity separate
colocation: separate-vms2
services vm:102,vm:103
affinity separate
The first keeps all three services separate from each other, while the
second only keeps pair-wise services separate from each other, but
vm:101 and vm:103 might be migrated to the same node.
Additional and/or future ideas
------------------------------
- Make recomputing the online node usage more granular.
- Add information of overall free node resources to improve decision
heuristic when recovering services to nodes.
- Implementing non-strict colocation rules, e.g., which won't fail but
ignore the rule (for a timeout?, until migrated by the user?), only
considering the $target node while migrating, etc.
- When deciding the recovery node for positively colocated services,
account for the needed resources of all to-be-migrated services rather
than just the first one. This is a non-trivial problem as we currently
solve this as a online bin covering problem, i.e. selecting for each
service alone instead of selecting for all services together.
- Ignore migrations to nodes where the service may not be according to
their location rules / HA group nodes.
- Dynamic colocation rule health statistics (e.g. warn on the
satisfiability of a colocation rule), e.g. in the WebGUI and/or API.
- Property for mandatory colocation rules to specify whether all
services should be stopped if the rule cannot be satisfied.
[1] https://bugzilla.proxmox.com/show_bug.cgi?id=5260
[2] https://bugzilla.proxmox.com/show_bug.cgi?id=5332
common:
Daniel Kral (1):
introduce HashTools module
src/Makefile | 1 +
src/PVE/HashTools.pm | 101 +++++++++++++++++++++++++++++++++++++++++++
2 files changed, 102 insertions(+)
create mode 100644 src/PVE/HashTools.pm
base-commit: 6025a6360da7d502a14e354b23424709e29e62a7
prerequisite-patch-id: e6294c0998ea96878718cfd190f323f2e8003d88
prerequisite-patch-id: e4814efeefd103c81808b9e0a94fa984a7be48f7
prerequisite-patch-id: 537e0aa745edc574e9e6285965442084960b4baf
cluster:
Daniel Kral (3):
cfs: add 'ha/rules.cfg' to observed files
datacenter config: make pve-ha-shutdown-policy optional
datacenter config: introduce feature flag for location rules
src/PVE/Cluster.pm | 1 +
src/PVE/DataCenterConfig.pm | 7 +++++++
src/pmxcfs/status.c | 1 +
3 files changed, 9 insertions(+)
ha-manager:
Daniel Kral (26):
tree-wide: make arguments for select_service_node explicit
manager: improve signature of select_service_node
introduce rules base plugin
rules: introduce location rule plugin
rules: introduce colocation rule plugin
rules: add global checks between location and colocation rules
config, env, hw: add rules read and parse methods
manager: read and update rules config
test: ha tester: add test cases for future location rules
resources: introduce failback property in service config
manager: migrate ha groups to location rules in-memory
manager: apply location rules when selecting service nodes
usage: add information about a service's assigned nodes
manager: apply colocation rules when selecting service nodes
manager: handle migrations for colocated services
sim: resources: add option to limit start and migrate tries to node
test: ha tester: add test cases for strict negative colocation rules
test: ha tester: add test cases for strict positive colocation rules
test: ha tester: add test cases in more complex scenarios
test: add test cases for rules config
manager: handle negative colocations with too many services
config: prune services from rules if services are deleted from config
api: introduce ha rules api endpoints
cli: expose ha rules api endpoints to ha-manager cli
api: groups, services: assert use-location-rules feature flag
api: services: check for colocations for service motions
.gitignore | 1 +
debian/pve-ha-manager.install | 4 +
src/PVE/API2/HA/Groups.pm | 20 +
src/PVE/API2/HA/Makefile | 2 +-
src/PVE/API2/HA/Resources.pm | 108 ++-
src/PVE/API2/HA/Rules.pm | 409 +++++++++++
src/PVE/API2/HA/Status.pm | 6 +-
src/PVE/CLI/ha_manager.pm | 70 +-
src/PVE/HA/Config.pm | 119 +++-
src/PVE/HA/Env.pm | 6 +
src/PVE/HA/Env/PVE2.pm | 14 +
src/PVE/HA/Groups.pm | 48 ++
src/PVE/HA/Makefile | 3 +-
src/PVE/HA/Manager.pm | 257 ++++---
src/PVE/HA/Resources.pm | 9 +
src/PVE/HA/Resources/PVECT.pm | 1 +
src/PVE/HA/Resources/PVEVM.pm | 1 +
src/PVE/HA/Rules.pm | 661 ++++++++++++++++++
src/PVE/HA/Rules/Colocation.pm | 488 +++++++++++++
src/PVE/HA/Rules/Location.pm | 302 ++++++++
src/PVE/HA/Rules/Makefile | 6 +
src/PVE/HA/Sim/Env.pm | 16 +
src/PVE/HA/Sim/Hardware.pm | 22 +
src/PVE/HA/Sim/Resources/VirtFail.pm | 29 +-
src/PVE/HA/Tools.pm | 46 ++
src/PVE/HA/Usage.pm | 18 +
src/PVE/HA/Usage/Basic.pm | 19 +
src/PVE/HA/Usage/Static.pm | 19 +
src/test/Makefile | 4 +-
.../defaults-for-colocation-rules.cfg | 10 +
.../defaults-for-colocation-rules.cfg.expect | 29 +
.../defaults-for-location-rules.cfg | 16 +
.../defaults-for-location-rules.cfg.expect | 49 ++
.../duplicate-service-in-location-rules.cfg | 31 +
...icate-service-in-location-rules.cfg.expect | 66 ++
.../inconsistent-colocation-rules.cfg | 11 +
.../inconsistent-colocation-rules.cfg.expect | 11 +
...inconsistent-location-colocation-rules.cfg | 54 ++
...stent-location-colocation-rules.cfg.expect | 130 ++++
.../ineffective-colocation-rules.cfg | 7 +
.../ineffective-colocation-rules.cfg.expect | 9 +
...ulti-priority-location-with-colocation.cfg | 19 +
...iority-location-with-colocation.cfg.expect | 47 ++
.../test-colocation-strict-separate1/README | 13 +
.../test-colocation-strict-separate1/cmdlist | 4 +
.../hardware_status | 5 +
.../log.expect | 60 ++
.../manager_status | 1 +
.../rules_config | 3 +
.../service_config | 6 +
.../test-colocation-strict-separate2/README | 15 +
.../test-colocation-strict-separate2/cmdlist | 4 +
.../hardware_status | 7 +
.../log.expect | 90 +++
.../manager_status | 1 +
.../rules_config | 3 +
.../service_config | 10 +
.../test-colocation-strict-separate3/README | 16 +
.../test-colocation-strict-separate3/cmdlist | 4 +
.../hardware_status | 7 +
.../log.expect | 110 +++
.../manager_status | 1 +
.../rules_config | 3 +
.../service_config | 10 +
.../test-colocation-strict-separate4/README | 18 +
.../test-colocation-strict-separate4/cmdlist | 4 +
.../hardware_status | 5 +
.../log.expect | 69 ++
.../manager_status | 1 +
.../rules_config | 3 +
.../service_config | 6 +
.../test-colocation-strict-separate5/README | 11 +
.../test-colocation-strict-separate5/cmdlist | 4 +
.../hardware_status | 5 +
.../log.expect | 56 ++
.../manager_status | 1 +
.../rules_config | 7 +
.../service_config | 5 +
.../test-colocation-strict-separate6/README | 18 +
.../test-colocation-strict-separate6/cmdlist | 4 +
.../hardware_status | 5 +
.../log.expect | 69 ++
.../manager_status | 1 +
.../rules_config | 3 +
.../service_config | 6 +
.../test-colocation-strict-separate7/README | 15 +
.../test-colocation-strict-separate7/cmdlist | 5 +
.../hardware_status | 5 +
.../log.expect | 52 ++
.../manager_status | 1 +
.../rules_config | 3 +
.../service_config | 4 +
.../test-colocation-strict-separate8/README | 11 +
.../test-colocation-strict-separate8/cmdlist | 4 +
.../hardware_status | 5 +
.../log.expect | 38 +
.../manager_status | 1 +
.../rules_config | 3 +
.../service_config | 5 +
.../test-colocation-strict-separate9/README | 14 +
.../test-colocation-strict-separate9/cmdlist | 3 +
.../hardware_status | 5 +
.../log.expect | 57 ++
.../manager_status | 1 +
.../rules_config | 3 +
.../service_config | 7 +
.../test-colocation-strict-together1/README | 11 +
.../test-colocation-strict-together1/cmdlist | 4 +
.../hardware_status | 5 +
.../log.expect | 66 ++
.../manager_status | 1 +
.../rules_config | 3 +
.../service_config | 6 +
.../test-colocation-strict-together2/README | 10 +
.../test-colocation-strict-together2/cmdlist | 4 +
.../hardware_status | 5 +
.../log.expect | 80 +++
.../manager_status | 1 +
.../rules_config | 3 +
.../service_config | 8 +
.../test-colocation-strict-together3/README | 17 +
.../test-colocation-strict-together3/cmdlist | 4 +
.../hardware_status | 5 +
.../log.expect | 89 +++
.../manager_status | 1 +
.../rules_config | 3 +
.../service_config | 8 +
.../test-colocation-strict-together4/README | 11 +
.../test-colocation-strict-together4/cmdlist | 4 +
.../hardware_status | 5 +
.../log.expect | 59 ++
.../manager_status | 1 +
.../rules_config | 3 +
.../service_config | 5 +
.../test-colocation-strict-together5/README | 19 +
.../test-colocation-strict-together5/cmdlist | 8 +
.../hardware_status | 5 +
.../log.expect | 281 ++++++++
.../manager_status | 1 +
.../rules_config | 15 +
.../service_config | 11 +
.../test-crs-static-rebalance-coloc1/README | 26 +
.../test-crs-static-rebalance-coloc1/cmdlist | 4 +
.../datacenter.cfg | 6 +
.../hardware_status | 5 +
.../log.expect | 120 ++++
.../manager_status | 1 +
.../rules_config | 19 +
.../service_config | 10 +
.../static_service_stats | 10 +
.../test-crs-static-rebalance-coloc2/README | 20 +
.../test-crs-static-rebalance-coloc2/cmdlist | 4 +
.../datacenter.cfg | 6 +
.../hardware_status | 5 +
.../log.expect | 174 +++++
.../manager_status | 1 +
.../rules_config | 11 +
.../service_config | 14 +
.../static_service_stats | 14 +
.../test-crs-static-rebalance-coloc3/README | 22 +
.../test-crs-static-rebalance-coloc3/cmdlist | 22 +
.../datacenter.cfg | 6 +
.../hardware_status | 7 +
.../log.expect | 272 +++++++
.../manager_status | 1 +
.../rules_config | 3 +
.../service_config | 9 +
.../static_service_stats | 9 +
src/test/test-location-loose1/README | 10 +
src/test/test-location-loose1/cmdlist | 4 +
src/test/test-location-loose1/groups | 2 +
src/test/test-location-loose1/hardware_status | 5 +
src/test/test-location-loose1/log.expect | 40 ++
src/test/test-location-loose1/manager_status | 1 +
src/test/test-location-loose1/service_config | 3 +
src/test/test-location-loose2/README | 12 +
src/test/test-location-loose2/cmdlist | 4 +
src/test/test-location-loose2/groups | 3 +
src/test/test-location-loose2/hardware_status | 5 +
src/test/test-location-loose2/log.expect | 35 +
src/test/test-location-loose2/manager_status | 1 +
src/test/test-location-loose2/service_config | 3 +
src/test/test-location-loose3/README | 10 +
src/test/test-location-loose3/cmdlist | 4 +
src/test/test-location-loose3/groups | 2 +
src/test/test-location-loose3/hardware_status | 5 +
src/test/test-location-loose3/log.expect | 56 ++
src/test/test-location-loose3/manager_status | 1 +
src/test/test-location-loose3/service_config | 5 +
src/test/test-location-loose4/README | 14 +
src/test/test-location-loose4/cmdlist | 4 +
src/test/test-location-loose4/groups | 2 +
src/test/test-location-loose4/hardware_status | 5 +
src/test/test-location-loose4/log.expect | 54 ++
src/test/test-location-loose4/manager_status | 1 +
src/test/test-location-loose4/service_config | 5 +
src/test/test-location-loose5/README | 16 +
src/test/test-location-loose5/cmdlist | 5 +
src/test/test-location-loose5/groups | 2 +
src/test/test-location-loose5/hardware_status | 5 +
src/test/test-location-loose5/log.expect | 66 ++
src/test/test-location-loose5/manager_status | 1 +
src/test/test-location-loose5/service_config | 3 +
src/test/test-location-loose6/README | 14 +
src/test/test-location-loose6/cmdlist | 5 +
src/test/test-location-loose6/groups | 3 +
src/test/test-location-loose6/hardware_status | 5 +
src/test/test-location-loose6/log.expect | 52 ++
src/test/test-location-loose6/manager_status | 1 +
src/test/test-location-loose6/service_config | 3 +
src/test/test-location-strict1/README | 10 +
src/test/test-location-strict1/cmdlist | 4 +
src/test/test-location-strict1/groups | 3 +
.../test-location-strict1/hardware_status | 5 +
src/test/test-location-strict1/log.expect | 40 ++
src/test/test-location-strict1/manager_status | 1 +
src/test/test-location-strict1/service_config | 3 +
src/test/test-location-strict2/README | 11 +
src/test/test-location-strict2/cmdlist | 4 +
src/test/test-location-strict2/groups | 4 +
.../test-location-strict2/hardware_status | 5 +
src/test/test-location-strict2/log.expect | 40 ++
src/test/test-location-strict2/manager_status | 1 +
src/test/test-location-strict2/service_config | 3 +
src/test/test-location-strict3/README | 10 +
src/test/test-location-strict3/cmdlist | 4 +
src/test/test-location-strict3/groups | 3 +
.../test-location-strict3/hardware_status | 5 +
src/test/test-location-strict3/log.expect | 74 ++
src/test/test-location-strict3/manager_status | 1 +
src/test/test-location-strict3/service_config | 5 +
src/test/test-location-strict4/README | 14 +
src/test/test-location-strict4/cmdlist | 4 +
src/test/test-location-strict4/groups | 3 +
.../test-location-strict4/hardware_status | 5 +
src/test/test-location-strict4/log.expect | 54 ++
src/test/test-location-strict4/manager_status | 1 +
src/test/test-location-strict4/service_config | 5 +
src/test/test-location-strict5/README | 16 +
src/test/test-location-strict5/cmdlist | 5 +
src/test/test-location-strict5/groups | 3 +
.../test-location-strict5/hardware_status | 5 +
src/test/test-location-strict5/log.expect | 66 ++
src/test/test-location-strict5/manager_status | 1 +
src/test/test-location-strict5/service_config | 3 +
src/test/test-location-strict6/README | 14 +
src/test/test-location-strict6/cmdlist | 5 +
src/test/test-location-strict6/groups | 4 +
.../test-location-strict6/hardware_status | 5 +
src/test/test-location-strict6/log.expect | 52 ++
src/test/test-location-strict6/manager_status | 1 +
src/test/test-location-strict6/service_config | 3 +
src/test/test_failover1.pl | 29 +-
src/test/test_rules_config.pl | 102 +++
254 files changed, 6664 insertions(+), 125 deletions(-)
create mode 100644 src/PVE/API2/HA/Rules.pm
create mode 100644 src/PVE/HA/Rules.pm
create mode 100644 src/PVE/HA/Rules/Colocation.pm
create mode 100644 src/PVE/HA/Rules/Location.pm
create mode 100644 src/PVE/HA/Rules/Makefile
create mode 100644 src/test/rules_cfgs/defaults-for-colocation-rules.cfg
create mode 100644 src/test/rules_cfgs/defaults-for-colocation-rules.cfg.expect
create mode 100644 src/test/rules_cfgs/defaults-for-location-rules.cfg
create mode 100644 src/test/rules_cfgs/defaults-for-location-rules.cfg.expect
create mode 100644 src/test/rules_cfgs/duplicate-service-in-location-rules.cfg
create mode 100644 src/test/rules_cfgs/duplicate-service-in-location-rules.cfg.expect
create mode 100644 src/test/rules_cfgs/inconsistent-colocation-rules.cfg
create mode 100644 src/test/rules_cfgs/inconsistent-colocation-rules.cfg.expect
create mode 100644 src/test/rules_cfgs/inconsistent-location-colocation-rules.cfg
create mode 100644 src/test/rules_cfgs/inconsistent-location-colocation-rules.cfg.expect
create mode 100644 src/test/rules_cfgs/ineffective-colocation-rules.cfg
create mode 100644 src/test/rules_cfgs/ineffective-colocation-rules.cfg.expect
create mode 100644 src/test/rules_cfgs/multi-priority-location-with-colocation.cfg
create mode 100644 src/test/rules_cfgs/multi-priority-location-with-colocation.cfg.expect
create mode 100644 src/test/test-colocation-strict-separate1/README
create mode 100644 src/test/test-colocation-strict-separate1/cmdlist
create mode 100644 src/test/test-colocation-strict-separate1/hardware_status
create mode 100644 src/test/test-colocation-strict-separate1/log.expect
create mode 100644 src/test/test-colocation-strict-separate1/manager_status
create mode 100644 src/test/test-colocation-strict-separate1/rules_config
create mode 100644 src/test/test-colocation-strict-separate1/service_config
create mode 100644 src/test/test-colocation-strict-separate2/README
create mode 100644 src/test/test-colocation-strict-separate2/cmdlist
create mode 100644 src/test/test-colocation-strict-separate2/hardware_status
create mode 100644 src/test/test-colocation-strict-separate2/log.expect
create mode 100644 src/test/test-colocation-strict-separate2/manager_status
create mode 100644 src/test/test-colocation-strict-separate2/rules_config
create mode 100644 src/test/test-colocation-strict-separate2/service_config
create mode 100644 src/test/test-colocation-strict-separate3/README
create mode 100644 src/test/test-colocation-strict-separate3/cmdlist
create mode 100644 src/test/test-colocation-strict-separate3/hardware_status
create mode 100644 src/test/test-colocation-strict-separate3/log.expect
create mode 100644 src/test/test-colocation-strict-separate3/manager_status
create mode 100644 src/test/test-colocation-strict-separate3/rules_config
create mode 100644 src/test/test-colocation-strict-separate3/service_config
create mode 100644 src/test/test-colocation-strict-separate4/README
create mode 100644 src/test/test-colocation-strict-separate4/cmdlist
create mode 100644 src/test/test-colocation-strict-separate4/hardware_status
create mode 100644 src/test/test-colocation-strict-separate4/log.expect
create mode 100644 src/test/test-colocation-strict-separate4/manager_status
create mode 100644 src/test/test-colocation-strict-separate4/rules_config
create mode 100644 src/test/test-colocation-strict-separate4/service_config
create mode 100644 src/test/test-colocation-strict-separate5/README
create mode 100644 src/test/test-colocation-strict-separate5/cmdlist
create mode 100644 src/test/test-colocation-strict-separate5/hardware_status
create mode 100644 src/test/test-colocation-strict-separate5/log.expect
create mode 100644 src/test/test-colocation-strict-separate5/manager_status
create mode 100644 src/test/test-colocation-strict-separate5/rules_config
create mode 100644 src/test/test-colocation-strict-separate5/service_config
create mode 100644 src/test/test-colocation-strict-separate6/README
create mode 100644 src/test/test-colocation-strict-separate6/cmdlist
create mode 100644 src/test/test-colocation-strict-separate6/hardware_status
create mode 100644 src/test/test-colocation-strict-separate6/log.expect
create mode 100644 src/test/test-colocation-strict-separate6/manager_status
create mode 100644 src/test/test-colocation-strict-separate6/rules_config
create mode 100644 src/test/test-colocation-strict-separate6/service_config
create mode 100644 src/test/test-colocation-strict-separate7/README
create mode 100644 src/test/test-colocation-strict-separate7/cmdlist
create mode 100644 src/test/test-colocation-strict-separate7/hardware_status
create mode 100644 src/test/test-colocation-strict-separate7/log.expect
create mode 100644 src/test/test-colocation-strict-separate7/manager_status
create mode 100644 src/test/test-colocation-strict-separate7/rules_config
create mode 100644 src/test/test-colocation-strict-separate7/service_config
create mode 100644 src/test/test-colocation-strict-separate8/README
create mode 100644 src/test/test-colocation-strict-separate8/cmdlist
create mode 100644 src/test/test-colocation-strict-separate8/hardware_status
create mode 100644 src/test/test-colocation-strict-separate8/log.expect
create mode 100644 src/test/test-colocation-strict-separate8/manager_status
create mode 100644 src/test/test-colocation-strict-separate8/rules_config
create mode 100644 src/test/test-colocation-strict-separate8/service_config
create mode 100644 src/test/test-colocation-strict-separate9/README
create mode 100644 src/test/test-colocation-strict-separate9/cmdlist
create mode 100644 src/test/test-colocation-strict-separate9/hardware_status
create mode 100644 src/test/test-colocation-strict-separate9/log.expect
create mode 100644 src/test/test-colocation-strict-separate9/manager_status
create mode 100644 src/test/test-colocation-strict-separate9/rules_config
create mode 100644 src/test/test-colocation-strict-separate9/service_config
create mode 100644 src/test/test-colocation-strict-together1/README
create mode 100644 src/test/test-colocation-strict-together1/cmdlist
create mode 100644 src/test/test-colocation-strict-together1/hardware_status
create mode 100644 src/test/test-colocation-strict-together1/log.expect
create mode 100644 src/test/test-colocation-strict-together1/manager_status
create mode 100644 src/test/test-colocation-strict-together1/rules_config
create mode 100644 src/test/test-colocation-strict-together1/service_config
create mode 100644 src/test/test-colocation-strict-together2/README
create mode 100644 src/test/test-colocation-strict-together2/cmdlist
create mode 100644 src/test/test-colocation-strict-together2/hardware_status
create mode 100644 src/test/test-colocation-strict-together2/log.expect
create mode 100644 src/test/test-colocation-strict-together2/manager_status
create mode 100644 src/test/test-colocation-strict-together2/rules_config
create mode 100644 src/test/test-colocation-strict-together2/service_config
create mode 100644 src/test/test-colocation-strict-together3/README
create mode 100644 src/test/test-colocation-strict-together3/cmdlist
create mode 100644 src/test/test-colocation-strict-together3/hardware_status
create mode 100644 src/test/test-colocation-strict-together3/log.expect
create mode 100644 src/test/test-colocation-strict-together3/manager_status
create mode 100644 src/test/test-colocation-strict-together3/rules_config
create mode 100644 src/test/test-colocation-strict-together3/service_config
create mode 100644 src/test/test-colocation-strict-together4/README
create mode 100644 src/test/test-colocation-strict-together4/cmdlist
create mode 100644 src/test/test-colocation-strict-together4/hardware_status
create mode 100644 src/test/test-colocation-strict-together4/log.expect
create mode 100644 src/test/test-colocation-strict-together4/manager_status
create mode 100644 src/test/test-colocation-strict-together4/rules_config
create mode 100644 src/test/test-colocation-strict-together4/service_config
create mode 100644 src/test/test-colocation-strict-together5/README
create mode 100644 src/test/test-colocation-strict-together5/cmdlist
create mode 100644 src/test/test-colocation-strict-together5/hardware_status
create mode 100644 src/test/test-colocation-strict-together5/log.expect
create mode 100644 src/test/test-colocation-strict-together5/manager_status
create mode 100644 src/test/test-colocation-strict-together5/rules_config
create mode 100644 src/test/test-colocation-strict-together5/service_config
create mode 100644 src/test/test-crs-static-rebalance-coloc1/README
create mode 100644 src/test/test-crs-static-rebalance-coloc1/cmdlist
create mode 100644 src/test/test-crs-static-rebalance-coloc1/datacenter.cfg
create mode 100644 src/test/test-crs-static-rebalance-coloc1/hardware_status
create mode 100644 src/test/test-crs-static-rebalance-coloc1/log.expect
create mode 100644 src/test/test-crs-static-rebalance-coloc1/manager_status
create mode 100644 src/test/test-crs-static-rebalance-coloc1/rules_config
create mode 100644 src/test/test-crs-static-rebalance-coloc1/service_config
create mode 100644 src/test/test-crs-static-rebalance-coloc1/static_service_stats
create mode 100644 src/test/test-crs-static-rebalance-coloc2/README
create mode 100644 src/test/test-crs-static-rebalance-coloc2/cmdlist
create mode 100644 src/test/test-crs-static-rebalance-coloc2/datacenter.cfg
create mode 100644 src/test/test-crs-static-rebalance-coloc2/hardware_status
create mode 100644 src/test/test-crs-static-rebalance-coloc2/log.expect
create mode 100644 src/test/test-crs-static-rebalance-coloc2/manager_status
create mode 100644 src/test/test-crs-static-rebalance-coloc2/rules_config
create mode 100644 src/test/test-crs-static-rebalance-coloc2/service_config
create mode 100644 src/test/test-crs-static-rebalance-coloc2/static_service_stats
create mode 100644 src/test/test-crs-static-rebalance-coloc3/README
create mode 100644 src/test/test-crs-static-rebalance-coloc3/cmdlist
create mode 100644 src/test/test-crs-static-rebalance-coloc3/datacenter.cfg
create mode 100644 src/test/test-crs-static-rebalance-coloc3/hardware_status
create mode 100644 src/test/test-crs-static-rebalance-coloc3/log.expect
create mode 100644 src/test/test-crs-static-rebalance-coloc3/manager_status
create mode 100644 src/test/test-crs-static-rebalance-coloc3/rules_config
create mode 100644 src/test/test-crs-static-rebalance-coloc3/service_config
create mode 100644 src/test/test-crs-static-rebalance-coloc3/static_service_stats
create mode 100644 src/test/test-location-loose1/README
create mode 100644 src/test/test-location-loose1/cmdlist
create mode 100644 src/test/test-location-loose1/groups
create mode 100644 src/test/test-location-loose1/hardware_status
create mode 100644 src/test/test-location-loose1/log.expect
create mode 100644 src/test/test-location-loose1/manager_status
create mode 100644 src/test/test-location-loose1/service_config
create mode 100644 src/test/test-location-loose2/README
create mode 100644 src/test/test-location-loose2/cmdlist
create mode 100644 src/test/test-location-loose2/groups
create mode 100644 src/test/test-location-loose2/hardware_status
create mode 100644 src/test/test-location-loose2/log.expect
create mode 100644 src/test/test-location-loose2/manager_status
create mode 100644 src/test/test-location-loose2/service_config
create mode 100644 src/test/test-location-loose3/README
create mode 100644 src/test/test-location-loose3/cmdlist
create mode 100644 src/test/test-location-loose3/groups
create mode 100644 src/test/test-location-loose3/hardware_status
create mode 100644 src/test/test-location-loose3/log.expect
create mode 100644 src/test/test-location-loose3/manager_status
create mode 100644 src/test/test-location-loose3/service_config
create mode 100644 src/test/test-location-loose4/README
create mode 100644 src/test/test-location-loose4/cmdlist
create mode 100644 src/test/test-location-loose4/groups
create mode 100644 src/test/test-location-loose4/hardware_status
create mode 100644 src/test/test-location-loose4/log.expect
create mode 100644 src/test/test-location-loose4/manager_status
create mode 100644 src/test/test-location-loose4/service_config
create mode 100644 src/test/test-location-loose5/README
create mode 100644 src/test/test-location-loose5/cmdlist
create mode 100644 src/test/test-location-loose5/groups
create mode 100644 src/test/test-location-loose5/hardware_status
create mode 100644 src/test/test-location-loose5/log.expect
create mode 100644 src/test/test-location-loose5/manager_status
create mode 100644 src/test/test-location-loose5/service_config
create mode 100644 src/test/test-location-loose6/README
create mode 100644 src/test/test-location-loose6/cmdlist
create mode 100644 src/test/test-location-loose6/groups
create mode 100644 src/test/test-location-loose6/hardware_status
create mode 100644 src/test/test-location-loose6/log.expect
create mode 100644 src/test/test-location-loose6/manager_status
create mode 100644 src/test/test-location-loose6/service_config
create mode 100644 src/test/test-location-strict1/README
create mode 100644 src/test/test-location-strict1/cmdlist
create mode 100644 src/test/test-location-strict1/groups
create mode 100644 src/test/test-location-strict1/hardware_status
create mode 100644 src/test/test-location-strict1/log.expect
create mode 100644 src/test/test-location-strict1/manager_status
create mode 100644 src/test/test-location-strict1/service_config
create mode 100644 src/test/test-location-strict2/README
create mode 100644 src/test/test-location-strict2/cmdlist
create mode 100644 src/test/test-location-strict2/groups
create mode 100644 src/test/test-location-strict2/hardware_status
create mode 100644 src/test/test-location-strict2/log.expect
create mode 100644 src/test/test-location-strict2/manager_status
create mode 100644 src/test/test-location-strict2/service_config
create mode 100644 src/test/test-location-strict3/README
create mode 100644 src/test/test-location-strict3/cmdlist
create mode 100644 src/test/test-location-strict3/groups
create mode 100644 src/test/test-location-strict3/hardware_status
create mode 100644 src/test/test-location-strict3/log.expect
create mode 100644 src/test/test-location-strict3/manager_status
create mode 100644 src/test/test-location-strict3/service_config
create mode 100644 src/test/test-location-strict4/README
create mode 100644 src/test/test-location-strict4/cmdlist
create mode 100644 src/test/test-location-strict4/groups
create mode 100644 src/test/test-location-strict4/hardware_status
create mode 100644 src/test/test-location-strict4/log.expect
create mode 100644 src/test/test-location-strict4/manager_status
create mode 100644 src/test/test-location-strict4/service_config
create mode 100644 src/test/test-location-strict5/README
create mode 100644 src/test/test-location-strict5/cmdlist
create mode 100644 src/test/test-location-strict5/groups
create mode 100644 src/test/test-location-strict5/hardware_status
create mode 100644 src/test/test-location-strict5/log.expect
create mode 100644 src/test/test-location-strict5/manager_status
create mode 100644 src/test/test-location-strict5/service_config
create mode 100644 src/test/test-location-strict6/README
create mode 100644 src/test/test-location-strict6/cmdlist
create mode 100644 src/test/test-location-strict6/groups
create mode 100644 src/test/test-location-strict6/hardware_status
create mode 100644 src/test/test-location-strict6/log.expect
create mode 100644 src/test/test-location-strict6/manager_status
create mode 100644 src/test/test-location-strict6/service_config
create mode 100755 src/test/test_rules_config.pl
docs:
Daniel Kral (5):
ha: config: add section about ha rules
update static files to include ha rules api endpoints
update static files to include use-location-rules feature flag
update static files to include ha resources failback flag
update static files to include ha service motion return value schema
Makefile | 3 +
api-viewer/apidata.js | 414 +++++++++++++++++++++++++++++++-
datacenter.cfg.5-opts.adoc | 6 +-
gen-ha-rules-colocation-opts.pl | 20 ++
gen-ha-rules-location-opts.pl | 20 ++
gen-ha-rules-opts.pl | 17 ++
ha-manager.1-synopsis.adoc | 146 +++++++++++
ha-manager.adoc | 231 +++++++++++++++++-
ha-resources-opts.adoc | 4 +
ha-rules-colocation-opts.adoc | 8 +
ha-rules-location-opts.adoc | 14 ++
ha-rules-opts.adoc | 12 +
12 files changed, 884 insertions(+), 11 deletions(-)
create mode 100755 gen-ha-rules-colocation-opts.pl
create mode 100755 gen-ha-rules-location-opts.pl
create mode 100755 gen-ha-rules-opts.pl
create mode 100644 ha-rules-colocation-opts.adoc
create mode 100644 ha-rules-location-opts.adoc
create mode 100644 ha-rules-opts.adoc
base-commit: 7cc17ee5950a53bbd5b5ad81270352ccdb1c541c
manager:
Daniel Kral (5):
api: ha: add ha rules api endpoints
ui: add use-location-rules feature flag
ui: ha: hide ha groups if use-location-rules is enabled
ui: ha: adapt resources components if use-location-rules is enabled
ui: ha: add ha rules components and menu entry
PVE/API2/HAConfig.pm | 8 +-
www/manager6/Makefile | 7 +
www/manager6/StateProvider.js | 1 -
www/manager6/Utils.js | 5 +
www/manager6/Workspace.js | 20 ++
www/manager6/dc/Config.js | 15 +-
www/manager6/dc/OptionView.js | 13 ++
www/manager6/ha/Groups.js | 6 +
www/manager6/ha/ResourceEdit.js | 27 ++-
www/manager6/ha/Resources.js | 7 +
www/manager6/ha/RuleEdit.js | 149 +++++++++++++
www/manager6/ha/RuleErrorsModal.js | 50 +++++
www/manager6/ha/Rules.js | 228 ++++++++++++++++++++
www/manager6/ha/rules/ColocationRuleEdit.js | 24 +++
www/manager6/ha/rules/ColocationRules.js | 31 +++
www/manager6/ha/rules/LocationRuleEdit.js | 145 +++++++++++++
www/manager6/ha/rules/LocationRules.js | 36 ++++
17 files changed, 764 insertions(+), 8 deletions(-)
create mode 100644 www/manager6/ha/RuleEdit.js
create mode 100644 www/manager6/ha/RuleErrorsModal.js
create mode 100644 www/manager6/ha/Rules.js
create mode 100644 www/manager6/ha/rules/ColocationRuleEdit.js
create mode 100644 www/manager6/ha/rules/ColocationRules.js
create mode 100644 www/manager6/ha/rules/LocationRuleEdit.js
create mode 100644 www/manager6/ha/rules/LocationRules.js
Summary over all repositories:
288 files changed, 8423 insertions(+), 144 deletions(-)
--
Generated by git-murpp 0.8.0
More information about the pve-devel
mailing list