From 35d60c3780adbd8d5a490be39289935231acd4c7 Mon Sep 17 00:00:00 2001 From: Tony Mack Date: Wed, 5 Dec 2012 13:03:21 -0500 Subject: [PATCH] PerformOperationalAction can only be called on fully allocated slivers --- sfa/openstack/nova_driver.py | 13 ++++++------- sfa/openstack/osaggregate.py | 7 ++++--- sfa/planetlab/pldriver.py | 16 ++++++++++++---- 3 files changed, 22 insertions(+), 14 deletions(-) diff --git a/sfa/openstack/nova_driver.py b/sfa/openstack/nova_driver.py index 7666093b..08c48db6 100644 --- a/sfa/openstack/nova_driver.py +++ b/sfa/openstack/nova_driver.py @@ -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') diff --git a/sfa/openstack/osaggregate.py b/sfa/openstack/osaggregate.py index 4506fe9d..8a48fe23 100644 --- a/sfa/openstack/osaggregate.py +++ b/sfa/openstack/osaggregate.py @@ -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 diff --git a/sfa/planetlab/pldriver.py b/sfa/planetlab/pldriver.py index d2dee280..b133dc8e 100644 --- a/sfa/planetlab/pldriver.py +++ b/sfa/planetlab/pldriver.py @@ -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={}): -- 2.43.0