X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=sfa%2Fplanetlab%2Fpldriver.py;h=33b88049d5408ec7c7c681857af9f7c39bb6b163;hb=8196a82f43a245f7508167c62fbf6976d4bb478f;hp=d72f2e6109ac9d6621d45b87a3b6ad5752d797c6;hpb=de016800d96b4a61f09e035247aa24341748c4a2;p=sfa.git diff --git a/sfa/planetlab/pldriver.py b/sfa/planetlab/pldriver.py index d72f2e61..33b88049 100644 --- a/sfa/planetlab/pldriver.py +++ b/sfa/planetlab/pldriver.py @@ -3,11 +3,10 @@ import datetime # from sfa.util.faults import MissingSfaInfo, UnknownSfaType, \ RecordNotFound, SfaNotImplemented, SliverDoesNotExist - from sfa.util.sfalogging import logger from sfa.util.defaultdict import defaultdict from sfa.util.sfatime import utcparse, datetime_to_string, datetime_to_epoch -from sfa.util.xrn import hrn_to_urn, get_leaf, urn_to_sliver_id +from sfa.util.xrn import hrn_to_urn, get_leaf from sfa.util.cache import Cache # one would think the driver should not need to mess with the SFA db, but.. @@ -16,13 +15,11 @@ from sfa.storage.model import RegRecord # used to be used in get_ticket #from sfa.trust.sfaticket import SfaTicket - from sfa.rspecs.version_manager import VersionManager from sfa.rspecs.rspec import RSpec # the driver interface, mostly provides default behaviours from sfa.managers.driver import Driver - from sfa.planetlab.plshell import PlShell import sfa.planetlab.peers as peers from sfa.planetlab.plaggregate import PlAggregate @@ -563,78 +560,24 @@ class PlDriver (Driver): def testbed_name (self): return "myplc" - # 'geni_request_rspec_versions' and 'geni_ad_rspec_versions' are mandatory def aggregate_version (self): - version_manager = VersionManager() - ad_rspec_versions = [] - request_rspec_versions = [] - for rspec_version in version_manager.versions: - if rspec_version.content_type in ['*', 'ad']: - ad_rspec_versions.append(rspec_version.to_dict()) - if rspec_version.content_type in ['*', 'request']: - request_rspec_versions.append(rspec_version.to_dict()) - return { - 'testbed':self.testbed_name(), - 'geni_request_rspec_versions': request_rspec_versions, - 'geni_ad_rspec_versions': ad_rspec_versions, - } + return {} def list_slices (self, creds, options): - # look in cache first - if self.cache: - slices = self.cache.get('slices') - if slices: - logger.debug("PlDriver.list_slices returns from cache") - return slices - # get data from db slices = self.shell.GetSlices({'peer_id': None}, ['name']) slice_hrns = [slicename_to_hrn(self.hrn, slice['name']) for slice in slices] slice_urns = [hrn_to_urn(slice_hrn, 'slice') for slice_hrn in slice_hrns] - - # cache the result - if self.cache: - logger.debug ("PlDriver.list_slices stores value in cache") - self.cache.add('slices', slice_urns) - return slice_urns # first 2 args are None in case of resource discovery - def list_resources (self, slice_urn, slice_hrn, creds, options): - cached_requested = options.get('cached', True) - - version_manager = VersionManager() - # get the rspec's return format from options - rspec_version = version_manager.get_version(options.get('geni_rspec_version')) - version_string = "rspec_%s" % (rspec_version) - - #panos adding the info option to the caching key (can be improved) - if options.get('info'): - version_string = version_string + "_"+options.get('info', 'default') - - # Adding the list_leases option to the caching key - if options.get('list_leases'): - version_string = version_string + "_"+options.get('list_leases', 'default') - - # look in cache first - if cached_requested and self.cache and not slice_hrn: - rspec = self.cache.get(version_string) - if rspec: - logger.debug("PlDriver.ListResources: returning cached advertisement") - return rspec - - #panos: passing user-defined options - #print "manager options = ",options + def list_resources (self, creds, options): aggregate = PlAggregate(self) - rspec = aggregate.get_rspec(slice_xrn=slice_urn, version=rspec_version, - options=options) - - # cache the result - if self.cache and not slice_hrn: - logger.debug("PlDriver.ListResources: stores advertisement in cache") - self.cache.add(version_string, rspec) - + rspec = aggregate.list_resources(version=rspec_version, options=options) return rspec + + def describe(self, creds, urns, options): + return {} def sliver_status (self, slice_urn, slice_hrn): # find out where this slice is currently running @@ -658,7 +601,7 @@ class PlDriver (Driver): persons = self.shell.GetPersons(slice['person_ids'], ['key_ids']) key_ids = [key_id for person in persons for key_id in person['key_ids']] person_keys = self.shell.GetKeys(key_ids) - keys = [key['key'] for key in keys] + keys = [key['key'] for key in person_keys] user.update({'urn': slice_urn, 'login': slice['name'], @@ -669,9 +612,6 @@ class PlDriver (Driver): site_ids = [node['site_id'] for node in nodes] result = {} - top_level_status = 'unknown' - if nodes: - top_level_status = 'ready' result['geni_urn'] = slice_urn result['pl_login'] = slice['name'] result['pl_expires'] = datetime_to_string(utcparse(slice['expires'])) @@ -687,20 +627,20 @@ class PlDriver (Driver): if node['last_contact'] is not None: res['pl_last_contact'] = datetime_to_string(utcparse(node['last_contact'])) - sliver_id = urn_to_sliver_id(slice_urn, slice['slice_id'], node['node_id'], authority=self.hrn) - res['geni_urn'] = sliver_id + sliver_id = "%s:%s" % (slice['slice_id'], node['node_id']) + sliver_xrn = Xrn(slice_urn, id = sliver_id) + sliver_xrn.set_authority(self.hrn) + res['geni_urn'] = sliver_xrn.get_urn() if node['boot_state'] == 'boot': res['geni_status'] = 'ready' else: res['geni_status'] = 'failed' - top_level_status = 'failed' + res['geni_allocation_status'] = 'geni_provisioned' res['geni_error'] = '' res['users'] = [user] - resources.append(res) - result['geni_status'] = top_level_status result['geni_resources'] = resources return result @@ -762,7 +702,7 @@ class PlDriver (Driver): # only used by plc and ple. slices.handle_peer(site, slice, persons, peer) - return aggregate.get_rspec(slice_xrn=slice_urn, version=rspec.version) + return aggregate.describe_rspec(slice_xrn=slice_urn, version=rspec.version) def delete_sliver (self, slice_urn, slice_hrn, creds, options): slicename = hrn_to_pl_slicename(slice_hrn)