X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;ds=sidebyside;f=geni%2Fgimport.py;h=e2186a9f7e31608c326e51f795ff06c16e603e1d;hb=a61012b827ba854f3b1be3b7b57b8c521cb27be3;hp=ef6534c23672048b358429d2af3cdf2ea76d0a26;hpb=1558d5577c91788ef01eab10f6dfadef7c51b511;p=sfa.git diff --git a/geni/gimport.py b/geni/gimport.py index ef6534c2..e2186a9f 100755 --- a/geni/gimport.py +++ b/geni/gimport.py @@ -1,3 +1,6 @@ +#!/usr/bin/python +# +# ## # Import PLC records into the Geni database. It is indended that this tool be # run once to create Geni records that reflect the current state of the @@ -49,8 +52,22 @@ root_auth = config.GENI_REGISTRY_ROOT_AUTH level1_auth = config.GENI_REGISTRY_LEVEL1_AUTH if not level1_auth or level1_auth in ['']: level1_auth = None -keyconvert_fn = config.GENI_BASE_DIR + os.sep + "keyconvert/keyconvert" +keyconvert = 'keyconvert' +loaded = False +default_path = "/usr/share/keyconvert/" + keyconvert +cwd = os.path.dirname(os.path.abspath(__file__)) +alt_path = os.sep.join(cwd.split(os.sep)[:-1] + ['keyconvert', 'keyconvert']) +geni_path = config.GENI_BASE_DIR + os.sep + "keyconvert/keyconvert" +files = [default_path, alt_path, geni_path] +for path in files: + if os.path.isfile(path): + keyconvert_fn = path + loaded = True + break + +if not loaded: + raise Exception, "Could not find keyconvert in " + ", ".join(files) def un_unicode(str): if isinstance(str, unicode): @@ -188,7 +205,9 @@ def import_person(parent_hrn, person): person_record = table.resolve("user", hrn) if not person_record: - key_ids = person["key_ids"] + key_ids = [] + if 'key_ids' in person: + key_ids = person["key_ids"] if key_ids: # get the user's private key from the SSH keys they have uploaded @@ -209,14 +228,15 @@ def import_person(parent_hrn, person): report.trace(" inserting user record for " + hrn) table.insert(person_record) else: - key_ids = person["key_ids"] - if key_ids: - pkey = get_pl_pubkey(key_ids[0]) - person_gid = AuthHierarchy.create_gid(hrn, create_uuid(), pkey) - person_record = GeniRecord(name=hrn, gid=person_gid, type="user", pointer=person['person_id']) - report.trace(" updating user record for " + hrn) - table.update(person_record) - + key_ids = person["key_ids"] + + if key_ids: + pkey = get_pl_pubkey(key_ids[0]) + person_gid = AuthHierarchy.create_gid(hrn, create_uuid(), pkey) + person_record = GeniRecord(name=hrn, gid=person_gid, type="user", pointer=person['person_id']) + report.trace(" updating user record for " + hrn) + table.update(person_record) + def import_slice(parent_hrn, slice): AuthHierarchy = Hierarchy() slicename = slice['name'].split("_",1)[-1] @@ -270,9 +290,20 @@ def import_site(parent_hrn, site): AuthHierarchy = Hierarchy() sitename = site['login_base'] sitename = cleanup_string(sitename) - + hrn = parent_hrn + "." + sitename - + + # Hardcode 'internet2' into the hrn for sites hosting + # internet2 nodes. This is a special operation for some vini + # sites only + if ".vini" in parent_hrn and parent_hrn.endswith('vini'): + if sitename.startswith("ii"): + sitename = sitename.replace("ii", "") + hrn = ".".join([parent_hrn, "internet2", sitename]) + elif sitename.startswith("nlr"): + hrn = ".".join([parent_hrn, "internet2", sitename]) + sitename = sitename.replace("nlr", "") + report.trace("Import_Site: importing site " + hrn) # create the authority @@ -289,33 +320,36 @@ def import_site(parent_hrn, site): report.trace(" inserting authority record for " + hrn) table.insert(auth_record) - for person_id in site['person_ids']: - persons = shell.GetPersons(pl_auth, [person_id]) - if persons: - try: - import_person(hrn, persons[0]) - except: - report.trace("Failed to import: %s" % persons[0]) - for slice_id in site['slice_ids']: - slices = shell.GetSlices(pl_auth, [slice_id]) - if slices: - try: - import_slice(hrn, slices[0]) - except: - report.trace("Failed to import: %s" % slices[0]) - for node_id in site['node_ids']: - nodes = shell.GetNodes(pl_auth, [node_id]) - if nodes: - try: - import_node(hrn, nodes[0]) - except: - report.trace("Failed to import: %s" % nodes[0]) + if 'person_ids' in site: + for person_id in site['person_ids']: + persons = shell.GetPersons(pl_auth, [person_id]) + if persons: + try: + import_person(hrn, persons[0]) + except: + report.trace("Failed to import: %s" % persons[0]) + if 'slice_ids' in site: + for slice_id in site['slice_ids']: + slices = shell.GetSlices(pl_auth, [slice_id]) + if slices: + try: + import_slice(hrn, slices[0]) + except: + report.trace("Failed to import: %s" % slices[0]) + if 'node_ids' in site: + for node_id in site['node_ids']: + nodes = shell.GetNodes(pl_auth, [node_id]) + if nodes: + try: + import_node(hrn, nodes[0]) + except: + report.trace("Failed to import: %s" % nodes[0]) def create_top_level_auth_records(hrn): parent_hrn = get_authority(hrn) print hrn, ":", parent_hrn if not parent_hrn: - parent_hrn = hrn + parent_hrn = hrn auth_info = AuthHierarchy.get_auth_info(parent_hrn) table = get_auth_table(parent_hrn) @@ -331,8 +365,6 @@ def main(): process_options() - print "Base Directory: ", config.GENI_BASE_DIR - AuthHierarchy = Hierarchy() TrustedRoots = TrustedRootList() @@ -356,7 +388,12 @@ def main(): connect_shell() - sites = shell.GetSites(pl_auth) + sites = shell.GetSites(pl_auth, {'peer_id': None}) + # create a fake internet2 site first + i2site = {'name': 'Internet2', 'abbreviated_name': 'I2', + 'login_base': 'internet2', 'site_id': -1} + import_site(import_auth, i2site) + for site in sites: import_site(import_auth, site)