5
0
mirror of git://git.proxmox.com/git/pve-ha-manager.git synced 2025-01-04 09:17:59 +03:00

add Usage base plugin and Usage::Basic plugin

in preparation to also support static resource scheduling via another
such Usage plugin.

The interface is designed in anticipation of the Usage::Static plugin,
the Usage::Basic plugin doesn't require all parameters.

In Usage::Static, the $haenv will necessary for logging and getting
the static node stats. add_service_usage_to_node() and
score_nodes_to_start_service() take the sid, service node and the
former also the optional migration target (during a migration it's not
clear whether the config file has already been moved or not) to be
able to get the static service stats.

Signed-off-by: Fiona Ebner <f.ebner@proxmox.com>
This commit is contained in:
Fiona Ebner 2022-11-17 15:00:04 +01:00 committed by Thomas Lamprecht
parent eea0c60923
commit c8c6e462fc
5 changed files with 111 additions and 1 deletions

View File

@ -33,5 +33,7 @@
/usr/share/perl5/PVE/HA/Resources/PVECT.pm
/usr/share/perl5/PVE/HA/Resources/PVEVM.pm
/usr/share/perl5/PVE/HA/Tools.pm
/usr/share/perl5/PVE/HA/Usage.pm
/usr/share/perl5/PVE/HA/Usage/Basic.pm
/usr/share/perl5/PVE/Service/pve_ha_crm.pm
/usr/share/perl5/PVE/Service/pve_ha_lrm.pm

View File

@ -1,5 +1,5 @@
SIM_SOURCES=CRM.pm Env.pm Groups.pm Resources.pm LRM.pm Manager.pm \
NodeStatus.pm Tools.pm FenceConfig.pm Fence.pm
NodeStatus.pm Tools.pm FenceConfig.pm Fence.pm Usage.pm
SOURCES=${SIM_SOURCES} Config.pm
@ -8,6 +8,7 @@ install:
install -d -m 0755 ${DESTDIR}${PERLDIR}/PVE/HA
for i in ${SOURCES}; do install -D -m 0644 $$i ${DESTDIR}${PERLDIR}/PVE/HA/$$i; done
make -C Resources install
make -C Usage install
make -C Env install
.PHONY: installsim

49
src/PVE/HA/Usage.pm Normal file
View File

@ -0,0 +1,49 @@
package PVE::HA::Usage;
use strict;
use warnings;
sub new {
my ($class, $haenv) = @_;
die "implement in subclass";
}
sub add_node {
my ($self, $nodename) = @_;
die "implement in subclass";
}
sub remove_node {
my ($self, $nodename) = @_;
die "implement in subclass";
}
sub list_nodes {
my ($self) = @_;
die "implement in subclass";
}
sub contains_node {
my ($self, $nodename) = @_;
die "implement in subclass";
}
sub add_service_usage_to_node {
my ($self, $nodename, $sid, $service_node, $migration_target) = @_;
die "implement in subclass";
}
# Returns a hash with $nodename => $score pairs. A lower $score is better.
sub score_nodes_to_start_service {
my ($self, $sid, $service_node) = @_;
die "implement in subclass";
}
1;

52
src/PVE/HA/Usage/Basic.pm Normal file
View File

@ -0,0 +1,52 @@
package PVE::HA::Usage::Basic;
use strict;
use warnings;
use base qw(PVE::HA::Usage);
sub new {
my ($class, $haenv) = @_;
return bless {
nodes => {},
}, $class;
}
sub add_node {
my ($self, $nodename) = @_;
$self->{nodes}->{$nodename} = 0;
}
sub remove_node {
my ($self, $nodename) = @_;
delete $self->{nodes}->{$nodename};
}
sub list_nodes {
my ($self) = @_;
return keys $self->{nodes}->%*;
}
sub contains_node {
my ($self, $nodename) = @_;
return defined($self->{nodes}->{$nodename});
}
sub add_service_usage_to_node {
my ($self, $nodename, $sid, $service_node, $migration_target) = @_;
$self->{nodes}->{$nodename}++;
}
sub score_nodes_to_start_service {
my ($self, $sid, $service_node) = @_;
return $self->{nodes};
}
1;

View File

@ -0,0 +1,6 @@
SOURCES=Basic.pm
.PHONY: install
install:
install -d -m 0755 ${DESTDIR}${PERLDIR}/PVE/HA/Usage
for i in ${SOURCES}; do install -D -m 0644 $$i ${DESTDIR}${PERLDIR}/PVE/HA/Usage/$$i; done