Not set instance to ERROR if set_admin_password failed
In some cases, an instance will be set to ERROR state when
set_admin_password failed (some Exception like Forbidden)
this is inconsistent to other exceptions and also
set_admin_password is a sync call from API to compute,
we can simply return the error to the upper layer (operator or
user) to avoid make user run reset to restore instance
status since no changes to guest at all.
Change-Id: If1c901b974bc7295927b3f033a04eaa6ac36f603
Closes-Bug: 1757061
(cherry picked from commit 513f2d3d25
)
This commit is contained in:
parent
3e07bcb327
commit
58ed9bc606
|
@ -3404,7 +3404,6 @@ class ComputeManager(manager.Manager):
|
|||
except Exception:
|
||||
# Catch all here because this could be anything.
|
||||
LOG.exception('set_admin_password failed', instance=instance)
|
||||
self._set_instance_obj_error_state(context, instance)
|
||||
# We create a new exception here so that we won't
|
||||
# potentially reveal password information to the
|
||||
# API caller. The real exception is logged above
|
||||
|
|
|
@ -3265,14 +3265,9 @@ class ComputeManagerUnitTestCase(test.NoDBTestCase):
|
|||
instance=instance,
|
||||
new_pass=None)
|
||||
|
||||
if (expected_exception == exception.SetAdminPasswdNotSupported or
|
||||
expected_exception == exception.InstanceAgentNotEnabled or
|
||||
expected_exception == NotImplementedError):
|
||||
if expected_exception != exception.InstancePasswordSetFailed:
|
||||
instance_save_mock.assert_called_once_with(
|
||||
expected_task_state=task_states.UPDATING_PASSWORD)
|
||||
else:
|
||||
# setting the instance to error state
|
||||
instance_save_mock.assert_called_once_with()
|
||||
|
||||
self.assertEqual(expected_vm_state, instance.vm_state)
|
||||
# check revert_task_state decorator
|
||||
|
@ -3290,7 +3285,7 @@ class ComputeManagerUnitTestCase(test.NoDBTestCase):
|
|||
exc = exception.Forbidden('Internal error')
|
||||
expected_exception = exception.InstancePasswordSetFailed
|
||||
self._do_test_set_admin_password_driver_error(
|
||||
exc, vm_states.ERROR, None, expected_exception)
|
||||
exc, vm_states.ACTIVE, None, expected_exception)
|
||||
|
||||
def test_set_admin_password_driver_not_implemented(self):
|
||||
# Ensure expected exception is raised if set_admin_password not
|
||||
|
|
Loading…
Reference in New Issue