Merge "Check action status instead of node status for node creation"

This commit is contained in:
Jenkins 2016-08-26 07:01:37 +00:00 committed by Gerrit Code Review
commit c808d90069
2 changed files with 14 additions and 20 deletions

View File

@ -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:

View File

@ -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 = {