]> git.proxmox.com Git - pve-ha-manager.git/commitdiff
fix #1919, #1920: improve handling zombie (without node) services
authorThomas Lamprecht <t.lamprecht@proxmox.com>
Sat, 5 Oct 2019 16:52:04 +0000 (18:52 +0200)
committerThomas Lamprecht <t.lamprecht@proxmox.com>
Sat, 5 Oct 2019 16:58:26 +0000 (18:58 +0200)
Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
src/PVE/API2/HA/Status.pm
src/PVE/HA/Config.pm
src/PVE/HA/Tools.pm

index ff37fc0664828d12de852c358bc6a69136a3f73c..2e7c5285e94fc3f17935c8a388406bc215cb0306 100644 (file)
@@ -157,9 +157,10 @@ __PACKAGE__->register_method ({
            } else {
                $data->{node} = $sc->{node};
            }
+           my $node = $data->{node} // '---'; # to be save against manual tinkering
 
            $data->{state} = PVE::HA::Tools::get_verbose_service_state($ss, $sc);
-           $data->{status} = "$sid ($data->{node}, $data->{state})"; # backward compatibility
+           $data->{status} = "$sid ($node, $data->{state})"; # backward compat. and CLI
 
            # also return common resource attributes
            if (defined($sc)) {
index 2deef10956c6dfa177a8249ae5cc952908f14732..d849e8f4e2fdcccc0065fff39c397b51d0565d9f 100644 (file)
@@ -109,11 +109,9 @@ sub read_and_check_resources_config {
                $d->{node} = $vmd->{node};
                $conf->{$sid} = $d;
            } else {
-               if (defined($d->{node})) {
-                   $conf->{$sid} = $d;
-               } else {
-                   warn "service '$sid' without node\n";
-               }
+               # undef $d->{node} is handled in get_verbose_service_state and
+               # status API, don't spam logs or ignore it; allow to delete it!
+               $conf->{$sid} = $d;
            }
        }
     }
index eabe6bd23e06bd1ef9dcfb151ba8a09fe773e0d9..81785efbd3f5d9c6086d26d09e4f89bf098ab5c6 100644 (file)
@@ -133,6 +133,8 @@ sub get_verbose_service_state {
     my $req = $service_conf->{state} // 'ignored';
     return 'ignored' if $req eq 'ignored';
 
+    return 'not found' if !defined($service_conf->{node});
+
     # service not yet processed by manager
     return 'queued' if !defined($service_state);
     my $cur = $service_state->{state};