+ def provision(self, urns, options=None):
+ if options is None:
+ options = {}
+ # update sliver allocation states and set them to geni_provisioned
+ aggregate = OSAggregate(self)
+ instances = aggregate.get_instances(urns)
+ sliver_ids = []
+ for instance in instances:
+ sliver_hrn = "%s.%s" % (self.driver.hrn, instance.id)
+ sliver_ids.append(Xrn(sliver_hrn, type='sliver').urn)
+ 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 = OSAggregate(self)
+ instances = aggregate.get_instances(urns)
+ sliver_ids = []
+ for instance in instances:
+ sliver_hrn = "%s.%s" % (self.driver.hrn, instance.id)
+ sliver_ids.append(Xrn(sliver_hrn, type='sliver').urn)
+
+ # delete the instance
+ aggregate.delete_instance(instance)
+
+ # delete sliver allocation states
+ dbsession = self.api.dbsession()
+ SliverAllocation.delete_allocations(sliver_ids, dbsession)
+
+ # 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=None):
+ if options is None:
+ options = {}
+ description = self.describe(urns, None, options)
+ return description['geni_slivers']
+
+ def perform_operational_action(self, urns, action, options=None):
+ if options is None:
+ options = {}