]> git.proxmox.com Git - pve-ha-manager.git/blobdiff - src/PVE/HA/Env.pm
Env: add get_ha_settings method
[pve-ha-manager.git] / src / PVE / HA / Env.pm
index b345f682c6fbd0fc2275793abb5e1d33c9a0ca5d..a173deba47f57de3fb7e9f7721b8fe6311e81094 100644 (file)
@@ -26,6 +26,12 @@ sub nodename {
     return $self->{plug}->nodename();
 }
 
+sub hardware {
+    my ($self) = @_;
+
+    return $self->{plug}->hardware();
+}
+
 # manager status is stored on cluster, protected by ha_manager_lock
 sub read_manager_status {
     my ($self) = @_;
@@ -54,6 +60,14 @@ sub write_lrm_status {
     return $self->{plug}->write_lrm_status($status_obj);
 }
 
+# check if we do node shutdown
+# we used this to decide if services should be stopped or freezed
+sub is_node_shutdown {
+    my ($self) = @_;
+
+    return $self->{plug}->is_node_shutdown();
+}
+
 # implement a way to send commands to the CRM master
 sub queue_crm_commands {
     my ($self, $cmd) = @_;
@@ -73,10 +87,35 @@ sub read_service_config {
     return $self->{plug}->read_service_config();
 }
 
-sub change_service_location {
+sub parse_sid {
+    my ($self, $sid) = @_;
+
+    return $self->{plug}->parse_sid($sid);
+}
+
+sub read_fence_config {
+    my ($self) = @_;
+
+    return $self->{plug}->read_fence_config();
+}
+
+sub fencing_mode {
+    my ($self) = @_;
+
+    return $self->{plug}->fencing_mode();
+}
+
+sub exec_fence_agent {
+    my ($self, $agent, $node, @param) = @_;
+
+    return $self->{plug}->exec_fence_agent($agent, $node, @param);
+}
+
+# this is normally only allowed by the master to recover a _fenced_ service
+sub steal_service {
     my ($self, $sid, $current_node, $new_node) = @_;
 
-    return $self->{plug}->change_service_location($sid, $current_node, $new_node);
+    return $self->{plug}->steal_service($sid, $current_node, $new_node);
 }
 
 sub read_group_config {
@@ -99,20 +138,44 @@ sub log {
     return $self->{plug}->log($level, @args);
 }
 
-# aquire a cluster wide manager lock 
+sub sendmail {
+    my ($self, $subject, $text) = @_;
+
+    return $self->{plug}->sendmail($subject, $text);
+}
+
+# acquire a cluster wide manager lock
 sub get_ha_manager_lock {
     my ($self) = @_;
 
     return $self->{plug}->get_ha_manager_lock();
 }
 
-# aquire a cluster wide node agent lock 
+# release the cluster wide manager lock.
+# when released another CRM may step up and get the lock, thus this should only
+# get called when shutting down/deactivating the current master
+sub release_ha_manager_lock {
+    my ($self) = @_;
+
+    return $self->{plug}->release_ha_manager_lock();
+}
+
+# acquire a cluster wide node agent lock
 sub get_ha_agent_lock {
     my ($self, $node) = @_;
 
     return $self->{plug}->get_ha_agent_lock($node);
 }
 
+# release the respective node agent lock.
+# this should only get called if the nodes LRM gracefully shuts down with
+# all services already cleanly stopped!
+sub release_ha_agent_lock {
+    my ($self) = @_;
+
+    return $self->{plug}->release_ha_agent_lock();
+}
+
 # return true when cluster is quorate
 sub quorate {
     my ($self) = @_;
@@ -152,6 +215,12 @@ sub loop_end_hook {
     return $self->{plug}->loop_end_hook(@args);
 }
 
+sub cluster_state_update {
+    my ($self) = @_;
+
+    return $self->{plug}->cluster_state_update();
+}
+
 sub watchdog_open {
     my ($self) = @_;
 
@@ -173,17 +242,25 @@ sub watchdog_close {
     return $self->{plug}->watchdog_close($wfh);
 }
 
-sub exec_resource_agent {
-    my ($self, $sid, $service_config, $cmd, @params) = @_;
+sub after_fork {
+    my ($self) = @_;
+
+    return $self->{plug}->after_fork();
+}
+
+# maximal number of workers to fork,
+# return 0 as a hack to support regression tests
+sub get_max_workers {
+    my ($self) = @_;
 
-    return $self->{plug}->exec_resource_agent($sid, $service_config, $cmd, @params)
+    return $self->{plug}->get_max_workers();
 }
 
-# hack to support regression tests
-sub can_fork {
+# return cluster wide enforced HA settings
+sub get_ha_settings {
     my ($self) = @_;
 
-    return $self->{plug}->can_fork();
+    return $self->{plug}->get_ha_settings();
 }
 
 1;