applied On Tue, Jan 24, 2017 at 05:54:03PM +0100, Thomas Lamprecht wrote: > 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. > --- > > changes since v1: > * factored out the error check in a function > > 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.1.4
_______________________________________________ pve-devel mailing list pve-devel@pve.proxmox.com http://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-devel