diff --git a/heat/engine/clients/os/senlin.py b/heat/engine/clients/os/senlin.py index dfab28649f..8373961a25 100644 --- a/heat/engine/clients/os/senlin.py +++ b/heat/engine/clients/os/senlin.py @@ -44,6 +44,17 @@ class SenlinClientPlugin(client_plugin.ClientPlugin): spec['type'], spec['version'] = spec_type.split('-') return spec + def check_action_status(self, action_id): + action = self.client().get_action(action_id) + if action.status == 'SUCCEEDED': + return True + elif action.status == 'FAILED': + raise exception.ResourceInError( + status_reason=action.status_reason, + resource_status=action.status, + ) + return False + def is_not_found(self, ex): return isinstance(ex, exc.sdkexc.ResourceNotFound) diff --git a/heat/tests/clients/test_senlin_client.py b/heat/tests/clients/test_senlin_client.py index cd9393cbc2..510da80403 100644 --- a/heat/tests/clients/test_senlin_client.py +++ b/heat/tests/clients/test_senlin_client.py @@ -20,22 +20,30 @@ from senlinclient.common import exc class SenlinClientPluginTest(common.HeatTestCase): + def setUp(self): + super(SenlinClientPluginTest, self).setUp() + context = utils.dummy_context() + self.plugin = context.clients.client_plugin('senlin') + self.client = self.plugin.client() def test_cluster_get(self): - context = utils.dummy_context() - plugin = context.clients.client_plugin('senlin') - client = plugin.client() - self.assertIsNotNone(client.clusters) + self.assertIsNotNone(self.client.clusters) def test_is_bad_request(self): - context = utils.dummy_context() - plugin = context.clients.client_plugin('senlin') - self.assertTrue(plugin.is_bad_request( + self.assertTrue(self.plugin.is_bad_request( exc.sdkexc.HttpException(http_status=400))) - self.assertFalse(plugin.is_bad_request(Exception)) - self.assertFalse(plugin.is_bad_request( + self.assertFalse(self.plugin.is_bad_request(Exception)) + self.assertFalse(self.plugin.is_bad_request( exc.sdkexc.HttpException(http_status=404))) + def test_check_action_success(self): + mock_action = mock.MagicMock() + mock_action.status = 'SUCCEEDED' + mock_get = self.patchobject(self.client, 'get_action') + mock_get.return_value = mock_action + self.assertTrue(self.plugin.check_action_status('fake_id')) + mock_get.assert_called_once_with('fake_id') + class ProfileConstraintTest(common.HeatTestCase):