]> git.proxmox.com Git - pve-ha-manager.git/blobdiff - src/PVE/HA/LRM.pm
lrm: implement different behavior for shutdown and restart
[pve-ha-manager.git] / src / PVE / HA / LRM.pm
index 89177ee79411f00fa842641c25a2ec50d074495d..f4284657e51c8c2bd5b405496661cec64e9e6a7b 100644 (file)
@@ -43,9 +43,19 @@ sub new {
 sub shutdown_request {
     my ($self) = @_;
 
-    $self->{shutdown_request} = 1;
+    my $haenv = $self->{haenv};
+
+    my $shutdown = $haenv->is_poweroff();
+
+    if ($shutdown) {
+       $haenv->log('info', "shutdown LRM, stop all services");
+       $self->{mode} = 'shutdown';
+    } else {
+       $haenv->log('info', "restart LRM, freeze all services");
+       $self->{mode} = 'restart';
+    }
 
-    $self->{mode} = 'restart'; # fixme: detect shutdown/reboot
+    $self->{shutdown_request} = 1;
 
     eval { $self->update_lrm_status(); };
     if (my $err = $@) {
@@ -241,17 +251,21 @@ sub do_one_iteration {
 
            if ($self->{shutdown_request}) {
 
-               # fixme: request service stop or relocate ?
+               if ($self->{mode} eq 'restart') {
 
-               my $service_count = $self->active_service_count();
+                   my $service_count = $self->active_service_count();
 
-               if ($service_count == 0) {
+                   if ($service_count == 0) {
 
-                   if ($self->{ha_agent_wd}) {
-                       $haenv->watchdog_close($self->{ha_agent_wd});
-                       delete $self->{ha_agent_wd};
-                   }
+                       if ($self->{ha_agent_wd}) {
+                           $haenv->watchdog_close($self->{ha_agent_wd});
+                           delete $self->{ha_agent_wd};
+                       }
 
+                       $shutdown = 1;
+                   }
+               } else {
+                   # fixme: stop all services
                    $shutdown = 1;
                }
            } else {