]> review.fuel-infra Code Review - openstack-build/heat-build.git/commitdiff
Use quantum IDs for VPC, Subnet, RouteTable resources
authorSteve Baker <sbaker@redhat.com>
Sun, 3 Mar 2013 21:49:37 +0000 (10:49 +1300)
committerSteve Baker <sbaker@redhat.com>
Thu, 7 Mar 2013 21:57:31 +0000 (10:57 +1300)
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
heat/engine/resources/network_interface.py
heat/engine/resources/route_table.py
heat/engine/resources/subnet.py
heat/engine/resources/vpc.py
heat/tests/test_vpc.py

index 7c398c79ad849eb0da946923c92b6995c5d0e6a3..07460ff79f58303188f4b49dbc2ea39e3452e6ec 100644 (file)
@@ -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)
index cb7659ba5d526d2daef625b123a072d982bc4b99..03e5ac59a0297ec21f7e135a65c9e8bc16a49682 100644 (file)
@@ -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
index 81a710f1ff32f7390a10f4ba6c8ff4d7864143d1..1adde63e2f738dad80f69dd9a1549307742329b4 100644 (file)
@@ -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, {
index c1752ce2eec3aac811645584689993f55ed8a1c3..a4e8a7c61e87f018fe3823656cab53ce793ca8b8 100644 (file)
@@ -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
index f53014d9897640181f88301aa0a359006774aef2..24b5d80471017b825d59188cea022193918f7c4e 100644 (file)
@@ -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)
index a23a0e3da60b32776b6ca57a6dfb60173933de2b..53ec1b8620a4ee84442fa1ad225238b84490bbd9 100644 (file)
@@ -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({}))