Merge "Check action status instead of node status for node creation"
This commit is contained in:
commit
c808d90069
|
@ -98,20 +98,12 @@ class Node(resource.Resource):
|
|||
}
|
||||
|
||||
node = self.client().create_node(**params)
|
||||
action_id = node.location.split('/')[-1]
|
||||
self.resource_id_set(node.id)
|
||||
return node.id
|
||||
return action_id
|
||||
|
||||
def check_create_complete(self, resource_id):
|
||||
node = self.client().get_node(resource_id)
|
||||
if node.status == self.ACTIVE:
|
||||
return True
|
||||
elif node.status in [self.INIT, self.CREATING]:
|
||||
return False
|
||||
else:
|
||||
raise exception.ResourceInError(
|
||||
status_reason=node.status_reason,
|
||||
resource_status=node.status,
|
||||
)
|
||||
def check_create_complete(self, action_id):
|
||||
return self.client_plugin().check_action_status(action_id)
|
||||
|
||||
def handle_delete(self):
|
||||
if self.resource_id is not None:
|
||||
|
|
|
@ -52,6 +52,7 @@ class FakeNode(object):
|
|||
self.profile_id = "fake_profile"
|
||||
self.cluster_id = "fake_cluster"
|
||||
self.details = {'id': 'physical_object_id'}
|
||||
self.location = "actions/fake_action"
|
||||
|
||||
def to_dict(self):
|
||||
return {
|
||||
|
@ -70,6 +71,8 @@ class SenlinNodeTest(common.HeatTestCase):
|
|||
super(SenlinNodeTest, self).setUp()
|
||||
self.senlin_mock = mock.MagicMock()
|
||||
self.patchobject(sn.Node, 'client', return_value=self.senlin_mock)
|
||||
self.patchobject(senlin.SenlinClientPlugin, 'client',
|
||||
return_value=self.senlin_mock)
|
||||
self.patchobject(senlin.ProfileConstraint, 'validate',
|
||||
return_value=True)
|
||||
self.patchobject(senlin.ClusterConstraint, 'validate',
|
||||
|
@ -99,17 +102,18 @@ class SenlinNodeTest(common.HeatTestCase):
|
|||
}
|
||||
self.senlin_mock.create_node.assert_called_once_with(
|
||||
**expect_kwargs)
|
||||
self.senlin_mock.get_node.assert_called_once_with(self.fake_node.id)
|
||||
|
||||
def test_node_create_error(self):
|
||||
cfg.CONF.set_override('action_retry_limit', 0, enforce_type=True)
|
||||
self.senlin_mock.create_node.return_value = self.fake_node
|
||||
self.senlin_mock.get_node.return_value = FakeNode(
|
||||
status='ERROR')
|
||||
mock_action = mock.MagicMock()
|
||||
mock_action.status = 'FAILED'
|
||||
mock_action.status_reason = 'oops'
|
||||
self.senlin_mock.get_action.return_value = mock_action
|
||||
create_task = scheduler.TaskRunner(self.node.create)
|
||||
ex = self.assertRaises(exception.ResourceFailure, create_task)
|
||||
expected = ('ResourceInError: resources.senlin-node: '
|
||||
'Went to status ERROR due to "Unknown"')
|
||||
'Went to status FAILED due to "oops"')
|
||||
self.assertEqual(expected, six.text_type(ex))
|
||||
|
||||
def test_node_delete_success(self):
|
||||
|
@ -147,8 +151,7 @@ class SenlinNodeTest(common.HeatTestCase):
|
|||
}
|
||||
self.senlin_mock.update_node.assert_called_once_with(
|
||||
node.resource_id, **node_update_kwargs)
|
||||
self.senlin_mock.get_action.assert_called_once_with(
|
||||
'fake-action')
|
||||
self.assertEqual(2, self.senlin_mock.get_action.call_count)
|
||||
|
||||
def test_node_update_failed(self):
|
||||
node = self._create_node()
|
||||
|
@ -167,8 +170,7 @@ class SenlinNodeTest(common.HeatTestCase):
|
|||
'status FAILED due to "oops"')
|
||||
self.assertEqual(expected, six.text_type(ex))
|
||||
self.assertEqual((node.UPDATE, node.FAILED), node.state)
|
||||
self.senlin_mock.get_action.assert_called_once_with(
|
||||
'fake-action')
|
||||
self.assertEqual(2, self.senlin_mock.get_action.call_count)
|
||||
|
||||
def test_cluster_resolve_attribute(self):
|
||||
excepted_show = {
|
||||
|
|
Loading…
Reference in New Issue