From 63882b7bcbc55e411db26b4689f9cfe30d5a722b Mon Sep 17 00:00:00 2001 From: Steve Baker Date: Mon, 4 Mar 2013 10:49:37 +1300 Subject: [PATCH] Use quantum IDs for VPC, Subnet, RouteTable resources Previously the resource IDs were the resource names so an already existing quantum entity cannot be passed into a template. Fixes: bug #1142812 Change-Id: I9ea6561674d88dbbdd82b7c69400a70c529c4525 --- heat/engine/resources/internet_gateway.py | 4 +-- heat/engine/resources/network_interface.py | 13 ++++------ heat/engine/resources/route_table.py | 29 ++++++++-------------- heat/engine/resources/subnet.py | 11 ++++---- heat/engine/resources/vpc.py | 4 +-- heat/tests/test_vpc.py | 15 ++++------- 6 files changed, 30 insertions(+), 46 deletions(-) diff --git a/heat/engine/resources/internet_gateway.py b/heat/engine/resources/internet_gateway.py index 7c398c79..07460ff7 100644 --- a/heat/engine/resources/internet_gateway.py +++ b/heat/engine/resources/internet_gateway.py @@ -80,7 +80,7 @@ class VPCGatewayAttachment(resource.Resource): def handle_create(self): client = self.quantum() gateway = self.stack[self.properties.get('InternetGatewayId')] - vpc = self.stack[self.properties.get('VpcId')] + vpc = self.stack.resource_by_refid(self.properties.get('VpcId')) external_network_id = gateway.metadata['external_network_id'] for router_id in vpc.metadata['all_router_ids']: @@ -91,7 +91,7 @@ class VPCGatewayAttachment(resource.Resource): from quantumclient.common.exceptions import QuantumClientException client = self.quantum() - vpc = self.stack[self.properties.get('VpcId')] + vpc = self.stack.resource_by_refid(self.properties.get('VpcId')) for router_id in vpc.metadata['all_router_ids']: try: client.remove_gateway_router(router_id) diff --git a/heat/engine/resources/network_interface.py b/heat/engine/resources/network_interface.py index cb7659ba..03e5ac59 100644 --- a/heat/engine/resources/network_interface.py +++ b/heat/engine/resources/network_interface.py @@ -48,12 +48,12 @@ class NetworkInterface(resource.Resource): def handle_create(self): client = self.quantum() - subnet = self.stack[self.properties['SubnetId']] - fixed_ip = {'subnet_id': subnet.metadata['subnet_id']} + subnet = self.stack.resource_by_refid(self.properties['SubnetId']) + fixed_ip = {'subnet_id': self.properties['SubnetId']} if self.properties['PrivateIpAddress']: fixed_ip['ip_address'] = self.properties['PrivateIpAddress'] - network_id = subnet.metadata['network_id'] + network_id = subnet.properties.get('VpcId') props = { 'name': self.physical_resource_name(), 'admin_state_up': True, @@ -64,17 +64,14 @@ class NetworkInterface(resource.Resource): if self.properties['GroupSet']: props['security_groups'] = self.properties['GroupSet'] port = client.create_port({'port': props})['port'] - md = { - 'port_id': port['id'] - } - self.metadata = md + self.resource_id_set(port['id']) def handle_delete(self): from quantumclient.common.exceptions import QuantumClientException client = self.quantum() try: - client.delete_port(self.metadata['port_id']) + client.delete_port(self.resource_id) except QuantumClientException as ex: if ex.status_code != 404: raise ex diff --git a/heat/engine/resources/route_table.py b/heat/engine/resources/route_table.py index 81a710f1..1adde63e 100644 --- a/heat/engine/resources/route_table.py +++ b/heat/engine/resources/route_table.py @@ -47,25 +47,20 @@ class RouteTable(resource.Resource): props = {'name': self.physical_resource_name()} router = client.create_router({'router': props})['router'] - router_id = router['id'] - # add this router to the list of all routers in the VPC - vpc = self.stack[self.properties.get('VpcId')] + vpc = self.stack.resource_by_refid(self.properties.get('VpcId')) vpc_md = vpc.metadata - vpc_md['all_router_ids'].append(router_id) + vpc_md['all_router_ids'].append(router['id']) vpc.metadata = vpc_md # TODO sbaker all_router_ids has changed, any VPCGatewayAttachment # for this vpc needs to be notified - md = { - 'router_id': router_id - } - self.metadata = md + self.resource_id_set(router['id']) def handle_delete(self): client = self.quantum() - router_id = self.metadata['router_id'] + router_id = self.resource_id try: client.delete_router(router_id) except QuantumClientException as ex: @@ -73,7 +68,7 @@ class RouteTable(resource.Resource): raise ex # remove this router from the list of all routers in the VPC - vpc = self.stack[self.properties.get('VpcId')] + vpc = self.stack.resource_by_refid(self.properties.get('VpcId')) vpc_md = vpc.metadata vpc_md['all_router_ids'].remove(router_id) vpc.metadata = vpc_md @@ -101,12 +96,11 @@ class SubnetRouteTableAssocation(resource.Resource): def handle_create(self): client = self.quantum() - subnet = self.stack[self.properties.get('SubnetId')] - subnet_id = subnet.metadata['subnet_id'] + subnet = self.stack.resource_by_refid(self.properties.get('SubnetId')) + subnet_id = self.properties.get('SubnetId') previous_router_id = subnet.metadata['router_id'] - route_table = self.stack[self.properties.get('RouteTableId')] - router_id = route_table.metadata['router_id'] + router_id = self.properties.get('RouteTableId') #remove the default router association for this subnet. try: @@ -122,12 +116,11 @@ class SubnetRouteTableAssocation(resource.Resource): def handle_delete(self): client = self.quantum() - subnet = self.stack[self.properties.get('SubnetId')] - subnet_id = subnet.metadata['subnet_id'] + subnet = self.stack.resource_by_refid(self.properties.get('SubnetId')) + subnet_id = self.properties.get('SubnetId') default_router_id = subnet.metadata['default_router_id'] - route_table = self.stack[self.properties.get('RouteTableId')] - router_id = route_table.metadata['router_id'] + router_id = self.properties.get('RouteTableId') try: client.remove_interface_router(router_id, { diff --git a/heat/engine/resources/subnet.py b/heat/engine/resources/subnet.py index c1752ce2..a4e8a7c6 100644 --- a/heat/engine/resources/subnet.py +++ b/heat/engine/resources/subnet.py @@ -47,8 +47,8 @@ class Subnet(resource.Resource): def handle_create(self): client = self.quantum() # TODO sbaker Verify that this CidrBlock is within the vpc CidrBlock - vpc = self.stack[self.properties.get('VpcId')] - network_id = vpc.metadata['network_id'] + network_id = self.properties.get('VpcId') + vpc = self.stack.resource_by_refid(network_id) router_id = vpc.metadata['router_id'] props = { @@ -65,19 +65,18 @@ class Subnet(resource.Resource): router_id, {'subnet_id': subnet['id']}) md = { - 'network_id': network_id, 'router_id': router_id, - 'default_router_id': router_id, - 'subnet_id': subnet['id'] + 'default_router_id': router_id } self.metadata = md + self.resource_id_set(subnet['id']) def handle_delete(self): from quantumclient.common.exceptions import QuantumClientException client = self.quantum() router_id = self.metadata['router_id'] - subnet_id = self.metadata['subnet_id'] + subnet_id = self.resource_id #TODO sbaker check for a non-default router for this network # and remove that instead if it exists diff --git a/heat/engine/resources/vpc.py b/heat/engine/resources/vpc.py index f53014d9..24b5d804 100644 --- a/heat/engine/resources/vpc.py +++ b/heat/engine/resources/vpc.py @@ -50,17 +50,17 @@ class VPC(resource.Resource): net = client.create_network({'network': props})['network'] router = client.create_router({'router': props})['router'] md = { - 'network_id': net['id'], 'router_id': router['id'], 'all_router_ids': [router['id']] } self.metadata = md + self.resource_id_set(net['id']) def handle_delete(self): from quantumclient.common.exceptions import QuantumClientException client = self.quantum() - network_id = self.metadata['network_id'] + network_id = self.resource_id router_id = self.metadata['router_id'] try: client.delete_router(router_id) diff --git a/heat/tests/test_vpc.py b/heat/tests/test_vpc.py index a23a0e3d..53ec1b86 100644 --- a/heat/tests/test_vpc.py +++ b/heat/tests/test_vpc.py @@ -149,8 +149,7 @@ Resources: stack = self.create_stack(self.test_template) resource = stack['the_vpc'] - self.assertResourceState(resource, 'the_vpc', { - 'network_id': 'aaaa', + self.assertResourceState(resource, 'aaaa', { 'router_id': 'bbbb', 'all_router_ids': ['bbbb']}) self.assertEqual(resource.UPDATE_REPLACE, resource.handle_update({})) @@ -195,11 +194,9 @@ Resources: stack = self.create_stack(self.test_template) resource = stack['the_subnet'] - self.assertResourceState(resource, 'the_subnet', { - 'network_id': 'aaaa', + self.assertResourceState(resource, 'cccc', { 'router_id': 'bbbb', - 'default_router_id': 'bbbb', - 'subnet_id': 'cccc'}) + 'default_router_id': 'bbbb'}) self.assertEqual(resource.UPDATE_REPLACE, resource.handle_update({})) self.assertRaises( @@ -283,8 +280,7 @@ Resources: stack = self.create_stack(self.test_template) resource = stack['the_nic'] - self.assertResourceState(resource, 'the_nic', { - 'port_id': 'dddd'}) + self.assertResourceState(resource, 'dddd') self.assertEqual(resource.UPDATE_REPLACE, resource.handle_update({})) @@ -443,8 +439,7 @@ Resources: self.assertEqual(['bbbb', 'ffff'], vpc.metadata['all_router_ids']) route_table = stack['the_route_table'] - self.assertResourceState(route_table, 'the_route_table', { - 'router_id': 'ffff'}) + self.assertResourceState(route_table, 'ffff', {}) self.assertEqual( route_table.UPDATE_REPLACE, route_table.handle_update({})) -- 2.45.2