From: Tony Mack Date: Wed, 5 Dec 2012 18:33:15 +0000 (-0500) Subject: Delete should return a list of structs or an empty list of there are not slivers... X-Git-Tag: sfa-3.0-0~60 X-Git-Url: http://git.onelab.eu/?a=commitdiff_plain;ds=sidebyside;h=f189c9fd5c1cd852fdff0bdab92fe26d6ef2b7de;p=sfa.git Delete should return a list of structs or an empty list of there are not slivers to delete --- diff --git a/sfa/openstack/nova_driver.py b/sfa/openstack/nova_driver.py index 91de48bc..369212d0 100644 --- a/sfa/openstack/nova_driver.py +++ b/sfa/openstack/nova_driver.py @@ -392,7 +392,15 @@ class NovaDriver(Driver): # delete sliver allocation states SliverAllocation.delete_allocations(sliver_ids) - return True + + # return geni_slivers + geni_slivers = [] + for sliver_id in sliver_ids: + geni_slivers.append( + {'geni_sliver_urn': sliver['sliver_id'], + 'geni_allocation_status': 'geni_unallocated', + 'geni_expires': None}) + return geni_slivers def renew (self, urns, expiration_time, options={}): description = self.describe(urns, None, options) diff --git a/sfa/planetlab/pldriver.py b/sfa/planetlab/pldriver.py index 138e2549..43ee799b 100644 --- a/sfa/planetlab/pldriver.py +++ b/sfa/planetlab/pldriver.py @@ -662,39 +662,39 @@ class PlDriver (Driver): # we remove the slivers. aggregate = PlAggregate(self) slivers = aggregate.get_slivers(urns) - slice_id = slivers[0]['slice_id'] - node_ids = [] - sliver_ids = [] - for sliver in slivers: - node_ids.append(sliver['node_id']) - sliver_ids.append(sliver['sliver_id']) - - # determine if this is a peer slice - # xxx I wonder if this would not need to use PlSlices.get_peer instead - # in which case plc.peers could be deprecated as this here - # is the only/last call to this last method in plc.peers - slice_hrn = PlXrn(auth=self.hrn, slicename=slivers[0]['name']).get_hrn() - peer = peers.get_peer(self, slice_hrn) - try: - if peer: - self.shell.UnBindObjectFromPeer('slice', slice_id, peer) - - self.shell.DeleteSliceFromNodes(slice_id, node_ids) - - # delete sliver allocation states - SliverAllocation.delete_allocations(sliver_ids) - finally: - if peer: - self.shell.BindObjectToPeer('slice', slice_id, peer, slice['peer_slice_id']) + if slivers: + slice_id = slivers[0]['slice_id'] + node_ids = [] + sliver_ids = [] + for sliver in slivers: + node_ids.append(sliver['node_id']) + sliver_ids.append(sliver['sliver_id']) + + # determine if this is a peer slice + # xxx I wonder if this would not need to use PlSlices.get_peer instead + # in which case plc.peers could be deprecated as this here + # is the only/last call to this last method in plc.peers + slice_hrn = PlXrn(auth=self.hrn, slicename=slivers[0]['name']).get_hrn() + peer = peers.get_peer(self, slice_hrn) + try: + if peer: + self.shell.UnBindObjectFromPeer('slice', slice_id, peer) + + self.shell.DeleteSliceFromNodes(slice_id, node_ids) + + # delete sliver allocation states + SliverAllocation.delete_allocations(sliver_ids) + finally: + if peer: + self.shell.BindObjectToPeer('slice', slice_id, peer, slice['peer_slice_id']) # prepare return struct geni_slivers = [] - for node_id in node_ids: - sliver_hrn = '%s.%s-%s' % (self.hrn, slice_id, node_id) + for sliver in slivers: geni_slivers.append( - {'geni_sliver_urn': Xrn(sliver_hrn, type='sliver').urn, + {'geni_sliver_urn': sliver['sliver_id'], 'geni_allocation_status': 'geni_unallocated', - 'geni_expires': datetime_to_string(utcparse(slivers[0]['expires']))}) + 'geni_expires': datetime_to_string(utcparse(sliver['expires']))}) return geni_slivers def renew (self, urns, expiration_time, options={}):