No need to detach if there is no attachment
If volume-attachment resource has not been created successful, no need to enter detach progress when deleting. Change-Id: Ic5e0146e10b113115dd49e0626897b70ba77d609 Closes-Bug: #1493772
This commit is contained in:
parent
a8ae73b35e
commit
a6ebd93119
@ -181,16 +181,23 @@ class BaseVolumeAttachment(resource.Resource):
|
||||
return self.client_plugin().check_attach_volume_complete(volume_id)
|
||||
|
||||
def handle_delete(self):
|
||||
server_id = self.properties[self.INSTANCE_ID]
|
||||
vol_id = self.properties[self.VOLUME_ID]
|
||||
self.client_plugin('nova').detach_volume(server_id,
|
||||
self.resource_id)
|
||||
prg = progress.VolumeDetachProgress(
|
||||
server_id, vol_id, self.resource_id)
|
||||
prg.called = True
|
||||
prg = None
|
||||
|
||||
if self.resource_id:
|
||||
server_id = self.properties[self.INSTANCE_ID]
|
||||
vol_id = self.properties[self.VOLUME_ID]
|
||||
self.client_plugin('nova').detach_volume(server_id,
|
||||
self.resource_id)
|
||||
prg = progress.VolumeDetachProgress(
|
||||
server_id, vol_id, self.resource_id)
|
||||
prg.called = True
|
||||
|
||||
return prg
|
||||
|
||||
def check_delete_complete(self, prg):
|
||||
if prg is None:
|
||||
return True
|
||||
|
||||
if not prg.cinder_complete:
|
||||
prg.cinder_complete = self.client_plugin(
|
||||
).check_detach_volume_complete(prg.vol_id)
|
||||
|
@ -22,6 +22,7 @@ from heat.common import exception
|
||||
from heat.common import template_format
|
||||
from heat.engine.clients.os import cinder
|
||||
from heat.engine.clients.os import glance
|
||||
from heat.engine.clients.os import nova
|
||||
from heat.engine.resources.openstack.cinder import volume as c_vol
|
||||
from heat.engine.resources import scheduler_hints as sh
|
||||
from heat.engine import rsrc_defn
|
||||
@ -889,6 +890,24 @@ class CinderVolumeTest(vt_base.BaseVolumeTest):
|
||||
self.assertEqual((rsrc.UPDATE, rsrc.COMPLETE), rsrc.state)
|
||||
self.m.VerifyAll()
|
||||
|
||||
def test_delete_attachment_has_not_been_created(self):
|
||||
stack_name = 'test_delete_attachment_has_not_been_created'
|
||||
stack = utils.parse_stack(self.t, stack_name=stack_name)
|
||||
resource_defn = stack.t.resource_definitions(stack)
|
||||
|
||||
att_rsrc = c_vol.CinderVolumeAttachment(
|
||||
'test_attachment',
|
||||
resource_defn['attachment'],
|
||||
stack)
|
||||
att_rsrc.state_set(att_rsrc.UPDATE, att_rsrc.COMPLETE)
|
||||
self.assertIsNone(att_rsrc.resource_id)
|
||||
# assert even not to create the novaclient instance
|
||||
nc = self.patchobject(nova.NovaClientPlugin, '_create')
|
||||
|
||||
scheduler.TaskRunner(att_rsrc.delete)()
|
||||
self.assertEqual(0, nc.call_count)
|
||||
self.assertEqual((att_rsrc.DELETE, att_rsrc.COMPLETE), att_rsrc.state)
|
||||
|
||||
def test_cinder_create_with_scheduler_hints(self):
|
||||
fv = vt_base.FakeVolume('creating')
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user