From 7f254f57ae04b0b52e0ca6e8e90896f9a4dac1dd Mon Sep 17 00:00:00 2001 From: Josh Karlin Date: Mon, 17 May 2010 18:56:29 +0000 Subject: [PATCH 1/1] about to test CreateSliver --- sfa/client/sfi.py | 2 +- sfa/managers/geni_am_pl.py | 67 ++++++++++++++++++-------------------- sfa/plc/slices.py | 31 ++++++++++-------- 3 files changed, 49 insertions(+), 51 deletions(-) diff --git a/sfa/client/sfi.py b/sfa/client/sfi.py index a27c3ff9..8592ec1a 100755 --- a/sfa/client/sfi.py +++ b/sfa/client/sfi.py @@ -955,7 +955,7 @@ class Sfi: rspec_file = self.get_rspec_file(args[1]) rspec = open(rspec_file).read() server = self.geni_am - return server.CreateSliver(slice_xrn, [slice_cred], rspec) + return server.CreateSliver(slice_xrn, [slice_cred], rspec, []) def DeleteSliver(self, opts, args): slice_xrn = args[0] diff --git a/sfa/managers/geni_am_pl.py b/sfa/managers/geni_am_pl.py index cd609897..6cae46a6 100644 --- a/sfa/managers/geni_am_pl.py +++ b/sfa/managers/geni_am_pl.py @@ -11,6 +11,8 @@ from sfa.util.record import SfaRecord from StringIO import StringIO from time import mktime +from lxml import etree + def GetVersion(): version = {} version['geni_api'] = 1 @@ -60,47 +62,40 @@ def CreateSliver(api, slice_xrn, creds, rspec, users): # Build up objects that an SFA registry would return if SFA # could contact the slice's registry directly - reg_objects = {} - - site = {} - site['site_id'] = 0 - site['name'] = 'geni.%s' % hrn_auth - site['enabled'] = True - site['max_slices'] = 100 - - # Note: - # Is it okay if this login base is the same as one already at this myplc site? - # Do we need uniqueness? Should use hrn_auth instead of just the leaf perhaps? - site['login_base'] = get_leaf(hrn_auth) - site['abbreviated_name'] = hrn - site['max_slivers'] = 1000 - reg_objects['site'] = site + reg_objects = None - slice = {} - slice['expires'] = int(mktime(Credential(string=creds[0]).get_lifetime().timetuple())) - slice['hrn'] = hrn - slice['name'] = site['login_base'] + "_" + get_leaf(hrn) - slice['url'] = hrn - slice['description'] = hrn - slice['pointer'] = 0 - reg_objects['slice_record'] = slice + if users: + reg_objects = {} - - # Note: - # Left off here, need to properly fill out the slice record and - # stuff the user information in to get through slices.verify_persons - # Need to hear back from Tony Mack to find out how accurate the user - # information needs to be. - for user in users: - slice['researcher'].append(user.getdefault('name', 'geni_default_user')) + site = {} + site['site_id'] = 0 + site['name'] = 'geni.%s' % hrn_auth + site['enabled'] = True + site['max_slices'] = 100 + # Note: + # Is it okay if this login base is the same as one already at this myplc site? + # Do we need uniqueness? Should use hrn_auth instead of just the leaf perhaps? + site['login_base'] = get_leaf(hrn_auth) + site['abbreviated_name'] = hrn + site['max_slivers'] = 1000 + reg_objects['site'] = site - keys = [] - for user in users: - keys += user['keys'] + slice = {} + slice['expires'] = int(mktime(Credential(string=creds[0]).get_lifetime().timetuple())) + slice['hrn'] = hrn + slice['name'] = site['login_base'] + "_" + get_leaf(hrn) + slice['url'] = hrn + slice['description'] = hrn + slice['pointer'] = 0 + reg_objects['slice_record'] = slice - reg_objects['keys'] = keys - + reg_objects['users'] = {} + for user in users: + user['key_ids'] = [] + reg_objects['users'][user['email']] = user + + manager_base = 'sfa.managers' mgr_type = 'pl' manager_module = manager_base + ".aggregate_manager_%s" % mgr_type diff --git a/sfa/plc/slices.py b/sfa/plc/slices.py index 66766cf5..2cb74dda 100644 --- a/sfa/plc/slices.py +++ b/sfa/plc/slices.py @@ -265,28 +265,31 @@ class Slices: # get the list of valid slice users from the registry and make # sure they are added to the slice slicename = hrn_to_pl_slicename(slice_record['hrn']) - researchers = slice_record.get('researcher', []) + if reg_objects: + researchers = reg_objects['users'].keys() + else: + researchers = slice_record.get('researcher', []) for researcher in researchers: - person_record = {} if reg_objects: - person_records = reg_objects['users']['researcher'] + person_dict = reg_objects['users'][researcher] else: person_records = registry.resolve(credential, researcher) - for record in person_records: - if record['type'] in ['user'] and record['enabled']: - person_record = record - if not person_record: - return 1 - person_dict = person_record + for record in person_records: + if record['type'] in ['user'] and record['enabled']: + person_record = record + if not person_record: + return 1 + person_dict = person_record + local_person=False if peer: peer_id = self.api.plshell.GetPeers(self.api.plauth, {'shortname': peer}, ['peer_id'])[0]['peer_id'] persons = self.api.plshell.GetPersons(self.api.plauth, {'email': [person_dict['email']], 'peer_id': peer_id}, ['person_id', 'key_ids']) - if not persons: - persons = self.api.plshell.GetPersons(self.api.plauth, [person_dict['email']], ['person_id', 'key_ids']) - if persons: - local_person=True - + if not persons: + persons = self.api.plshell.GetPersons(self.api.plauth, [person_dict['email']], ['person_id', 'key_ids']) + if persons: + local_person=True + else: persons = self.api.plshell.GetPersons(self.api.plauth, [person_dict['email']], ['person_id', 'key_ids']) -- 2.43.0