X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=planetstack%2Fopenstack%2Fmanager.py;fp=planetstack%2Fopenstack%2Fmanager.py;h=af458f29bf0835d9ada6a6a0a7ef392b804d3cbb;hb=45f3efab84028fe878fdfae907e0c250d2518bb7;hp=7990269e1027f5327ee1425e86113e6b49d2949c;hpb=de6de12bd7751c41459a020c1b526a72ef16100c;p=plstackapi.git diff --git a/planetstack/openstack/manager.py b/planetstack/openstack/manager.py index 7990269..af458f2 100644 --- a/planetstack/openstack/manager.py +++ b/planetstack/openstack/manager.py @@ -455,12 +455,22 @@ class OpenStackManager: if network.network_id: self.driver.delete_network(network.network_id) + def save_network_template(self, template): + if (template.sharedNetworkName) and (not template.sharedNetworkId): + os_networks = self.driver.shell.quantum.list_networks(name=template.sharedNetworkName)['networks'] + if os_networks: + template.sharedNetworkId = os_networks[0]["id"] + + template.save() + template.enacted = datetime.now() + template.save(update_fields=['enacted']) + def find_or_make_template_for_network(self, name): """ Given a network name, try to guess the right template for it """ # templates for networks we may encounter if name=='nat-net': - template_dict = {"name": "private-nat", "visibility": "private", "translation": "nat"} + template_dict = None # {"name": "private-nat", "visibility": "private", "translation": "nat"} elif name=='sharednet1': template_dict = {"name": "dedicated-public", "visibility": "public", "translation": "none"} else: @@ -471,10 +481,19 @@ class OpenStackManager: if templates: return templates[0] + if template_dict == None: + return None + template = NetworkTemplate(**template_dict) template.save() return template + def refresh_network_templates(self): + for template in NetworkTemplate.objects.all(): + if (template.sharedNetworkName) and (not template.sharedNetworkId): + # this will cause us to try to fill in the sharedNetworkId + self.save_network_template(template) + def refresh_networks(self): # get a list of all networks in the model @@ -503,6 +522,11 @@ class OpenStackManager: owner_slice = Slice.objects.get(tenant_id = os_network['tenant_id']) template = self.find_or_make_template_for_network(os_network['name']) + if (template is None): + # This is our way of saying we don't want to auto-instantiate + # this network type. + continue + # Make a best-effort attempt to figure out the subnet. If we # cannot determine the subnet, then leave those fields blank. subnet_id = None