If a Network already has a network_id, read subnet info from Quantum
authorAndy Bavier <acb@cs.princeton.edu>
Thu, 21 Nov 2013 20:36:47 +0000 (15:36 -0500)
committerAndy Bavier <acb@cs.princeton.edu>
Thu, 21 Nov 2013 20:36:47 +0000 (15:36 -0500)
planetstack/observer/steps/sync_networks.py

index 67b215f..cb1d52a 100644 (file)
@@ -16,39 +16,43 @@ class SyncNetworks(OpenStackSyncStep):
         return Network.objects.filter(Q(enacted__lt=F('updated')) | Q(enacted=None))
 
     def save_network(self, network):
-        if not network.network_id:
-            if network.template.sharedNetworkName:
+        if not network.network_id and network.template.sharedNetworkName:
                 network.network_id = network.template.sharedNetworkId
-                (network.subnet_id, network.subnet) = self.driver.get_network_subnet(network.network_id)
-            else:
-                network_name = network.name
 
-                # create network
-                os_network = self.driver.create_network(network_name, shared=True)
-                network.network_id = os_network['id']
+        if not network.network_id:
+            network_name = network.name
+
+            # create network
+            os_network = self.driver.create_network(network_name, shared=True)
+            network.network_id = os_network['id']
 
-                # create router
-                router = self.driver.create_router(network_name)
-                network.router_id = router['id']
+            # create router
+            router = self.driver.create_router(network_name)
+            network.router_id = router['id']
 
-                # create subnet
-                next_subnet = self.get_next_subnet()
-                cidr = str(next_subnet.cidr)
-                ip_version = next_subnet.version
-                start = str(next_subnet[2])
-                end = str(next_subnet[-2])
-                subnet = self.driver.create_subnet(name=network_name,
-                                                   network_id = network.network_id,
-                                                   cidr_ip = cidr,
-                                                   ip_version = ip_version,
-                                                   start = start,
-                                                   end = end)
-                network.subnet = cidr
-                network.subnet_id = subnet['id']
-                # add subnet as interface to slice's router
-                self.driver.add_router_interface(router['id'], subnet['id'])
-                # add external route
-                self.driver.add_external_route(subnet)
+            # create subnet
+            next_subnet = self.get_next_subnet()
+            cidr = str(next_subnet.cidr)
+            ip_version = next_subnet.version
+            start = str(next_subnet[2])
+            end = str(next_subnet[-2])
+            subnet = self.driver.create_subnet(name=network_name,
+                                               network_id = network.network_id,
+                                               cidr_ip = cidr,
+                                               ip_version = ip_version,
+                                               start = start,
+                                               end = end)
+            network.subnet = cidr
+            network.subnet_id = subnet['id']
+            # add subnet as interface to slice's router
+            self.driver.add_router_interface(router['id'], subnet['id'])
+            # add external route
+            self.driver.add_external_route(subnet)
+            logger.info("created private subnet (%s) for network: %s" % (cidr, network))
+        else:
+            (network.subnet_id, network.subnet) = self.driver.get_network_subnet(network.network_id)
+            logger.info("sync'ed subnet (%s) for network: %s" % (network.subnet, network))
+            network.save()
 
     def sync_record(self, network):
         if network.owner and network.owner.creator: