- def save_controller_network(self, controller_network):
- if (not controller_network.net_id) and controller_network.network.template.sharedNetworkName:
- # It's a shared network, try to find the shared network id
-
- quantum_networks = self.driver.shell.quantum.list_networks(name=controller_network.network.template.sharedNetworkName)["networks"]
- if quantum_networks:
- logger.info("set shared network id %s" % quantum_networks[0]["id"])
- controller_network.net_id = quantum_networks[0]["id"]
- else:
- logger.info("failed to find shared network id for controller")
- return
-
- # At this point, it must be a private network, so create it if it does
- # not exist.
-
- if not controller_network.net_id:
- network_name = controller_network.network.name
-
- # create network
- os_network = self.driver.create_network(network_name, shared=True)
- controller_network.net_id = os_network['id']
-
- # create router
- #router = self.driver.create_router(network_name)
- #controller_network.router_id = router['id']
-
- # create subnet
- next_subnet = self.get_next_subnet(controller=controller_network.controller.name)
- 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 = controller_network.net_id,
- cidr_ip = cidr,
- ip_version = ip_version,
- start = start,
- end = end)
- controller_network.subnet = cidr
- controller_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, controller_network.network))
-
- # Now, figure out the subnet and subnet_id for the network. This works
- # for both private and shared networks.
-
- if (not controller_network.subnet_id) or (not controller_network.subnet):
- (controller_network.subnet_id, controller_network.subnet) = self.driver.get_network_subnet(controller_network.net_id)
- logger.info("sync'ed subnet (%s) for network: %s" % (controller_network.subnet, controller_network.network))
-
- if (not controller_network.subnet):
- # this will generate a non-null database constraint error
- # ... which in turn leads to transaction errors
- # it's probably caused by networks that no longer exist at the
- # quantum level.
-
- logger.info("null subnet for network %s, skipping save" % controller_network.network)
- return