From: Daniel Kral <d.kral@proxmox.com>
To: Fiona Ebner <f.ebner@proxmox.com>,
Proxmox VE development discussion <pve-devel@lists.proxmox.com>
Subject: Re: [pve-devel] [PATCH ha-manager 05/15] rules: add colocation rule plugin
Date: Tue, 29 Apr 2025 10:44:44 +0200 [thread overview]
Message-ID: <b2d0aa33-b681-4e77-836b-d84546bd938d@proxmox.com> (raw)
In-Reply-To: <6f5df6e4-2f78-4562-bc77-9fe992f0d9a6@proxmox.com>
On 4/25/25 16:05, Fiona Ebner wrote:
> Not much to add to Fabian's review :)
>
> Am 25.03.25 um 16:12 schrieb Daniel Kral:
>> diff --git a/src/PVE/HA/Rules/Colocation.pm b/src/PVE/HA/Rules/Colocation.pm
>> new file mode 100644
>> index 0000000..808d48e
>> --- /dev/null
>> +++ b/src/PVE/HA/Rules/Colocation.pm
>> @@ -0,0 +1,391 @@
>> +package PVE::HA::Rules::Colocation;
>> +
>> +use strict;
>> +use warnings;
>> +
>> +use Data::Dumper;
>> +
>> +use PVE::JSONSchema qw(get_standard_option);
>
> Missing include of PVE::Tools.
>
> Nit: I'd put a blank here to separate modules from different packages
> and modules from the same package.
>
>> +use PVE::HA::Tools;
>> +
>> +use base qw(PVE::HA::Rules);
>> +
>> +sub type {
>> + return 'colocation';
>> +}
>> +
>> +sub properties {
>> + return {
>> + services => get_standard_option('pve-ha-resource-id-list'),
>> + affinity => {
>> + description => "Describes whether the services are supposed to be kept on separate"
>> + . " nodes, or are supposed to be kept together on the same node.",
>> + type => 'string',
>> + enum => ['separate', 'together'],
>> + optional => 0,
>> + },
>> + strict => {
>> + description => "Describes whether the colocation rule is mandatory or optional.",
>> + type => 'boolean',
>> + optional => 0,
>> + },
>> + }
>
> Style nit: missing semicolon
>
> Since we should move the property definitions to the base module once a
> second plugin re-uses them later: should we already declare 'services'
> and 'strict' in the base module to start out? Then we could implement
> the encode/decode part for 'services' there already. Less moving around
> or duplication later on.
Yes, especially as Fabian also agreed that it would make sense that
users are allowed to make location rules for multiple services in a
single rule.
I'll start to use the isolated_properties option that @Dominik
implemented so that other options can be separated and have
plugin-specific descriptions, etc. but services can definitely live with
a more general description.
>
>> +}
>> +
>> +sub options {
>> + return {
>> + services => { optional => 0 },
>> + strict => { optional => 0 },
>> + affinity => { optional => 0 },
>> + comment => { optional => 1 },
>> + };
>> +};
>> +
>> +sub decode_value {
>> + my ($class, $type, $key, $value) = @_;
>> +
>> + if ($key eq 'services') {
>> + my $res = {};
>> +
>> + for my $service (PVE::Tools::split_list($value)) {
>> + if (PVE::HA::Tools::pve_verify_ha_resource_id($service)) {
>> + $res->{$service} = 1;
>> + }
>> + }
>> +
>> + return $res;
>> + }
>> +
>> + return $value;
>> +}
>> +
>> +sub encode_value {
>> + my ($class, $type, $key, $value) = @_;
>> +
>> + if ($key eq 'services') {
>> + PVE::HA::Tools::pve_verify_ha_resource_id($_) for (keys %$value);
>
> Style nit:
> [I] febner@dev8 /usr/share/perl5/PVE> ag "for keys" | wc -l
> 28
> [I] febner@dev8 /usr/share/perl5/PVE> ag "for \(keys" | wc -l
> 0
ACK, will change that :)
>
>> +
>> + return join(',', keys %$value);
>> + }
>> +
>> + return $value;
>> +}
>> +
>
> ---snip 8<---
>
>> +=head3 check_service_count($rules)
>> +
>> +Returns a list of conflicts caused by colocation rules, which do not have
>> +enough services in them, defined in C<$rules>.
>> +
>> +If there are no conflicts, the returned list is empty.
>> +
>> +=cut
>> +
>> +sub check_services_count {
>> + my ($rules) = @_;
>> +
>> + my $conflicts = [];
>> +
>> + foreach_colocation_rule($rules, sub {
>> + my ($rule, $ruleid) = @_;
>> +
>> + push @$conflicts, $ruleid if (scalar(keys %{$rule->{services}}) < 2);
>
> Style nit: parentheses for post-if
>
ACK, removed the outer parentheses
_______________________________________________
pve-devel mailing list
pve-devel@lists.proxmox.com
https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel
next prev parent reply other threads:[~2025-04-29 8:44 UTC|newest]
Thread overview: 71+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-03-25 15:12 [pve-devel] [RFC cluster/ha-manager 00/16] HA colocation rules Daniel Kral
2025-03-25 15:12 ` [pve-devel] [PATCH cluster 1/1] cfs: add 'ha/rules.cfg' to observed files Daniel Kral
2025-03-25 15:12 ` [pve-devel] [PATCH ha-manager 01/15] ignore output of fence config tests in tree Daniel Kral
2025-03-25 17:49 ` [pve-devel] applied: " Thomas Lamprecht
2025-03-25 15:12 ` [pve-devel] [PATCH ha-manager 02/15] tools: add hash set helper subroutines Daniel Kral
2025-03-25 17:53 ` Thomas Lamprecht
2025-04-03 12:16 ` Fabian Grünbichler
2025-04-11 11:24 ` Daniel Kral
2025-03-25 15:12 ` [pve-devel] [PATCH ha-manager 03/15] usage: add get_service_node and pin_service_node methods Daniel Kral
2025-04-24 12:29 ` Fiona Ebner
2025-04-25 7:39 ` Daniel Kral
2025-03-25 15:12 ` [pve-devel] [PATCH ha-manager 04/15] add rules section config base plugin Daniel Kral
2025-04-24 13:03 ` Fiona Ebner
2025-04-25 8:29 ` Daniel Kral
2025-04-25 9:12 ` Fiona Ebner
2025-04-25 13:30 ` Daniel Kral
2025-03-25 15:12 ` [pve-devel] [PATCH ha-manager 05/15] rules: add colocation rule plugin Daniel Kral
2025-04-03 12:16 ` Fabian Grünbichler
2025-04-11 11:04 ` Daniel Kral
2025-04-25 14:06 ` Fiona Ebner
2025-04-29 8:37 ` Daniel Kral
2025-04-29 9:15 ` Fiona Ebner
2025-05-07 8:41 ` Daniel Kral
2025-04-25 14:05 ` Fiona Ebner
2025-04-29 8:44 ` Daniel Kral [this message]
2025-03-25 15:12 ` [pve-devel] [PATCH ha-manager 06/15] config, env, hw: add rules read and parse methods Daniel Kral
2025-04-25 14:11 ` Fiona Ebner
2025-03-25 15:12 ` [pve-devel] [PATCH ha-manager 07/15] manager: read and update rules config Daniel Kral
2025-04-25 14:30 ` Fiona Ebner
2025-04-29 8:04 ` Daniel Kral
2025-03-25 15:12 ` [pve-devel] [PATCH ha-manager 08/15] manager: factor out prioritized nodes in select_service_node Daniel Kral
2025-04-28 13:03 ` Fiona Ebner
2025-03-25 15:12 ` [pve-devel] [PATCH ha-manager 09/15] manager: apply colocation rules when selecting service nodes Daniel Kral
2025-04-03 12:17 ` Fabian Grünbichler
2025-04-11 15:56 ` Daniel Kral
2025-04-28 12:46 ` Fiona Ebner
2025-04-29 9:07 ` Daniel Kral
2025-04-29 9:22 ` Fiona Ebner
2025-04-28 12:26 ` Fiona Ebner
2025-04-28 14:33 ` Fiona Ebner
2025-04-29 9:39 ` Daniel Kral
2025-04-29 9:50 ` Daniel Kral
2025-04-30 11:09 ` Daniel Kral
2025-05-02 9:33 ` Fiona Ebner
2025-05-07 8:31 ` Daniel Kral
2025-03-25 15:12 ` [pve-devel] [PATCH ha-manager 10/15] sim: resources: add option to limit start and migrate tries to node Daniel Kral
2025-04-28 13:20 ` Fiona Ebner
2025-03-25 15:12 ` [pve-devel] [PATCH ha-manager 11/15] test: ha tester: add test cases for strict negative colocation rules Daniel Kral
2025-04-28 13:44 ` Fiona Ebner
2025-03-25 15:12 ` [pve-devel] [PATCH ha-manager 12/15] test: ha tester: add test cases for strict positive " Daniel Kral
2025-04-28 13:51 ` Fiona Ebner
2025-05-09 11:22 ` Daniel Kral
2025-03-25 15:12 ` [pve-devel] [PATCH ha-manager 13/15] test: ha tester: add test cases for loose " Daniel Kral
2025-04-28 14:44 ` Fiona Ebner
2025-05-09 11:20 ` Daniel Kral
2025-03-25 15:12 ` [pve-devel] [PATCH ha-manager 14/15] test: ha tester: add test cases in more complex scenarios Daniel Kral
2025-04-29 8:54 ` Fiona Ebner
2025-04-29 9:01 ` Fiona Ebner
2025-03-25 15:12 ` [pve-devel] [PATCH ha-manager 15/15] test: add test cases for rules config Daniel Kral
2025-03-25 16:47 ` [pve-devel] [RFC cluster/ha-manager 00/16] HA colocation rules Daniel Kral
2025-04-24 10:12 ` Fiona Ebner
2025-04-01 1:50 ` DERUMIER, Alexandre
2025-04-01 9:39 ` Daniel Kral
2025-04-01 11:05 ` DERUMIER, Alexandre via pve-devel
2025-04-03 12:26 ` Fabian Grünbichler
2025-04-24 10:12 ` Fiona Ebner
2025-04-24 10:12 ` Fiona Ebner
2025-04-25 8:36 ` Daniel Kral
2025-04-25 12:25 ` Fiona Ebner
2025-04-25 13:25 ` Daniel Kral
2025-04-25 13:58 ` Fiona Ebner
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=b2d0aa33-b681-4e77-836b-d84546bd938d@proxmox.com \
--to=d.kral@proxmox.com \
--cc=f.ebner@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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.
Service provided by Proxmox Server Solutions GmbH | Privacy | Legal