Merge "Don't snapshot if server hasn't been created yet"

This commit is contained in:
Jenkins 2015-11-27 09:35:50 +00:00 committed by Gerrit Code Review
commit bce7ce4af1
2 changed files with 44 additions and 13 deletions

View File

@ -1268,18 +1268,7 @@ class Server(stack_user.StackUser, sh.SchedulerHintsMixin,
zaqar.queue(queue_id).delete()
self.data_delete('metadata_queue_id')
def handle_snapshot_delete(self, state):
if state[0] != self.FAILED:
image_id = self.client().servers.create_image(
self.resource_id, self.physical_resource_name())
return progress.ServerDeleteProgress(
self.resource_id, image_id, False)
return self.handle_delete()
def handle_delete(self):
if self.resource_id is None:
return
def _delete(self):
if self.user_data_software_config():
self._delete_user()
self._delete_temp_url()
@ -1296,6 +1285,23 @@ class Server(stack_user.StackUser, sh.SchedulerHintsMixin,
return
return progress.ServerDeleteProgress(self.resource_id)
def handle_snapshot_delete(self, state):
if self.resource_id is None:
return
if state[1] != self.FAILED:
image_id = self.client().servers.create_image(
self.resource_id, self.physical_resource_name())
return progress.ServerDeleteProgress(
self.resource_id, image_id, False)
return self._delete()
def handle_delete(self):
if self.resource_id is None:
return
return self._delete()
def check_delete_complete(self, prg):
if not prg:
return True
@ -1306,7 +1312,7 @@ class Server(stack_user.StackUser, sh.SchedulerHintsMixin,
raise exception.Error(image.status)
elif image.status == 'ACTIVE':
prg.image_complete = True
if not self.handle_delete():
if not self._delete():
return True
return False

View File

@ -3829,6 +3829,31 @@ class ServersTest(common.HeatTestCase):
delete_server.assert_not_called()
def test_handle_snapshot_delete(self):
t = template_format.parse(wp_template)
t['Resources']['WebServer']['DeletionPolicy'] = 'Snapshot'
tmpl = template.Template(t)
stack = parser.Stack(
utils.dummy_context(), 'snapshot_policy', tmpl)
stack.store()
rsrc = stack['WebServer']
mock_plugin = self.patchobject(nova.NovaClientPlugin, '_create')
mock_plugin.return_value = self.fc
delete_server = self.patchobject(self.fc.servers, 'delete')
delete_server.side_effect = nova_exceptions.NotFound(404)
create_image = self.patchobject(self.fc.servers, 'create_image')
# test resource_id is None
rsrc.handle_snapshot_delete((rsrc.CREATE, rsrc.FAILED))
delete_server.assert_not_called()
create_image.assert_not_called()
# test has resource_id but state is CREATE_FAILED
rsrc.resource_id = '4567'
rsrc.handle_snapshot_delete((rsrc.CREATE, rsrc.FAILED))
delete_server.assert_called_once_with('4567')
create_image.assert_not_called()
class ServerInternalPortTest(common.HeatTestCase):
def setUp(self):