PerformOperationalAction can only be called on fully allocated slivers
authorTony Mack <tmack@paris.CS.Princeton.EDU>
Wed, 5 Dec 2012 18:03:21 +0000 (13:03 -0500)
committerTony Mack <tmack@paris.CS.Princeton.EDU>
Wed, 5 Dec 2012 18:03:21 +0000 (13:03 -0500)
sfa/openstack/nova_driver.py
sfa/openstack/osaggregate.py
sfa/planetlab/pldriver.py

index 7666093..08c48db 100644 (file)
@@ -408,14 +408,13 @@ class NovaDriver(Driver):
             action_method = aggreate.restart_instances
         else:
             raise UnsupportedOperation(action)
-        for urn in urns:
-            xrn = OSXrn(urn=urn)
-            tenant_name = xrn.get_tenant_name()
-            project_name = xrn.get_slicename()
-            id = xrn.id
-            aggreate.action_method(tenant_name, project_name, id)
+        instances = aggregate.get_instances(urns) 
+        for instance in instances:
+            tenant_name = self.driver.shell.auth_manager.client.tenant_name
+            action_method(tenant_name, instance.name, instance.id)
         description = self.describe(urns)
-        return description['geni_slivers']      
+        geni_slivers = self.describe(urns, None, options)['geni_slivers']
+        return geni_slivers
 
     def shutdown(self, xrn, options={}):
         xrn = OSXrn(xrn=xrn, type='slice')
index 4506fe9..8a48fe2 100644 (file)
@@ -201,9 +201,10 @@ class OSAggregate:
 
     def instance_to_sliver(self, instance, xrn=None):
         if xrn:
-            xrn = Xrn(xrn=slice_xrn, type='slice', id=instance.id).get_urn()
+            sliver_hrn = '%s.%s' % (self.driver.hrn, instance.id)
+            sliver_id = Xrn(sliver_hrn, type='sliver').urn
 
-        sliver = Sliver({'sliver_id': xrn.get_urn(),
+        sliver = Sliver({'sliver_id': sliver_id,
                          'name': instance.name,
                          'type': instance.name,
                          'cpus': str(instance.vcpus),
@@ -212,7 +213,7 @@ class OSAggregate:
         return sliver   
 
     def instance_to_geni_sliver(self, instance, sliver_allocations = {}):
-        sliver_hrn = '%s.%s' % (root_hrn, instance.id)
+        sliver_hrn = '%s.%s' % (self.driver.hrn, instance.id)
         sliver_id = Xrn(sliver_hrn, type='sliver').urn
  
         # set sliver allocation and operational status
index d2dee28..b133dc8 100644 (file)
@@ -720,12 +720,20 @@ class PlDriver (Driver):
         # MyPLC doesn't support operational actions. Lets pretend like it
         # supports start, but reject everything else.
         action = action.lower()
-        if action == 'geni_start':
-            pass
-        else:
+        if action not in ['geni_start']:
             raise UnsupportedOperation(action)
+
+        # fault if sliver is not full allocated (operational status is geni_pending_allocation)
         description = self.describe(urns, None, options)
-        return description['geni_slivers']
+        for sliver in description['geni_slivers']:
+            if sliver['operational_status'] == 'geni_pending_allocation':
+                raise UnsupportedOperation(action, "Sliver must be fully allocated (operational status is not geni_pending_allocation)")
+        #
+        # Perform Operational Action Here
+        #
+
+        geni_slivers = self.describe(urns, None, options)['geni_slivers']
+        return geni_slivers
 
     # set the 'enabled' tag to 0
     def shutdown (self, xrn, options={}):