Merge branch 'master' of ssh://git.planet-lab.org/git/plstackapi
[plstackapi.git] / planetstack / openstack_observer / steps / sync_slivers.py
index 3b81766..dcedd1d 100644 (file)
@@ -14,8 +14,9 @@ class SyncSlivers(OpenStackSyncStep):
     provides=[Sliver]
     requested_interval=0
 
-    def fetch_pending(self):
-        return Sliver.objects.filter(Q(enacted__lt=F('updated')) | Q(enacted=None))
+    def get_userdata(self, sliver):
+        userdata = 'opencloud:\n   slicename: "%s"\n   hostname: "%s"\n' % (sliver.slice.name, sliver.node.name)
+        return userdata
 
     def sync_record(self, sliver):
         logger.info("sync'ing sliver:%s deployment:%s " % (sliver, sliver.node.deployment))
@@ -75,13 +76,18 @@ class SyncSlivers(OpenStackSyncStep):
                                'public_key': sliver.creator.public_key}
                 driver.create_keypair(**key_fields)
 
+            userData = self.get_userdata(sliver)
+            if sliver.userData:
+                userData = sliver.userData
+
             instance = driver.spawn_instance(name=sliver.name,
                                 key_name = keyname,
                                 image_id = image_id,
                                 hostname = sliver.node.name,
                                 pubkeys = pubkeys,
                                 nics = nics,
-                                userdata = sliver.userData )
+                                userdata = userData,
+                                flavor_name = sliver.flavor.flavor )
             sliver.instance_id = instance.id
             sliver.instance_name = getattr(instance, 'OS-EXT-SRV-ATTR:instance_name')
             sliver.save()    
@@ -89,3 +95,9 @@ class SyncSlivers(OpenStackSyncStep):
         if sliver.instance_id and metadata_update:
             driver.update_instance_metadata(sliver.instance_id, metadata_update)
 
+    def delete_record(self, sliver):
+        if sliver.instance_id:
+            driver = self.driver.client_driver(caller=sliver.creator, 
+                                               tenant=sliver.slice.name,
+                                               deployment=sliver.deploymentNetwork.name)
+            driver.destroy_instance(sliver.instance_id)