From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: <pve-devel-bounces@lists.proxmox.com> Received: from firstgate.proxmox.com (firstgate.proxmox.com [IPv6:2a01:7e0:0:424::9]) by lore.proxmox.com (Postfix) with ESMTPS id 686D11FF15E for <inbox@lore.proxmox.com>; Tue, 25 Mar 2025 16:14:13 +0100 (CET) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id 01D6ECDC1; Tue, 25 Mar 2025 16:13:45 +0100 (CET) From: Daniel Kral <d.kral@proxmox.com> To: pve-devel@lists.proxmox.com Date: Tue, 25 Mar 2025 16:12:45 +0100 Message-Id: <20250325151254.193177-8-d.kral@proxmox.com> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20250325151254.193177-1-d.kral@proxmox.com> References: <20250325151254.193177-1-d.kral@proxmox.com> MIME-Version: 1.0 X-SPAM-LEVEL: Spam detection results: 0 AWL 0.010 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DMARC_MISSING 0.1 Missing DMARC policy KAM_DMARC_STATUS 0.01 Test Rule for DKIM or SPF Failure with Strict Alignment SPF_HELO_NONE 0.001 SPF: HELO does not publish an SPF Record SPF_PASS -0.001 SPF: sender matches SPF record Subject: [pve-devel] [PATCH ha-manager 06/15] config, env, hw: add rules read and parse methods X-BeenThere: pve-devel@lists.proxmox.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Proxmox VE development discussion <pve-devel.lists.proxmox.com> List-Unsubscribe: <https://lists.proxmox.com/cgi-bin/mailman/options/pve-devel>, <mailto:pve-devel-request@lists.proxmox.com?subject=unsubscribe> List-Archive: <http://lists.proxmox.com/pipermail/pve-devel/> List-Post: <mailto:pve-devel@lists.proxmox.com> List-Help: <mailto:pve-devel-request@lists.proxmox.com?subject=help> List-Subscribe: <https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel>, <mailto:pve-devel-request@lists.proxmox.com?subject=subscribe> Reply-To: Proxmox VE development discussion <pve-devel@lists.proxmox.com> Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: pve-devel-bounces@lists.proxmox.com Sender: "pve-devel" <pve-devel-bounces@lists.proxmox.com> Adds methods to the HA environment to read and parse the rules configuration file for the specific environment implementation. Signed-off-by: Daniel Kral <d.kral@proxmox.com> --- src/PVE/HA/Config.pm | 12 ++++++++++++ src/PVE/HA/Env.pm | 6 ++++++ src/PVE/HA/Env/PVE2.pm | 13 +++++++++++++ src/PVE/HA/Sim/Env.pm | 15 +++++++++++++++ src/PVE/HA/Sim/Hardware.pm | 15 +++++++++++++++ 5 files changed, 61 insertions(+) diff --git a/src/PVE/HA/Config.pm b/src/PVE/HA/Config.pm index 129236d..99ae33a 100644 --- a/src/PVE/HA/Config.pm +++ b/src/PVE/HA/Config.pm @@ -7,12 +7,14 @@ use JSON; use PVE::HA::Tools; use PVE::HA::Groups; +use PVE::HA::Rules; use PVE::Cluster qw(cfs_register_file cfs_read_file cfs_write_file cfs_lock_file); use PVE::HA::Resources; my $manager_status_filename = "ha/manager_status"; my $ha_groups_config = "ha/groups.cfg"; my $ha_resources_config = "ha/resources.cfg"; +my $ha_rules_config = "ha/rules.cfg"; my $crm_commands_filename = "ha/crm_commands"; my $ha_fence_config = "ha/fence.cfg"; @@ -31,6 +33,11 @@ cfs_register_file( sub { PVE::HA::Resources->parse_config(@_); }, sub { PVE::HA::Resources->write_config(@_); }, ); +cfs_register_file( + $ha_rules_config, + sub { PVE::HA::Rules->parse_config(@_); }, + sub { PVE::HA::Rules->write_config(@_); }, +); cfs_register_file($manager_status_filename, \&json_reader, \&json_writer); cfs_register_file( $ha_fence_config, \&PVE::HA::FenceConfig::parse_config, \&PVE::HA::FenceConfig::write_config); @@ -193,6 +200,11 @@ sub parse_sid { return wantarray ? ($sid, $type, $name) : $sid; } +sub read_rules_config { + + return cfs_read_file($ha_rules_config); +} + sub read_group_config { return cfs_read_file($ha_groups_config); diff --git a/src/PVE/HA/Env.pm b/src/PVE/HA/Env.pm index bb28a75..bdcbed8 100644 --- a/src/PVE/HA/Env.pm +++ b/src/PVE/HA/Env.pm @@ -131,6 +131,12 @@ sub steal_service { return $self->{plug}->steal_service($sid, $current_node, $new_node); } +sub read_rules_config { + my ($self) = @_; + + return $self->{plug}->read_rules_config(); +} + sub read_group_config { my ($self) = @_; diff --git a/src/PVE/HA/Env/PVE2.pm b/src/PVE/HA/Env/PVE2.pm index 1de4b69..3157e56 100644 --- a/src/PVE/HA/Env/PVE2.pm +++ b/src/PVE/HA/Env/PVE2.pm @@ -28,6 +28,13 @@ PVE::HA::Resources::PVECT->register(); PVE::HA::Resources->init(); +use PVE::HA::Rules; +use PVE::HA::Rules::Colocation; + +PVE::HA::Rules::Colocation->register(); + +PVE::HA::Rules->init(); + my $lockdir = "/etc/pve/priv/lock"; sub new { @@ -188,6 +195,12 @@ sub steal_service { $self->cluster_state_update(); } +sub read_rules_config { + my ($self) = @_; + + return PVE::HA::Config::read_rules_config(); +} + sub read_group_config { my ($self) = @_; diff --git a/src/PVE/HA/Sim/Env.pm b/src/PVE/HA/Sim/Env.pm index b2ab231..2f73859 100644 --- a/src/PVE/HA/Sim/Env.pm +++ b/src/PVE/HA/Sim/Env.pm @@ -20,6 +20,13 @@ PVE::HA::Sim::Resources::VirtFail->register(); PVE::HA::Resources->init(); +use PVE::HA::Rules; +use PVE::HA::Rules::Colocation; + +PVE::HA::Rules::Colocation->register(); + +PVE::HA::Rules->init(); + sub new { my ($this, $nodename, $hardware, $log_id) = @_; @@ -245,6 +252,14 @@ sub exec_fence_agent { return $self->{hardware}->exec_fence_agent($agent, $node, @param); } +sub read_rules_config { + my ($self) = @_; + + $assert_cfs_can_rw->($self); + + return $self->{hardware}->read_rules_config(); +} + sub read_group_config { my ($self) = @_; diff --git a/src/PVE/HA/Sim/Hardware.pm b/src/PVE/HA/Sim/Hardware.pm index 859e0a3..24bc8b9 100644 --- a/src/PVE/HA/Sim/Hardware.pm +++ b/src/PVE/HA/Sim/Hardware.pm @@ -28,6 +28,7 @@ my $watchdog_timeout = 60; # $testdir/cmdlist Command list for simulation # $testdir/hardware_status Hardware description (number of nodes, ...) # $testdir/manager_status CRM status (start with {}) +# $testdir/rules_config Contraints / Rules configuration # $testdir/service_config Service configuration # $testdir/static_service_stats Static service usage information (cpu, memory) # $testdir/groups HA groups configuration @@ -319,6 +320,16 @@ sub read_crm_commands { return $self->global_lock($code); } +sub read_rules_config { + my ($self) = @_; + + my $filename = "$self->{statusdir}/rules_config"; + my $raw = ''; + $raw = PVE::Tools::file_get_contents($filename) if -f $filename; + + return PVE::HA::Rules->parse_config($filename, $raw); +} + sub read_group_config { my ($self) = @_; @@ -391,6 +402,10 @@ sub new { # copy initial configuartion copy("$testdir/manager_status", "$statusdir/manager_status"); # optional + if (-f "$testdir/rules_config") { + copy("$testdir/rules_config", "$statusdir/rules_config"); + } + if (-f "$testdir/groups") { copy("$testdir/groups", "$statusdir/groups"); } else { -- 2.39.5 _______________________________________________ pve-devel mailing list pve-devel@lists.proxmox.com https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel