Fix KeyError exception when stack snapshot deletion
There is no 'backup_id' data in snapshot if the cinder volume snapshot failed. This patch will use 'get' instead __getitem__ to get the 'backup_id' data to avoid KeyError exception raise. Change-Id: Iae7e22ccdaf8f48a85d90afac3a38011f14cbd34 Closes-Bug: #1465173
This commit is contained in:
parent
7d9b5a265f
commit
f500132879
|
@ -394,7 +394,9 @@ class CinderVolume(vb.BaseVolume):
|
||||||
raise exception.Error(backup.fail_reason)
|
raise exception.Error(backup.fail_reason)
|
||||||
|
|
||||||
def handle_delete_snapshot(self, snapshot):
|
def handle_delete_snapshot(self, snapshot):
|
||||||
backup_id = snapshot['resource_data']['backup_id']
|
backup_id = snapshot['resource_data'].get('backup_id')
|
||||||
|
if not backup_id:
|
||||||
|
return
|
||||||
try:
|
try:
|
||||||
self.client().backups.delete(backup_id)
|
self.client().backups.delete(backup_id)
|
||||||
except Exception as ex:
|
except Exception as ex:
|
||||||
|
|
|
@ -22,6 +22,7 @@ from heat.common import exception
|
||||||
from heat.common import template_format
|
from heat.common import template_format
|
||||||
from heat.engine.clients.os import cinder
|
from heat.engine.clients.os import cinder
|
||||||
from heat.engine.clients.os import glance
|
from heat.engine.clients.os import glance
|
||||||
|
from heat.engine.resources.openstack.cinder import volume as c_vol
|
||||||
from heat.engine import rsrc_defn
|
from heat.engine import rsrc_defn
|
||||||
from heat.engine import scheduler
|
from heat.engine import scheduler
|
||||||
from heat.objects import resource_data as resource_data_object
|
from heat.objects import resource_data as resource_data_object
|
||||||
|
@ -1044,3 +1045,16 @@ class CinderVolumeTest(vt_base.BaseVolumeTest):
|
||||||
self.assertEqual((stack.RESTORE, stack.COMPLETE), stack.state)
|
self.assertEqual((stack.RESTORE, stack.COMPLETE), stack.state)
|
||||||
|
|
||||||
self.m.VerifyAll()
|
self.m.VerifyAll()
|
||||||
|
|
||||||
|
def test_handle_delete_snapshot_no_backup(self):
|
||||||
|
stack_name = 'test_handle_delete_snapshot_no_backup'
|
||||||
|
mock_vs = {
|
||||||
|
'resource_data': {}
|
||||||
|
}
|
||||||
|
t = template_format.parse(single_cinder_volume_template)
|
||||||
|
stack = utils.parse_stack(t, stack_name=stack_name)
|
||||||
|
rsrc = c_vol.CinderVolume(
|
||||||
|
'volume',
|
||||||
|
stack.t.resource_definitions(stack)['volume'],
|
||||||
|
stack)
|
||||||
|
self.assertIsNone(rsrc.handle_delete_snapshot(mock_vs))
|
||||||
|
|
Loading…
Reference in New Issue