From 2732fccfec42e6e2ae983ac26fc244e8a2ab8f51 Mon Sep 17 00:00:00 2001 From: Thomas Lamprecht Date: Tue, 24 Jan 2017 17:54:03 +0100 Subject: [PATCH] Resource/API: abort early if resource in error state If a service is in error state the single state change command that can make sense is setting the disabled request state. Thus abort on all other commands early to enhance user experience. --- src/PVE/API2/HA/Resources.pm | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/src/PVE/API2/HA/Resources.pm b/src/PVE/API2/HA/Resources.pm index 621c9e6..d57824b 100644 --- a/src/PVE/API2/HA/Resources.pm +++ b/src/PVE/API2/HA/Resources.pm @@ -34,6 +34,18 @@ my $api_copy_config = sub { return $scfg; }; +sub check_service_state { + my ($sid, $req_state) = @_; + + my $service_status = PVE::HA::Config::get_service_status($sid); + if ($service_status->{managed} && $service_status->{state} eq 'error') { + # service in error state, must get disabled before new state request + # can be executed + return if defined($req_state) && $req_state eq 'disabled'; + die "service '$sid' in error state, must be disabled and fixed first\n"; + } +} + __PACKAGE__->register_method ({ name => 'index', path => '', @@ -187,6 +199,8 @@ __PACKAGE__->register_method ({ if !$group_cfg->{ids}->{$group}; } + check_service_state($sid, $param->{state}); + PVE::HA::Config::lock_ha_domain( sub { @@ -288,6 +302,8 @@ __PACKAGE__->register_method ({ PVE::HA::Config::service_is_ha_managed($sid); + check_service_state($sid); + PVE::HA::Config::queue_crm_commands("migrate $sid $param->{node}"); return undef; @@ -319,6 +335,8 @@ __PACKAGE__->register_method ({ PVE::HA::Config::service_is_ha_managed($sid); + check_service_state($sid); + PVE::HA::Config::queue_crm_commands("relocate $sid $param->{node}"); return undef; -- 2.39.2