- requested_slivers = []
- for node in rspec.version.get_nodes_with_slivers():
- hostname = None
- if node.get('component_name'):
- hostname = node.get('component_name').strip()
- elif node.get('component_id'):
- hostname = xrn_to_hostname(node.get('component_id').strip())
- if hostname:
- requested_slivers.append(hostname)
- nodes = slices.verify_slice_nodes(slice, requested_slivers, peer)
-
- return aggregate.get_rspec(slice_xrn=slice_urn, version=rspec.version)
-
- def delete_sliver (self, slice_urn, slice_hrn, creds, options):
- slicename = hrn_to_dummy_slicename(slice_hrn)
- slices = self.shell.GetSlices({'slice_name': slicename})
- if not slices:
- return True
- slice = slices[0]
-
- try:
- self.shell.DeleteSliceFromNodes({'slice_id': slice['slice_id'], 'node_ids': slice['node_ids']})
- return True
- except:
- return False
-
- def renew_sliver (self, slice_urn, slice_hrn, creds, expiration_time, options):
- slicename = hrn_to_dummy_slicename(slice_hrn)
- slices = self.shell.GetSlices({'slice_name': slicename})
- if not slices:
- raise RecordNotFound(slice_hrn)
- slice = slices[0]
+ request_nodes = rspec.version.get_nodes_with_slivers()
+ nodes = slices.verify_slice_nodes(urn, slice, request_nodes)
+
+ return aggregate.describe([xrn.get_urn()], version=rspec.version)
+
+ def provision(self, urns, options=None):
+ if options is None:
+ options = {}
+ # update users
+ slices = DummySlices(self)
+ aggregate = DummyAggregate(self)
+ slivers = aggregate.get_slivers(urns)
+ slice = slivers[0]
+ geni_users = options.get('geni_users', [])
+ #users = slices.verify_users(None, slice, geni_users, options=options)
+ # update sliver allocation states and set them to geni_provisioned
+ sliver_ids = [sliver['sliver_id'] for sliver in slivers]
+ dbsession = self.api.dbsession()
+ SliverAllocation.set_allocations(
+ sliver_ids, 'geni_provisioned', dbsession)
+ version_manager = VersionManager()
+ rspec_version = version_manager.get_version(
+ options['geni_rspec_version'])
+ return self.describe(urns, rspec_version, options=options)
+
+ def delete(self, urns, options=None):
+ if options is None:
+ options = {}
+ # collect sliver ids so we can update sliver allocation states after
+ # we remove the slivers.
+ aggregate = DummyAggregate(self)
+ slivers = aggregate.get_slivers(urns)
+ 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 = DummyXrn(auth=self.hrn, slicename=slivers[
+ 0]['slice_name']).get_hrn()
+ try:
+ self.shell.DeleteSliceFromNodes(
+ {'slice_id': slice_id, 'node_ids': node_ids})
+ # delete sliver allocation states
+ dbsession = self.api.dbsession()
+ SliverAllocation.delete_allocations(sliver_ids, dbsession)
+ finally:
+ pass
+
+ # prepare return struct
+ geni_slivers = []
+ for sliver in slivers:
+ geni_slivers.append(
+ {'geni_sliver_urn': sliver['sliver_id'],
+ 'geni_allocation_status': 'geni_unallocated',
+ 'geni_expires': datetime_to_string(utcparse(sliver['expires']))})
+ return geni_slivers
+
+ def renew(self, urns, expiration_time, options=None):
+ if options is None:
+ options = {}
+ aggregate = DummyAggregate(self)
+ slivers = aggregate.get_slivers(urns)
+ if not slivers:
+ raise SearchFailed(urns)
+ slice = slivers[0]