Merge "Minor changes to state model"
This commit is contained in:
@@ -175,6 +175,7 @@ class FSM(object):
|
||||
raise excp.InvalidState(_("Can not start from a terminal"
|
||||
" state '%s'") % (state))
|
||||
self._current = _Jump(state, None, None)
|
||||
self._target_state = self._states[state]['target']
|
||||
|
||||
def copy(self, shallow=False):
|
||||
"""Copies the current state machine (shallow or deep).
|
||||
|
||||
@@ -136,15 +136,17 @@ machine.add_state(ACTIVE, **watchers)
|
||||
machine.add_state(ERROR, **watchers)
|
||||
|
||||
# Add deploy* states
|
||||
machine.add_state(DEPLOYDONE, target=ACTIVE, **watchers)
|
||||
machine.add_state(DEPLOYING, target=DEPLOYDONE, **watchers)
|
||||
machine.add_state(DEPLOYWAIT, **watchers)
|
||||
machine.add_state(DEPLOYFAIL, **watchers)
|
||||
# NOTE(deva): Juno shows a target_provision_state of DEPLOYDONE
|
||||
# this is changed in Kilo to ACTIVE
|
||||
machine.add_state(DEPLOYING, target=ACTIVE, **watchers)
|
||||
machine.add_state(DEPLOYWAIT, target=ACTIVE, **watchers)
|
||||
machine.add_state(DEPLOYFAIL, target=ACTIVE, **watchers)
|
||||
|
||||
# Add delete* states
|
||||
machine.add_state(DELETED, target=NOSTATE, **watchers)
|
||||
machine.add_state(DELETING, target=DELETED, **watchers)
|
||||
|
||||
# NOTE(deva): Juno shows a target_provision_state of DELETED
|
||||
# this is changed in Kilo to AVAILABLE
|
||||
# TODO(deva): change NOSTATE to AVAILABLE here
|
||||
machine.add_state(DELETING, target=NOSTATE, **watchers)
|
||||
|
||||
# From NOSTATE, a deployment may be started
|
||||
machine.add_transition(NOSTATE, DEPLOYING, 'deploy')
|
||||
|
||||
@@ -1132,8 +1132,9 @@ class TestPut(api_base.FunctionalTest):
|
||||
|
||||
def test_provision_already_in_progress(self):
|
||||
node = obj_utils.create_test_node(self.context,
|
||||
uuid=utils.generate_uuid(),
|
||||
target_provision_state=states.ACTIVE)
|
||||
uuid=utils.generate_uuid(),
|
||||
provision_state=states.DEPLOYING,
|
||||
target_provision_state=states.ACTIVE)
|
||||
ret = self.put_json('/nodes/%s/states/provision' % node.uuid,
|
||||
{'target': states.ACTIVE},
|
||||
expect_errors=True)
|
||||
@@ -1143,7 +1144,7 @@ class TestPut(api_base.FunctionalTest):
|
||||
node = obj_utils.create_test_node(
|
||||
self.context, uuid=utils.generate_uuid(),
|
||||
provision_state=states.DEPLOYWAIT,
|
||||
target_provision_state=states.DEPLOYDONE)
|
||||
target_provision_state=states.ACTIVE)
|
||||
ret = self.put_json('/nodes/%s/states/provision' % node.uuid,
|
||||
{'target': states.DELETED})
|
||||
self.assertEqual(202, ret.status_code)
|
||||
|
||||
@@ -926,7 +926,8 @@ class DoNodeDeployTearDownTestCase(_ServiceSetUpMixin,
|
||||
# test when driver.deploy.deploy raises an exception
|
||||
mock_deploy.side_effect = exception.InstanceDeployFailure('test')
|
||||
node = obj_utils.create_test_node(self.context, driver='fake',
|
||||
provision_state=states.DEPLOYING)
|
||||
provision_state=states.DEPLOYING,
|
||||
target_provision_state=states.ACTIVE)
|
||||
task = task_manager.TaskManager(self.context, node.uuid)
|
||||
|
||||
self.assertRaises(exception.InstanceDeployFailure,
|
||||
@@ -934,7 +935,10 @@ class DoNodeDeployTearDownTestCase(_ServiceSetUpMixin,
|
||||
self.service.conductor.id)
|
||||
node.refresh()
|
||||
self.assertEqual(states.DEPLOYFAIL, node.provision_state)
|
||||
self.assertEqual(states.NOSTATE, node.target_provision_state)
|
||||
# NOTE(deva): failing a deploy does not clear the target state
|
||||
# any longer. Instead, it is cleared when the instance
|
||||
# is deleted.
|
||||
self.assertEqual(states.ACTIVE, node.target_provision_state)
|
||||
self.assertIsNotNone(node.last_error)
|
||||
mock_deploy.assert_called_once_with(mock.ANY)
|
||||
|
||||
@@ -944,7 +948,8 @@ class DoNodeDeployTearDownTestCase(_ServiceSetUpMixin,
|
||||
# test when driver.deploy.deploy returns DEPLOYDONE
|
||||
mock_deploy.return_value = states.DEPLOYDONE
|
||||
node = obj_utils.create_test_node(self.context, driver='fake',
|
||||
provision_state=states.DEPLOYING)
|
||||
provision_state=states.DEPLOYING,
|
||||
target_provision_state=states.ACTIVE)
|
||||
task = task_manager.TaskManager(self.context, node.uuid)
|
||||
|
||||
manager.do_node_deploy(task,
|
||||
@@ -968,7 +973,7 @@ class DoNodeDeployTearDownTestCase(_ServiceSetUpMixin,
|
||||
self.service._worker_pool.waitall()
|
||||
node.refresh()
|
||||
self.assertEqual(states.DEPLOYING, node.provision_state)
|
||||
self.assertEqual(states.DEPLOYDONE, node.target_provision_state)
|
||||
self.assertEqual(states.ACTIVE, node.target_provision_state)
|
||||
# This is a sync operation last_error should be None.
|
||||
self.assertIsNone(node.last_error)
|
||||
# Verify reservation has been cleared.
|
||||
@@ -986,7 +991,7 @@ class DoNodeDeployTearDownTestCase(_ServiceSetUpMixin,
|
||||
self.service._worker_pool.waitall()
|
||||
node.refresh()
|
||||
self.assertEqual(states.DEPLOYING, node.provision_state)
|
||||
self.assertEqual(states.DEPLOYDONE, node.target_provision_state)
|
||||
self.assertEqual(states.ACTIVE, node.target_provision_state)
|
||||
# last_error should be None.
|
||||
self.assertIsNone(node.last_error)
|
||||
# Verify reservation has been cleared.
|
||||
@@ -1004,7 +1009,7 @@ class DoNodeDeployTearDownTestCase(_ServiceSetUpMixin,
|
||||
self.service._worker_pool.waitall()
|
||||
node.refresh()
|
||||
self.assertEqual(states.DEPLOYING, node.provision_state)
|
||||
self.assertEqual(states.DEPLOYDONE, node.target_provision_state)
|
||||
self.assertEqual(states.ACTIVE, node.target_provision_state)
|
||||
# last_error should be None.
|
||||
self.assertIsNone(node.last_error)
|
||||
# Verify reservation has been cleared.
|
||||
@@ -1022,7 +1027,7 @@ class DoNodeDeployTearDownTestCase(_ServiceSetUpMixin,
|
||||
self.service._worker_pool.waitall()
|
||||
node.refresh()
|
||||
self.assertEqual(states.DEPLOYING, node.provision_state)
|
||||
self.assertEqual(states.DEPLOYDONE, node.target_provision_state)
|
||||
self.assertEqual(states.ACTIVE, node.target_provision_state)
|
||||
# last_error should be None.
|
||||
self.assertIsNone(node.last_error)
|
||||
# Verify reservation has been cleared.
|
||||
|
||||
Reference in New Issue
Block a user