Fix AWS::EC2::VPC resource delete failure

Check resource_id is not None before deleting the resource.

Change-Id: Ib8e8de5badc54c79cee248a9fcc86ebc50397b00
Closes-bug: #1365924
This commit is contained in:
huangtianhua 2014-09-05 18:16:46 +08:00
parent 35d7465c11
commit d870865ffb
2 changed files with 26 additions and 4 deletions

View File

@ -78,9 +78,8 @@ class VPC(resource.Resource):
router_props = {'name': self.physical_resource_name()}
net = client.create_network({'network': net_props})['network']
client.create_router({'router': router_props})['router']
self.resource_id_set(net['id'])
client.create_router({'router': router_props})['router']
@staticmethod
def network_for_vpc(client, network_id):
@ -109,10 +108,14 @@ class VPC(resource.Resource):
return neutron.NeutronResource.is_built(router)
def handle_delete(self):
if self.resource_id is None:
return
client = self.neutron()
router = self.router_for_vpc(client, self.resource_id)
try:
client.delete_router(router['id'])
router = self.router_for_vpc(client, self.resource_id)
if router:
client.delete_router(router['id'])
except Exception as ex:
self.client_plugin().ignore_not_found(ex)

View File

@ -346,6 +346,13 @@ Resources:
Properties: {CidrBlock: '10.0.0.0/16'}
'''
def mock_create_network_failed(self):
self.vpc_name = utils.PhysName('test_stack', 'the_vpc')
neutronclient.Client.create_network(
{
'network': {'name': self.vpc_name}
}).AndRaise(NeutronClientException())
def test_vpc(self):
self.mock_create_network()
self.mock_delete_network()
@ -358,6 +365,18 @@ Resources:
scheduler.TaskRunner(vpc.delete)()
self.m.VerifyAll()
def test_vpc_delete_successful_if_created_failed(self):
self.mock_create_network_failed()
self.m.ReplayAll()
t = template_format.parse(self.test_template)
stack = self.parse_stack(t)
scheduler.TaskRunner(stack.create)()
self.assertEqual(stack.state, (stack.CREATE, stack.FAILED))
scheduler.TaskRunner(stack.delete)()
self.m.VerifyAll()
class SubnetTest(VPCTestBase):