]> git.proxmox.com Git - pve-ha-manager.git/commitdiff
factor out service configured/delete helpers
authorThomas Lamprecht <t.lamprecht@proxmox.com>
Thu, 12 Mar 2020 11:50:04 +0000 (12:50 +0100)
committerThomas Lamprecht <t.lamprecht@proxmox.com>
Thu, 12 Mar 2020 11:50:07 +0000 (12:50 +0100)
those differ from the "managed" service in that that they do not
check the state at all, the just check if, or respectively delete, a
SID is in the config or not.

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
src/PVE/API2/HA/Resources.pm
src/PVE/HA/Config.pm

index 5c11d8bfff5abbf4c5b415281e1f422fc6286850..2c62f5e6feb8b05b33140b6df7cc26cd915a73d4 100644 (file)
@@ -264,21 +264,11 @@ __PACKAGE__->register_method ({
 
        my ($sid, $type, $name) = PVE::HA::Config::parse_sid(extract_param($param, 'sid'));
 
-       my $cfg = PVE::HA::Config::read_resources_config();
-
-       # cannot use service_is_ha_managed as it ignores 'ignored' services,
-       # see bug report #1602
-       if (!defined($cfg->{ids}) || !defined($cfg->{ids}->{$sid})) {
+       if (!PVE::HA::Config::service_is_configured($sid)) {
            die "cannot delete service '$sid', not HA managed!\n";
        }
 
-       PVE::HA::Config::lock_ha_domain(sub {
-
-           $cfg = PVE::HA::Config::read_resources_config();
-           delete $cfg->{ids}->{$sid} or die "'$sid' not configured!\n";
-           PVE::HA::Config::write_resources_config($cfg);
-
-       }, "delete resource failed");
+       PVE::HA::Config::delete_service_from_config($sid);
 
        return undef;
     }});
index e4b71810ce3feb5534590757c963faa5da9ef173..993b456b1377eb17e6681131e2f2854f1bcb061f 100644 (file)
@@ -288,6 +288,34 @@ my $service_check_ha_state = sub {
     return undef;
 };
 
+# cannot use service_is_ha_managed as it skips 'ignored' services, see bug #1602
+sub service_is_configured {
+    my ($sid) = @_;
+
+    my $conf = read_resources_config();
+    if (defined($conf->{ids}) && defined($conf->{ids}->{$sid})) {
+       return 1;
+    }
+    return 0;
+}
+
+# graceful, as long as locking + cfs_write works
+sub delete_service_from_config {
+    my ($sid) = @_;
+
+    return 1 if !service_is_configured($sid);
+
+    my $res;
+    PVE::HA::Config::lock_ha_domain(sub {
+       my $conf = read_resources_config();
+       $res = delete $conf->{ids}->{$sid};
+       write_resources_config($conf);
+
+    }, "delete resource failed");
+
+    return !!$res;
+}
+
 sub vm_is_ha_managed {
     my ($vmid, $has_state) = @_;