From 34ae6acfdd362cc1a5b0085fe04391718e0727f0 Mon Sep 17 00:00:00 2001 From: Tony Mack Date: Sat, 2 May 2009 02:56:48 +0000 Subject: [PATCH] in fill_pl_info() convert internal pl ids to hrns --- geni/util/api.py | 53 +++++++++++++++++++++++++++++++++++++----------- 1 file changed, 41 insertions(+), 12 deletions(-) diff --git a/geni/util/api.py b/geni/util/api.py index a7486de5..8adcecb2 100644 --- a/geni/util/api.py +++ b/geni/util/api.py @@ -280,7 +280,8 @@ class GeniAPI: """ type = record.get_type() pointer = record.get_pointer() - + auth_hrn = self.hrn + login_base = '' # records with pointer==-1 do not have plc info associated with them. # for example, the top level authority records which are # authorities, but not PL "sites" @@ -288,29 +289,57 @@ class GeniAPI: record.set_pl_info({}) return - if (type == "authority"): + if (type in ["authority", "sa", "ma"]): pl_res = self.plshell.GetSites(self.plauth, [pointer]) elif (type == "slice"): pl_res = self.plshell.GetSlices(self.plauth, [pointer]) elif (type == "user"): pl_res = self.plshell.GetPersons(self.plauth, [pointer]) - key_ids = pl_res[0]['key_ids'] - keys = self.plshell.GetKeys(self.plauth, key_ids) - pubkeys = [] - if keys: - pubkeys = [key['key'] for key in keys] - pl_res[0]['keys'] = pubkeys elif (type == "node"): pl_res = self.plshell.GetNodes(self.plauth, [pointer]) else: raise UnknownGeniType(type) - + if not pl_res: - # the planetlab record no longer exists - # TODO: delete the geni record ? raise PlanetLabRecordDoesNotExist(record.get_name()) - record.set_pl_info(pl_res[0]) + # convert ids to hrns + pl_record = pl_res[0] + print pl_record + if 'site_id' in pl_record: + sites = self.plshell.GetSites(self.plauth, pl_record['site_id'], ['login_base']) + site = sites[0] + login_base = site['login_base'] + pl_record['site'] = ".".join([auth_hrn, login_base]) + if 'person_ids' in pl_record: + persons = self.plshell.GetPersons(self.plauth, pl_record['person_ids'], ['email']) + emails = [person['email'] for person in persons] + usernames = [email.split('@')[0] for email in emails] + person_hrns = [".".join([auth_hrn, login_base, username]) for username in usernames] + pl_record['persons'] = person_hrns + if 'slice_ids' in pl_record: + slices = self.plshell.GetSlices(self.plauth, pl_record['slice_ids'], ['name']) + slicenames = [slice['name'] for slice in slices] + slice_hrns = [slicename_to_hrn(auth_hrn, slicename) for slicename in slicenames] + pl_record['slices'] = slice_hrns + if 'node_ids' in pl_record: + nodes = self.plshell.GetNodes(self.plauth, pl_record['node_ids'], ['hostname']) + hostnames = [node['hostname'] for node in nodes] + node_hrns = [hostname_to_hrn(auth_hrn, login_base, hostname) for hostname in hostnames] + pl_record['nodes'] = node_hrns + if 'site_ids' in pl_record: + sites = self.plshell.GetSites(self.plauth, pl_record['site_ids'], ['login_base']) + login_bases = [site['login_base'] for site in sites] + site_hrns = [".".join([auth_hrn, lbase]) for lbase in login_bases] + pl_record['sites'] = site_hrns + if 'key_ids' in pl_record: + keys = self.plshell.GetKeys(self.plauth, pl_record['key_ids']) + pubkeys = [] + if keys: + pubkeys = [key['key'] for key in keys] + pl_record['keys'] = pubkeys + + record.set_pl_info(pl_record) def lookup_users(self, auth_table, user_id_list, role="*"): -- 2.43.0