#GetNodes moved to slabdriver.py
- def GetSites(self, site_filter= None, return_fields=None):
- print>>sys.stderr, " \r\n GetSites+++++++++++++++++"
- self.parser.SendRequest("GET_resources_full")
- site_dict = self.parser.GetSitesFromOARParse()
- return_site_list = []
- site = site_dict.values()[0]
- Users = SenslabImportUsers()
-
- #print>>sys.stderr, " \r\n GetSites sites_dict %s site_filter %s \r\n \r\n \r\n \r\n------site %s" %(site_dict,site_filter,site )
- admins_dict ={'person_ids': Users.GetPIs(site['site_id'])}
- site.update(admins_dict)
-
- slice_list = Users.GetSlices()
- for sl in slice_list:
- #print>>sys.stderr, " \r\n GetSites sl %s" %(sl)
- if sl['site_id'] == site['site_id']:
- site['slice_ids'].append(sl['slice_id'])
-
- if not (site_filter or return_fields):
- return_site_list = site_dict.values()
- return return_site_list
-
- return_site_list = parse_filter(site_dict.values(),site_filter ,'site', return_fields)
- return return_site_list
+
def GetJobs(self):
self.keys_list = []
self.slices_list= []
#self.resources_fulldict['keys'] = []
- self.InitPersons()
- self.InitKeys()
- self.InitSlices()
+ #self.InitPersons()
+ #self.InitKeys()
+ #self.InitSlices()
- def InitSlices(self):
- slices_per_site = {}
- dflt_slice = { 'instantiation': None, 'description': "Senslab Slice Test", 'node_ids': [], 'url': "http://localhost.localdomain/", 'max_nodes': 256, 'site_id': 3,'peer_slice_id': None, 'slice_tag_ids': [], 'peer_id': None, 'hrn' :None}
- for person in self.person_list:
- if 'user' or 'pi' in person['roles']:
- def_slice = {}
- #print>>sys.stderr, "\r\n \rn \t\t _____-----------************def_slice person %s \r\n \rn " %(person['person_id'])
- def_slice['person_ids'] = []
- def_slice['person_ids'].append(person['person_id'])
- def_slice['slice_id'] = person['person_id']
- def_slice['creator_person_id'] = person['person_id']
- extime = datetime.datetime.utcnow()
- def_slice['created'] = int(time.mktime(extime.timetuple()))
- extime = extime + datetime.timedelta(days=365)
- def_slice['expires'] = int(time.mktime(extime.timetuple()))
- #print>>sys.stderr, "\r\n \rn \t\t _____-----------************def_slice expires %s \r\n \r\n "%(def_slice['expires'])
- def_slice['name'] = person['email'].replace('@','_',1)
- #print>>sys.stderr, "\r\n \rn \t\t _____-----------************def_slice %s \r\n \r\n " %(def_slice['name'])
- def_slice.update(dflt_slice)
- self.slices_list.append(def_slice)
+ #def InitSlices(self):
+ #slices_per_site = {}
+ #dflt_slice = { 'instantiation': None, 'description': "Senslab Slice Test", 'node_ids': [], 'url': "http://localhost.localdomain/", 'max_nodes': 256, 'site_id': 3,'peer_slice_id': None, 'slice_tag_ids': [], 'peer_id': None, 'hrn' :None}
+ #for person in self.person_list:
+ #if 'user' or 'pi' in person['roles']:
+ #def_slice = {}
+ ##print>>sys.stderr, "\r\n \rn \t\t _____-----------************def_slice person %s \r\n \rn " %(person['person_id'])
+ #def_slice['person_ids'] = []
+ #def_slice['person_ids'].append(person['person_id'])
+ #def_slice['slice_id'] = person['person_id']
+ #def_slice['creator_person_id'] = person['person_id']
+ #extime = datetime.datetime.utcnow()
+ #def_slice['created'] = int(time.mktime(extime.timetuple()))
+ #extime = extime + datetime.timedelta(days=365)
+ #def_slice['expires'] = int(time.mktime(extime.timetuple()))
+ ##print>>sys.stderr, "\r\n \rn \t\t _____-----------************def_slice expires %s \r\n \r\n "%(def_slice['expires'])
+ #def_slice['name'] = person['email'].replace('@','_',1)
+ ##print>>sys.stderr, "\r\n \rn \t\t _____-----------************def_slice %s \r\n \r\n " %(def_slice['name'])
+ #def_slice.update(dflt_slice)
+ #self.slices_list.append(def_slice)
- #print>>sys.stderr, "InitSlices SliceLIST", self.slices_list
+ ##print>>sys.stderr, "InitSlices SliceLIST", self.slices_list
- def InitPersons(self):
- persons_per_site = {}
- person_id = 7
- persons_per_site[person_id] = {'person_id': person_id,'site_ids': [3],'email': 'a_rioot@senslab.fr', 'key_ids':[1], 'roles': ['pi'], 'role_ids':[20],'first_name':'A','last_name':'rioot'}
- person_id = 8
- persons_per_site[person_id] = {'person_id': person_id,'site_ids': [3],'email': 'lost@senslab.fr','key_ids':[1],'roles': ['pi'], 'role_ids':[20],'first_name':'L','last_name':'lost'}
- person_id = 9
- persons_per_site[person_id] = {'person_id': person_id,'site_ids': [3],'email': 'user@senslab.fr','key_ids':[1],'roles': ['user'], 'role_ids':[1],'first_name':'U','last_name':'senslab'}
- for person_id in persons_per_site.keys():
- person = persons_per_site[person_id]
- if person['person_id'] not in self.person_list:
- self.person_list.append(person)
- #print>>sys.stderr, "InitPersons PERSON DICLIST", self.person_list
+ #def InitPersons(self):
+ #persons_per_site = {}
+ #person_id = 7
+ #persons_per_site[person_id] = {'person_id': person_id,'site_ids': [3],'email': 'a_rioot@senslab.fr', 'key_ids':[1], 'roles': ['pi'], 'role_ids':[20],'first_name':'A','last_name':'rioot'}
+ #person_id = 8
+ #persons_per_site[person_id] = {'person_id': person_id,'site_ids': [3],'email': 'lost@senslab.fr','key_ids':[1],'roles': ['pi'], 'role_ids':[20],'first_name':'L','last_name':'lost'}
+ #person_id = 9
+ #persons_per_site[person_id] = {'person_id': person_id,'site_ids': [3],'email': 'user@senslab.fr','key_ids':[1],'roles': ['user'], 'role_ids':[1],'first_name':'U','last_name':'senslab'}
+ #for person_id in persons_per_site.keys():
+ #person = persons_per_site[person_id]
+ #if person['person_id'] not in self.person_list:
+ #self.person_list.append(person)
+ ##print>>sys.stderr, "InitPersons PERSON DICLIST", self.person_list
- def InitKeys(self):
- #print>>sys.stderr, " InitKeys HEYYYYYYY\r\n"
+ #def InitKeys(self):
+ ##print>>sys.stderr, " InitKeys HEYYYYYYY\r\n"
- self.keys_list = [{'peer_key_id': None, 'key_type': 'ssh', 'key' :"ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEArcdW0X2la754SoFE+URbDsYP07AZJjrspMlvUc6u+4o6JpGRkqiv7XdkgOMIn6w3DF3cYCcA1Mc6XSG7gSD7eQx614cjlLmXzHpxSeidSs/LgZaAQpq9aQ0KhEiFxg0gp8TPeB5Z37YOPUumvcJr1ArwL/8tAOx3ClwgRhccr2HOe10YtZbMEboCarTlzNHiGolo7RYIJjGuG2RBSeAg6SMZrtnn0OdKBwp3iUlOfkS98eirVtWUp+G5+SZggip3fS3k5Oj7OPr1qauva8Rizt02Shz30DN9ikFNqV2KuPg54nC27/DQsQ6gtycARRVY91VvchmOk0HxFiW/9kS2GQ== root@FlabFedora2",'person_id': 7, 'key_id':1, 'peer_id':None },
- {'peer_key_id': None, 'key_type': 'ssh', 'key' :"ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEArcdW0X2la754SoFE+URbDsYP07AZJjrspMlvUc6u+4o6JpGRkqiv7XdkgOMIn6w3DF3cYCcA1Mc6XSG7gSD7eQx614cjlLmXzHpxSeidSs/LgZaAQpq9aQ0KhEiFxg0gp8TPeB5Z37YOPUumvcJr1ArwL/8tAOx3ClwgRhccr2HOe10YtZbMEboCarTlzNHiGolo7RYIJjGuG2RBSeAg6SMZrtnn0OdKBwp3iUlOfkS98eirVtWUp+G5+SZggip3fS3k5Oj7OPr1qauva8Rizt02Shz30DN9ikFNqV2KuPg54nC27/DQsQ6gtycARRVY91VvchmOk0HxFiW/9kS2GQ== root@FlabFedora2",'person_id': 8, 'key_id':1, 'peer_id':None },
- {'peer_key_id': None, 'key_type': 'ssh', 'key' :"ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEArcdW0X2la754SoFE+URbDsYP07AZJjrspMlvUc6u+4o6JpGRkqiv7XdkgOMIn6w3DF3cYCcA1Mc6XSG7gSD7eQx614cjlLmXzHpxSeidSs/LgZaAQpq9aQ0KhEiFxg0gp8TPeB5Z37YOPUumvcJr1ArwL/8tAOx3ClwgRhccr2HOe10YtZbMEboCarTlzNHiGolo7RYIJjGuG2RBSeAg6SMZrtnn0OdKBwp3iUlOfkS98eirVtWUp+G5+SZggip3fS3k5Oj7OPr1qauva8Rizt02Shz30DN9ikFNqV2KuPg54nC27/DQsQ6gtycARRVY91VvchmOk0HxFiW/9kS2GQ== root@FlabFedora2",'person_id': 9, 'key_id':1, 'peer_id':None }]
+ #self.keys_list = [{'peer_key_id': None, 'key_type': 'ssh', 'key' :"ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEArcdW0X2la754SoFE+URbDsYP07AZJjrspMlvUc6u+4o6JpGRkqiv7XdkgOMIn6w3DF3cYCcA1Mc6XSG7gSD7eQx614cjlLmXzHpxSeidSs/LgZaAQpq9aQ0KhEiFxg0gp8TPeB5Z37YOPUumvcJr1ArwL/8tAOx3ClwgRhccr2HOe10YtZbMEboCarTlzNHiGolo7RYIJjGuG2RBSeAg6SMZrtnn0OdKBwp3iUlOfkS98eirVtWUp+G5+SZggip3fS3k5Oj7OPr1qauva8Rizt02Shz30DN9ikFNqV2KuPg54nC27/DQsQ6gtycARRVY91VvchmOk0HxFiW/9kS2GQ== root@FlabFedora2",'person_id': 7, 'key_id':1, 'peer_id':None },
+ #{'peer_key_id': None, 'key_type': 'ssh', 'key' :"ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEArcdW0X2la754SoFE+URbDsYP07AZJjrspMlvUc6u+4o6JpGRkqiv7XdkgOMIn6w3DF3cYCcA1Mc6XSG7gSD7eQx614cjlLmXzHpxSeidSs/LgZaAQpq9aQ0KhEiFxg0gp8TPeB5Z37YOPUumvcJr1ArwL/8tAOx3ClwgRhccr2HOe10YtZbMEboCarTlzNHiGolo7RYIJjGuG2RBSeAg6SMZrtnn0OdKBwp3iUlOfkS98eirVtWUp+G5+SZggip3fS3k5Oj7OPr1qauva8Rizt02Shz30DN9ikFNqV2KuPg54nC27/DQsQ6gtycARRVY91VvchmOk0HxFiW/9kS2GQ== root@FlabFedora2",'person_id': 8, 'key_id':1, 'peer_id':None },
+ #{'peer_key_id': None, 'key_type': 'ssh', 'key' :"ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEArcdW0X2la754SoFE+URbDsYP07AZJjrspMlvUc6u+4o6JpGRkqiv7XdkgOMIn6w3DF3cYCcA1Mc6XSG7gSD7eQx614cjlLmXzHpxSeidSs/LgZaAQpq9aQ0KhEiFxg0gp8TPeB5Z37YOPUumvcJr1ArwL/8tAOx3ClwgRhccr2HOe10YtZbMEboCarTlzNHiGolo7RYIJjGuG2RBSeAg6SMZrtnn0OdKBwp3iUlOfkS98eirVtWUp+G5+SZggip3fS3k5Oj7OPr1qauva8Rizt02Shz30DN9ikFNqV2KuPg54nC27/DQsQ6gtycARRVY91VvchmOk0HxFiW/9kS2GQ== root@FlabFedora2",'person_id': 9, 'key_id':1, 'peer_id':None }]
- def GetPersons(self, person_filter=None, return_fields=None):
- #print>>sys.stderr, " \r\n GetPersons person_filter %s return_fields %s list: %s" %(person_filter,return_fields, self.person_list)
- if not self.person_list :
- print>>sys.stderr, " \r\n ========>GetPersons NO PERSON LIST DAMMIT<========== \r\n"
+ #def GetPersons(self, person_filter=None, return_fields=None):
+ ##print>>sys.stderr, " \r\n GetPersons person_filter %s return_fields %s list: %s" %(person_filter,return_fields, self.person_list)
+ #if not self.person_list :
+ #print>>sys.stderr, " \r\n ========>GetPersons NO PERSON LIST DAMMIT<========== \r\n"
- if not (person_filter or return_fields):
- return self.person_list
+ #if not (person_filter or return_fields):
+ #return self.person_list
- return_person_list= []
- return_person_list = parse_filter(self.person_list,person_filter ,'persons', return_fields)
- return return_person_list
+ #return_person_list= []
+ #return_person_list = parse_filter(self.person_list,person_filter ,'persons', return_fields)
+ #return return_person_list
def GetPIs(self,site_id):
#print>>sys.stderr," \r\n End GetKeys with filter ", return_key_list
#return return_key_list
- #def GetSlices( self,slice_filter=None, return_fields=None):
- #return_slice_list= []
- #print>>sys.stderr, "\r\n\r\n\t =======================GetSlices "
- #if not (slice_filter or return_fields):
- #return self.slices_list
- #return_slice_list= parse_filter(self.slices_list, slice_filter,'slice', return_fields)
- #return return_slice_list
+
def AddSlice(self, slice_fields):
+++ /dev/null
-#!/usr/bin/python
-#
-##
-# Import PLC records into the SFA database. It is indended that this tool be
-# run once to create SFA records that reflect the current state of the
-# planetlab database.
-#
-# The import tool assumes that the existing PLC hierarchy should all be part
-# of "planetlab.us" (see the root_auth and level1_auth variables below).
-#
-# Public keys are extracted from the users' SSH keys automatically and used to
-# create GIDs. This is relatively experimental as a custom tool had to be
-# written to perform conversion from SSH to OpenSSL format. It only supports
-# RSA keys at this time, not DSA keys.
-##
-
-import getopt
-import sys
-import tempfile
-
-
-from sfa.util.record import *
-from sfa.util.table import SfaTable
-from sfa.util.xrn import get_leaf, get_authority
-from sfa.util.plxrn import hostname_to_hrn, slicename_to_hrn, email_to_hrn, hrn_to_pl_slicename
-from sfa.util.config import Config
-from sfa.trust.certificate import convert_public_key, Keypair
-from sfa.trust.trustedroots import *
-from sfa.trust.hierarchy import *
-from sfa.util.xrn import Xrn
-from sfa.trust.gid import create_uuid
-
-
-from sfa.senslab.SenslabImportUsers import *
-from sfa.senslab.OARrestapi import *
-
-from sfa.senslab.SenslabImport import SenslabImport
-
-
-
-
-
-oarserver = {}
-oarserver['ip'] = '10.127.255.254'
-oarserver['port'] = 80
-oarserver['uri'] = '/oarapi/resources/full.json'
-
-
-def process_options():
-
- (options, args) = getopt.getopt(sys.argv[1:], '', [])
- for opt in options:
- name = opt[0]
- val = opt[1]
-
-
-def load_keys(filename):
- keys = {}
- tmp_dict = {}
- try:
- execfile(filename, tmp_dict)
- if 'keys' in tmp_dict:
- keys = tmp_dict['keys']
- return keys
- except:
- return keys
-
-def save_keys(filename, keys):
- f = open(filename, 'w')
- f.write("keys = %s" % str(keys))
- f.close()
-
-def main():
-
- process_options()
- config = Config()
- if not config.SFA_REGISTRY_ENABLED:
- sys.exit(0)
- root_auth = config.SFA_REGISTRY_ROOT_AUTH
- interface_hrn = config.SFA_INTERFACE_HRN
- print interface_hrn, root_auth
- keys_filename = config.config_path + os.sep + 'person_keys.py'
-
- SenslabImporter = SenslabImport()
- SenslabUsers = SenslabImportUsers()
-
- OARImporter = OARapi()
- #print '\r\n =====OAR Importer list===== '
- #for node in OARImporter.OARserver.GetNodes().keys():
- #print node, OARImporter.OARserver.GetNodes[node]
-
-
- #if config.SFA_API_DEBUG: SenslabImporter.logger.setLevelDebug()
- #shell = sfaImporter.shell
- #plc_auth = sfaImporter.plc_auth
- #print plc_auth
-
- # initialize registry db table
- table = SfaTable()
- if not table.exists():
- table.create()
-
- # create root authority
- SenslabImporter.create_top_level_auth_records(root_auth)
- if not root_auth == interface_hrn:
- SenslabImporter.create_top_level_auth_records(interface_hrn)
-
- # create s user record for the slice manager
- SenslabImporter.create_sm_client_record()
-
- # create interface records ADDED 12 JUILLET 2011
- SenslabImporter.logger.info("Import: creating interface records")
- SenslabImporter.create_interface_records()
-
- # add local root authority's cert to trusted list ADDED 12 JUILLET 2011
- SenslabImporter.logger.info("Import: adding " + interface_hrn + " to trusted list")
- authority = SenslabImporter.AuthHierarchy.get_auth_info(interface_hrn)
- SenslabImporter.TrustedRoots.add_gid(authority.get_gid_object())
-
-
- print "\r\n \r\n create dict of all existing sfa records"
- # create dict of all existing sfa records
- existing_records = {}
- existing_hrns = []
- key_ids = []
- person_keys = {}
- results = table.find()
- for result in results:
- existing_records[(result['hrn'], result['type'])] = result
- existing_hrns.append(result['hrn'])
-
-
-
-
- #Get Senslab nodes
- nodes_dict = OARImporter.GetNodes()
- print "\r\n NODES8DICT ",nodes_dict
-
- persons_list = SenslabUsers.GetPersons()
- print "\r\n PERSONS_LIST ",persons_list
-
- keys_list = SenslabUsers.GetKeys()
- print "\r\n KEYSS_LIST ",keys_list
-
- slices_list = SenslabUsers.GetSlices()
- print "\r\n SLICES_LIST ",slices_list
-
- # Get all Senslab sites
- sites_dict = OARImporter.GetSites()
- print "\r\n sSITES_DICT" , sites_dict
-
- # start importing
- for site in sites_dict:
- site_hrn = interface_hrn + "." + site['login_base']
- #sfa_logger().info("Importing site: %s" % site_hrn)
- print "HRN %s %s site existing in hrn ? %s" %( site['login_base'],site_hrn, site_hrn in existing_hrns)
- # import if hrn is not in list of existing hrns or if the hrn exists
- # but its not a site record
- if site_hrn not in existing_hrns or \
- (site_hrn, 'authority') not in existing_records:
- print "SITE HRN UNKNOWN" , site, site_hrn
- site_hrn = SenslabImporter.import_site(interface_hrn, site)
-
- print "\r\n \r\n ===========IMPORT NODE_RECORDS ==========\r\n site %s \r\n \t nodes_dict %s" %(site,nodes_dict)
- # import node records
- for node_id in site['node_ids']:
- #for[node['node_id'] for node in nodes_dict]:
- #print '\r\n \t **NODE_ID %s node %s '%( node_id, node)
- #continue
- for node in nodes_dict:
- if node_id is node['node_id']:
- #node = nodes_dict[node_id]
- print '\r\n \t NODE_ID %s node %s '%( node_id, node)
- hrn = hostname_to_hrn(interface_hrn, site['login_base'], node['hostname'])
- break
-
- if hrn not in existing_hrns or \
- (hrn, 'node') not in existing_records:
- print "\t\t NODE HRN NOT in existing records!" ,hrn
- SenslabImporter.import_node(hrn, node)
-
- # import persons
- for person in persons_list:
- hrn = email_to_hrn(site_hrn, person['email'])
- print >>sys.stderr, "\r\n\r\n^^^^^^^^^^^^^PERSON hrn %s person %s site hrn %s" %(hrn,person,site_hrn)
- SenslabImporter.import_person( site_hrn, person,keys_list)
-
-# import slices
- for slice_id in site['slice_ids']:
- print >>sys.stderr, "\r\n\r\n \t ^^^^^^^\\\\\\\\\\\\\\\^^^^^^ slice_id %s " %(slice_id)
- for sl in slices_list:
- if slice_id is sl['slice_id']:
- #hrn = slicename_to_hrn(interface_hrn, sl['name'])
- hrn = email_to_hrn(site_hrn, sl['name'])
- print >>sys.stderr, "\r\n\r\n^^^^^^^^^^^^^SLICE ID hrn %s site_hrn %s" %(hrn,site_hrn)
- if hrn not in existing_hrns or \
- (hrn, 'slice') not in existing_records:
- SenslabImporter.import_slice(site_hrn, sl)
-
-
- # remove stale records
- system_records = [interface_hrn, root_auth, interface_hrn + '.slicemanager']
- for (record_hrn, type) in existing_records.keys():
- if record_hrn in system_records:
- continue
-
- record = existing_records[(record_hrn, type)]
- if record['peer_authority']:
- continue
- ## remove stale records
- #for (record_hrn, type) in existing_records.keys():
- #record = existing_records[(record_hrn, type)]
- #print" \r\n ****record hrn %s \t\t TYPE %s " %(record_hrn,type)
- ## if this is the interface name dont do anything
- #if record_hrn == interface_hrn or \
- #record_hrn == root_auth or \
- #record['peer_authority']:
- #continue
-
-
- found = False
-
- if type == 'authority':
- for site in sites_dict:
- print "\t type : authority : ", site
- site_hrn = interface_hrn + "." + site['login_base']
- if site_hrn == record_hrn and site['site_id'] == record['pointer']:
- found = True
- print "\t \t Found :", found
- break
-
- elif type == 'node':
- login_base = get_leaf(get_authority(record_hrn))
-
- nodename = Xrn.unescape(get_leaf(record_hrn))
- print "type: node : login_base %s nodename %s" %(login_base, nodename)
- if login_base in sites_dict:
- site = sites_dict[login_base]
- print "\t type node : login base %s site %s" %(login_base, site)
- for node in nodes_dict.values():
- tmp_nodename = node['hostname']
- if tmp_nodename == nodename and \
- node['site_id'] == site['site_id'] and \
- node['node_id'] == record['pointer']:
- found = True
- print "\t Nodename: %s site id %s node id %s record %s" %( nodename, node['site_id'], node['node_id'],record['pointer'])
- break
- else:
- continue
-
- if not found:
- record_object = existing_records[(record_hrn, type)]
- print "\t\t NOT FOUND ! "
- SenslabImporter.delete_record(record_hrn, type)
-
- # save pub keys
- SenslabImporter.logger.info('Import: saving current pub keys')
- save_keys(keys_filename, person_keys)
-
-
-
-if __name__ == "__main__":
- main()
print >>sys.stderr, "\r\n_____________ SFA SENSLAB DRIVER \r\n"
# thierry - just to not break the rest of this code
- #self.oar = OARapi()
- #self.users = SenslabImportUsers()
+
+
self.oar = OARapi()
self.ldap = LDAPapi()
self.users = SenslabImportUsers()
return pl_record
- def fill_record_pl_info(self, records):
- """
- Fill in the planetlab specific fields of a SFA record. This
- involves calling the appropriate PLC method to retrieve the
- database record for the object.
-
- PLC data is filled into the pl_info field of the record.
-
- @param record: record to fill in field (in/out param)
- """
- # get ids by type
- #print>>sys.stderr, "\r\n \r\rn \t\t >>>>>>>>>>fill_record_pl_info records %s : "%(records)
- node_ids, site_ids, slice_ids = [], [], []
- person_ids, key_ids = [], []
- type_map = {'node': node_ids, 'authority': site_ids,
- 'slice': slice_ids, 'user': person_ids}
-
- for record in records:
- for type in type_map:
- #print>>sys.stderr, "\r\n \t\t \t fill_record_pl_info : type %s. record['pointer'] %s "%(type,record['pointer'])
- if type == record['type']:
- type_map[type].append(record['pointer'])
- #print>>sys.stderr, "\r\n \t\t \t fill_record_pl_info : records %s... \r\n \t\t \t fill_record_pl_info : type_map %s"%(records,type_map)
- # get pl records
- nodes, sites, slices, persons, keys = {}, {}, {}, {}, {}
- if node_ids:
- node_list = self.GetNodes( node_ids)
- #print>>sys.stderr, " \r\n \t\t\t BEFORE LIST_TO_DICT_NODES node_ids : %s" %(node_ids)
- nodes = list_to_dict(node_list, 'node_id')
- if site_ids:
- site_list = self.oar.GetSites( site_ids)
- sites = list_to_dict(site_list, 'site_id')
- #print>>sys.stderr, " \r\n \t\t\t site_ids %s sites : %s" %(site_ids,sites)
- if slice_ids:
- slice_list = self.users.GetSlices( slice_ids)
- slices = list_to_dict(slice_list, 'slice_id')
- if person_ids:
- #print>>sys.stderr, " \r\n \t\t \t fill_record_pl_info BEFORE GetPersons person_ids: %s" %(person_ids)
- person_list = self.GetPersons( person_ids)
- persons = list_to_dict(person_list, 'person_id')
- #print>>sys.stderr, "\r\n fill_record_pl_info persons %s \r\n \t\t person_ids %s " %(persons, person_ids)
- for person in persons:
- key_ids.extend(persons[person]['key_ids'])
- #print>>sys.stderr, "\r\n key_ids %s " %(key_ids)
-
- pl_records = {'node': nodes, 'authority': sites,
- 'slice': slices, 'user': persons}
-
- if key_ids:
- key_list = self.users.GetKeys( key_ids)
- keys = list_to_dict(key_list, 'key_id')
- # print>>sys.stderr, "\r\n fill_record_pl_info persons %s \r\n \t\t keys %s " %(keys)
- # fill record info
- for record in records:
- # records with pointer==-1 do not have plc info.
- # for example, the top level authority records which are
- # authorities, but not PL "sites"
- if record['pointer'] == -1:
- continue
-
- for type in pl_records:
- if record['type'] == type:
- if record['pointer'] in pl_records[type]:
- record.update(pl_records[type][record['pointer']])
- break
- # fill in key info
- if record['type'] == 'user':
- if 'key_ids' not in record:
- #print>>sys.stderr, " NO_KEY_IDS fill_record_pl_info key_ids record: %s" %(record)
- logger.info("user record has no 'key_ids' - need to import ?")
- else:
- pubkeys = [keys[key_id]['key'] for key_id in record['key_ids'] if key_id in keys]
- record['keys'] = pubkeys
-
- #print>>sys.stderr, "\r\n \r\rn \t\t <<<<<<<<<<<<<<<<<< fill_record_pl_info records %s : "%(records)
- # fill in record hrns
- records = self.fill_record_hrns(records)
-
- return records
-
+
def AddSliceToNodes(self, slice_name, added_nodes, slice_user=None):
def DeleteSliceFromNodes(self, slice_name, deleted_nodes):
return
- def fill_record_hrns(self, records):
- """
- convert pl ids to hrns
- """
- #print>>sys.stderr, "\r\n \r\rn \t\t \t >>>>>>>>>>>>>>>>>>>>>> fill_record_hrns records %s : "%(records)
- # get ids
- slice_ids, person_ids, site_ids, node_ids = [], [], [], []
- for record in records:
- #print>>sys.stderr, "\r\n \r\rn \t\t \t record %s : "%(record)
- if 'site_id' in record:
- site_ids.append(record['site_id'])
- if 'site_ids' in records:
- site_ids.extend(record['site_ids'])
- if 'person_ids' in record:
- person_ids.extend(record['person_ids'])
- if 'slice_ids' in record:
- slice_ids.extend(record['slice_ids'])
- if 'node_ids' in record:
- node_ids.extend(record['node_ids'])
-
- # get pl records
- slices, persons, sites, nodes = {}, {}, {}, {}
- if site_ids:
- site_list = self.oar.GetSites( site_ids, ['site_id', 'login_base'])
- sites = list_to_dict(site_list, 'site_id')
- #print>>sys.stderr, " \r\n \r\n \t\t ____ site_list %s \r\n \t\t____ sites %s " % (site_list,sites)
- if person_ids:
- person_list = self.GetPersons( person_ids, ['person_id', 'email'])
- #print>>sys.stderr, " \r\n \r\n \t\t____ person_lists %s " %(person_list)
- persons = list_to_dict(person_list, 'person_id')
- if slice_ids:
- slice_list = self.users.GetSlices( slice_ids, ['slice_id', 'name'])
- slices = list_to_dict(slice_list, 'slice_id')
- if node_ids:
- node_list = self.GetNodes( node_ids, ['node_id', 'hostname'])
- nodes = list_to_dict(node_list, 'node_id')
-
- # convert ids to hrns
- for record in records:
-
- # get all relevant data
- type = record['type']
- pointer = record['pointer']
- auth_hrn = self.hrn
- login_base = ''
- if pointer == -1:
- continue
-
- #print>>sys.stderr, " \r\n \r\n \t\t fill_record_hrns : sites %s \r\n \t\t record %s " %(sites, record)
- if 'site_id' in record:
- site = sites[record['site_id']]
- #print>>sys.stderr, " \r\n \r\n \t\t \t fill_record_hrns : sites %s \r\n \t\t\t site sites[record['site_id']] %s " %(sites,site)
- login_base = site['login_base']
- record['site'] = ".".join([auth_hrn, login_base])
- if 'person_ids' in record:
- emails = [persons[person_id]['email'] for person_id in record['person_ids'] \
- if person_id in persons]
- usernames = [email.split('@')[0] for email in emails]
- person_hrns = [".".join([auth_hrn, login_base, username]) for username in usernames]
- #print>>sys.stderr, " \r\n \r\n \t\t ____ person_hrns : %s " %(person_hrns)
- record['persons'] = person_hrns
- if 'slice_ids' in record:
- slicenames = [slices[slice_id]['name'] for slice_id in record['slice_ids'] \
- if slice_id in slices]
- slice_hrns = [slicename_to_hrn(auth_hrn, slicename) for slicename in slicenames]
- record['slices'] = slice_hrns
- if 'node_ids' in record:
- hostnames = [nodes[node_id]['hostname'] for node_id in record['node_ids'] \
- if node_id in nodes]
- node_hrns = [hostname_to_hrn(auth_hrn, login_base, hostname) for hostname in hostnames]
- record['nodes'] = node_hrns
- if 'site_ids' in record:
- login_bases = [sites[site_id]['login_base'] for site_id in record['site_ids'] \
- if site_id in sites]
- site_hrns = [".".join([auth_hrn, lbase]) for lbase in login_bases]
- record['sites'] = site_hrns
- #print>>sys.stderr, "\r\n \r\rn \t\t \t <<<<<<<<<<<<<<<<<<<<<<<< fill_record_hrns records %s : "%(records)
- return records
+
def fill_record_sfa_info(self, records):