update to make use of renamed NetworkTemplate fields
[plstackapi.git] / planetstack / openstack / manager.py
index 2fb4ff8..c1647e8 100644 (file)
@@ -315,9 +315,22 @@ class OpenStackManager:
 
     @require_enabled
     def save_sliver(self, sliver):
+        metadata_update = {}
+        if ("numberCores" in sliver.changed_fields):
+            metadata_update["cpu_cores"] = str(sliver.numberCores)
+
+        for tag in sliver.slice.tags.all():
+            if tag.name.startswith("sysctl-"):
+                metadata_update[tag.name] = tag.value
+
         if not sliver.instance_id:
             nics = self.get_requested_networks(sliver.slice)
-            file("/tmp/scott-manager","a").write("slice: %s\nreq: %s\n" % (str(sliver.slice.name), str(nics)))
+            for nic in nics:
+                # If a network hasn't been instantiated yet, then we'll fail
+                # during slice creation. Defer saving the sliver for now.
+                if not nic.get("net-id", None):
+                    sliver.save()   # in case it hasn't been saved yet
+                    return
             slice_memberships = SliceMembership.objects.filter(slice=sliver.slice)
             pubkeys = [sm.user.public_key for sm in slice_memberships if sm.user.public_key]
             pubkeys.append(sliver.creator.public_key)
@@ -326,12 +339,13 @@ class OpenStackManager:
                                    image_id = sliver.image.image_id,
                                    hostname = sliver.node.name,
                                    pubkeys = pubkeys,
-                                   nics = nics )
+                                   nics = nics,
+                                   metadata = metadata_update )
             sliver.instance_id = instance.id
             sliver.instance_name = getattr(instance, 'OS-EXT-SRV-ATTR:instance_name')
-
-        if sliver.instance_id and ("numberCores" in sliver.changed_fields):
-            self.driver.update_instance_metadata(sliver.instance_id, {"cpu_cores": str(sliver.numberCores)})
+        else:
+            if metadata_update:
+                self.driver.update_instance_metadata(sliver.instance_id, metadata_update)
 
         sliver.save()
         sliver.enacted = datetime.now()
@@ -409,8 +423,8 @@ class OpenStackManager:
     @require_enabled
     def save_network(self, network):
         if not network.network_id:
-            if network.template.sharedNetworkName:
-                network.network_id = network.template.sharedNetworkId
+            if network.template.shared_network_name:
+                network.network_id = network.template.shared_network_id
                 (network.subnet_id, network.subnet) = self.driver.get_network_subnet(network.network_id)
             else:
                 network_name = network.name
@@ -457,10 +471,10 @@ class OpenStackManager:
             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 (template.shared_network_name) and (not template.shared_network_id):
+            os_networks = self.driver.shell.quantum.list_networks(name=template.shared_network_name)['networks']
             if os_networks:
-                template.sharedNetworkId = os_networks[0]["id"]
+                template.shared_network_id = os_networks[0]["id"]
 
         template.save()
         template.enacted = datetime.now()
@@ -491,8 +505,8 @@ class OpenStackManager:
 
     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
+            if (template.shared_network_name) and (not template.shared_network_id):
+                 # this will cause us to try to fill in the shared_network_id
                  self.save_network_template(template)
 
     def refresh_networks(self):