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.k...@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