Merge "Add check for server existence on software deployment delete"
This commit is contained in:
commit
e0dfb1a40a
|
@ -298,6 +298,16 @@ class SoftwareDeployment(signal_responder.SignalResponder):
|
|||
LOG.info(message)
|
||||
raise exception.Error(message)
|
||||
|
||||
def _server_exists(self, sd):
|
||||
"""Returns whether or not the deployment's server exists."""
|
||||
nova_client = self.client_plugin('nova')
|
||||
|
||||
try:
|
||||
nova_client.get_server(sd['server_id'])
|
||||
return True
|
||||
except exception.EntityNotFound:
|
||||
return False
|
||||
|
||||
def empty_config(self):
|
||||
return ''
|
||||
|
||||
|
@ -467,7 +477,7 @@ class SoftwareDeployment(signal_responder.SignalResponder):
|
|||
self.rpc_client().ignore_error_named(ex, 'NotFound')
|
||||
|
||||
def check_delete_complete(self, sd=None):
|
||||
if not sd or self._check_complete():
|
||||
if not sd or not self._server_exists(sd) or self._check_complete():
|
||||
self._delete_resource()
|
||||
return True
|
||||
|
||||
|
|
|
@ -637,13 +637,14 @@ class SoftwareDeploymentTest(common.HeatTestCase):
|
|||
|
||||
self.mock_software_config()
|
||||
derived_sc = self.mock_derived_software_config()
|
||||
sd = self.mock_deployment()
|
||||
mock_sd = self.mock_deployment()
|
||||
mock_sd['server_id'] = 'b509edfb-1448-4b57-8cb1-2e31acccbb8a'
|
||||
|
||||
self.deployment.resource_id = 'c8a19429-7fde-47ea-a42f-40045488226c'
|
||||
|
||||
self.rpc_client.show_software_deployment.return_value = sd
|
||||
self.rpc_client.update_software_deployment.return_value = sd
|
||||
self.assertEqual(sd, self.deployment.handle_delete())
|
||||
self.rpc_client.show_software_deployment.return_value = mock_sd
|
||||
self.rpc_client.update_software_deployment.return_value = mock_sd
|
||||
self.assertEqual(mock_sd, self.deployment.handle_delete())
|
||||
self.assertEqual({
|
||||
'deployment_id': 'c8a19429-7fde-47ea-a42f-40045488226c',
|
||||
'action': 'DELETE',
|
||||
|
@ -652,11 +653,34 @@ class SoftwareDeploymentTest(common.HeatTestCase):
|
|||
'status_reason': 'Deploy data available'},
|
||||
self.rpc_client.update_software_deployment.call_args[1])
|
||||
|
||||
sd['status'] = self.deployment.IN_PROGRESS
|
||||
self.assertFalse(self.deployment.check_delete_complete(sd))
|
||||
mock_sd['status'] = self.deployment.IN_PROGRESS
|
||||
self.assertFalse(self.deployment.check_delete_complete(mock_sd))
|
||||
|
||||
sd['status'] = self.deployment.COMPLETE
|
||||
self.assertTrue(self.deployment.check_delete_complete(sd))
|
||||
mock_sd['status'] = self.deployment.COMPLETE
|
||||
self.assertTrue(self.deployment.check_delete_complete(mock_sd))
|
||||
|
||||
def test_delete_complete_missing_server(self):
|
||||
"""Tests deleting a deployment when the server disappears"""
|
||||
self._create_stack(self.template_delete_suspend_resume)
|
||||
|
||||
self.mock_software_config()
|
||||
mock_sd = self.mock_deployment()
|
||||
mock_sd['server_id'] = 'b509edfb-1448-4b57-8cb1-2e31acccbb8a'
|
||||
|
||||
# Simulate Nova not knowing about the server
|
||||
mock_get_server = self.patchobject(
|
||||
nova.NovaClientPlugin, 'get_server',
|
||||
side_effect=exc.EntityNotFound)
|
||||
|
||||
self.deployment.resource_id = 'c8a19429-7fde-47ea-a42f-40045488226c'
|
||||
|
||||
self.rpc_client.show_software_deployment.return_value = mock_sd
|
||||
self.rpc_client.update_software_deployment.return_value = mock_sd
|
||||
|
||||
mock_sd['status'] = self.deployment.COMPLETE
|
||||
self.assertTrue(self.deployment.check_delete_complete(mock_sd))
|
||||
|
||||
mock_get_server.assert_called_once_with(mock_sd['server_id'])
|
||||
|
||||
def test_handle_delete_notfound(self):
|
||||
self._create_stack(self.template)
|
||||
|
@ -1191,6 +1215,31 @@ class SoftwareDeploymentTest(common.HeatTestCase):
|
|||
self.deployment._delete_zaqar_signal_queue()
|
||||
self.assertEqual(2, len(self.deployment.data_delete.mock_calls))
|
||||
|
||||
def test_server_exists(self):
|
||||
# Setup
|
||||
self._create_stack(self.template_delete_suspend_resume)
|
||||
mock_sd = {'server_id': 'b509edfb-1448-4b57-8cb1-2e31acccbb8a'}
|
||||
|
||||
# For a success case, this doesn't raise an exception
|
||||
self.patchobject(nova.NovaClientPlugin, 'get_server')
|
||||
|
||||
# Test
|
||||
result = self.deployment._server_exists(mock_sd)
|
||||
self.assertTrue(result)
|
||||
|
||||
def test_server_exists_no_server(self):
|
||||
# Setup
|
||||
self._create_stack(self.template_delete_suspend_resume)
|
||||
mock_sd = {'server_id': 'b509edfb-1448-4b57-8cb1-2e31acccbb8a'}
|
||||
|
||||
# For a success case, this doesn't raise an exception
|
||||
self.patchobject(nova.NovaClientPlugin, 'get_server',
|
||||
side_effect=exc.EntityNotFound)
|
||||
|
||||
# Test
|
||||
result = self.deployment._server_exists(mock_sd)
|
||||
self.assertFalse(result)
|
||||
|
||||
|
||||
class SoftwareDeploymentGroupTest(common.HeatTestCase):
|
||||
|
||||
|
|
Loading…
Reference in New Issue