From: Fabian Ebner Date: Wed, 2 Oct 2019 09:46:02 +0000 (+0200) Subject: factor out resource config update from api to HA::Config X-Git-Url: https://git.proxmox.com/?p=pve-ha-manager.git;a=commitdiff_plain;h=1d9316ef542a3ab66bea89102208e27eaca6818b factor out resource config update from api to HA::Config 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 --- diff --git a/src/PVE/API2/HA/Resources.pm b/src/PVE/API2/HA/Resources.pm index 22d7f28..5c11d8b 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($sid, $param, $delete, $digest); return undef; }}); diff --git a/src/PVE/HA/Config.pm b/src/PVE/HA/Config.pm index ead1ee2..676eaaf 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 ($sid, $param, $delete, $digest) = @_; + + 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) = @_;