[pve-devel] [PATCH v2 ha-manager 02/12] Move code updating resource config from API2::HA::Resources to HA::Config

Fabian Ebner f.ebner at proxmox.com
Mon Sep 30 09:22:27 CEST 2019


This makes it easier to update the resource configuration from within the CRM/LRM stack,
which is needed for the new 'stop' command.

Signed-off-by: Fabian Ebner <f.ebner at proxmox.com>
---
 src/PVE/API2/HA/Resources.pm | 34 +--------------------------------
 src/PVE/HA/Config.pm         | 37 ++++++++++++++++++++++++++++++++++++
 2 files changed, 38 insertions(+), 33 deletions(-)

diff --git a/src/PVE/API2/HA/Resources.pm b/src/PVE/API2/HA/Resources.pm
index 22d7f28..2b62ee8 100644
--- a/src/PVE/API2/HA/Resources.pm
+++ b/src/PVE/API2/HA/Resources.pm
@@ -237,39 +237,7 @@ __PACKAGE__->register_method ({
 
 	check_service_state($sid, $param->{state});
 
-	PVE::HA::Config::lock_ha_domain(
-	    sub {
-
-		my $cfg = PVE::HA::Config::read_resources_config();
-
-		PVE::SectionConfig::assert_if_modified($cfg, $digest);
-
-		my $scfg = $cfg->{ids}->{$sid} ||
-		    die "no such resource '$sid'\n";
-
-		my $plugin = PVE::HA::Resources->lookup($scfg->{type});
-		my $opts = $plugin->check_config($sid, $param, 0, 1);
-
-		foreach my $k (%$opts) {
-		    $scfg->{$k} = $opts->{$k};
-		}
-
-		if ($delete) {
-		    my $options = $plugin->private()->{options}->{$type};
-		    foreach my $k (PVE::Tools::split_list($delete)) {
-			my $d = $options->{$k} ||
-			    die "no such option '$k'\n";
-			die "unable to delete required option '$k'\n"
-			    if !$d->{optional};
-			die "unable to delete fixed option '$k'\n"
-			    if $d->{fixed};
-			delete $scfg->{$k};
-		    }
-		}
-
-		PVE::HA::Config::write_resources_config($cfg)
-
-	    }, "update resource failed");
+	PVE::HA::Config::update_resources_config($digest, $delete, $sid, $param);
 
 	return undef;
     }});
diff --git a/src/PVE/HA/Config.pm b/src/PVE/HA/Config.pm
index ead1ee2..e800154 100644
--- a/src/PVE/HA/Config.pm
+++ b/src/PVE/HA/Config.pm
@@ -125,6 +125,43 @@ sub read_and_check_resources_config {
     return $conf;
 }
 
+sub update_resources_config {
+    my ($digest, $delete, $sid, $param) = @_;
+
+    lock_ha_domain(
+	sub {
+	    my $cfg = read_resources_config();
+	    ($sid, my $type, my $name) = parse_sid($sid);
+
+	    PVE::SectionConfig::assert_if_modified($cfg, $digest);
+
+	    my $scfg = $cfg->{ids}->{$sid} ||
+		die "no such resource '$sid'\n";
+
+	    my $plugin = PVE::HA::Resources->lookup($scfg->{type});
+	    my $opts = $plugin->check_config($sid, $param, 0, 1);
+
+	    foreach my $k (%$opts) {
+		$scfg->{$k} = $opts->{$k};
+	    }
+
+	    if ($delete) {
+		my $options = $plugin->private()->{options}->{$type};
+		foreach my $k (PVE::Tools::split_list($delete)) {
+		    my $d = $options->{$k} ||
+			die "no such option '$k'\n";
+		    die "unable to delete required option '$k'\n"
+			if !$d->{optional};
+		    die "unable to delete fixed option '$k'\n"
+			if $d->{fixed};
+		    delete $scfg->{$k};
+		}
+	    }
+
+	    write_resources_config($cfg);
+	}, "update resources config failed");
+}
+
 sub parse_sid {
     my ($sid) = @_;
 
-- 
2.20.1





More information about the pve-devel mailing list