6 PL_DATETIME_FORMAT = "%Y-%m-%d %H:%M:%S"
8 #given a login_base or site_id (which are ids of a site in Planetlab), determines the hierarchical name of it in GENI
9 def site_to_auth(id_or_loginbase):
14 if isinstance(id_or_loginbase, int):
15 site_id = id_or_loginbase
16 querystr = "SELECT login_base FROM sites WHERE site_id = "+str(id_or_loginbase)
17 res = cnx.query(querystr).dictresult()
19 loginbase = res[0]['login_base']
23 loginbase = id_or_loginbase
25 querystr = "SELECT site_id FROM sites WHERE login_base = '"+loginbase+"'"
26 res = cnx.query(querystr).dictresult()
28 site_id = res[0]['site_id']
31 #search login_base in trees
32 (sr_tree, cr_tree) = get_tree_globals()
33 hrn = site_to_auth_rec(loginbase, sr_tree.my_tree)
35 hrn = site_to_auth_rec(loginbase, cr_tree.my_tree)
41 def site_to_auth_rec(loginbase, treenode):
42 if treenode.info.login_base and treenode.info.login_base == loginbase:
43 return treenode.info.name
45 for child in treenode.children:
46 name = site_to_auth_rec(loginbase, child)
51 def hrn_to_loginbase(hrn, algorithm=0):
52 hrn_arr = hrn.split('.')
54 alg_count = algorithm-1
55 login_base = hrn_arr[len(hrn_arr)-1]
56 while j>=0 and alg_count>=0:
58 login_base = login_base+hrn_arr[j]
60 alg_count = alg_count-1
61 if len(login_base) > 20:
62 return login_base[0:20]
67 #given an email or person_id (which are ids of a person in Planetlab), determined the last portion of hierarchical name of it in GENI
68 def person_to_user(email, algorithm = 0):
71 hrn_suffix = email.split('@')[0].replace('.','-')
73 hrn_suffix = email.split('@')[0].replace('.','-')+'-'+email.split('@')[1].split('.')[0]
75 hrn_suffix = email.replace('@','-')
76 hrn_suffix = hrn_suffix.replace('.','-')
79 def plslice_to_slice(slice_name):
81 while slice_name[i]!='_':
83 return slice_name[i+1:len(slice_name)]
85 def plnode_to_node(hostname, algorithm = 0):
88 hrn_suffix = hostname.split('.')[0]
90 hrn_suffix = hostname.split('.')[0]+'-'+hostname.split('.')[1]
92 hrn_suffix = hrn_suffix.replace('.','-')
95 def check_exists_pl(cnx, pointer, type):
97 if type == 'SA' or type == 'MA':
98 res = cnx.query("SELECT deleted FROM sites WHERE site_id = "+str(pointer)).dictresult()
99 if len(res)==0 or res[0]['deleted'] == 't':
101 elif type == 'slice':
102 res = cnx.query("SELECT is_deleted FROM slices WHERE slice_id = "+str(pointer)).dictresult()
103 if len(res)==0 or res[0]['is_deleted'] == 't':
106 res = cnx.query("SELECT deleted FROM persons WHERE person_id = "+str(pointer)).dictresult()
107 if len(res)==0 or res[0]['deleted'] == 't':
110 res = cnx.query("SELECT deleted FROM nodes WHERE node_id = "+str(pointer)).dictresult()
111 if len(res)==0 or res[0]['deleted'] == 't':
115 def check_exists_geni(record, dbinfo):
119 #lookup in GENI tables
120 geni_res = cnx.query("SELECT * FROM "+table+" WHERE hrn = '"+get_leaf(record['g_params']["hrn"])+"' ").dictresult()
128 #fill the geni table with the records in PL database
129 #login_base: indicates the site in PL
130 #tablename: the GENI table name
131 #type: 'slice' or 'component' indicating the registry type of the GENI table
132 def populate_pl_data(login_base, tablename, type):
133 cnx = get_plDB_conn()
134 site_id = cnx.query("SELECT site_id FROM sites WHERE login_base='"+login_base+"';").dictresult()[0]['site_id']
136 if type == 'slice': #slice registry
137 #populate user records
138 querystr = "SELECT p.person_id, p.email FROM persons as p, person_site as ps WHERE p.person_id = ps.person_id AND ps.site_id = "+str(site_id)
139 users = cnx.query(querystr).dictresult()
141 new_hrn = person_to_user(user['email'])
142 existing = cnx.query("SELECT * FROM "+tablename+" WHERE hrn = '"+new_hrn+"'; ").dictresult()
143 if len(existing) > 0:
144 new_hrn = person_to_user(user['email'], 1)
145 existing = cnx.query("SELECT * FROM "+tablename+" WHERE hrn = '"+new_hrn+"'; ").dictresult()
146 if len(existing) > 0:
147 new_hrn = person_to_user(user['email'], 2)
148 cnx.query("INSERT INTO "+tablename+"(hrn,type,wrapperurl,pointer) VALUES('"+new_hrn+"','user','local',"+str(user['person_id'])+")")
149 #populate slice records
150 querystr = "SELECT slice_id, name FROM slices WHERE site_id = "+str(site_id)
151 slices = cnx.query(querystr).dictresult()
153 slcname = slice['name'].split('_')
154 if slcname[len(slcname)-1] != 'deleted':
155 new_hrn = plslice_to_slice(slice['name'])
156 existing = cnx.query("SELECT * FROM "+tablename+" WHERE hrn = '"+new_hrn+"'; ").dictresult()
157 if len(existing) > 0:
158 new_hrn = new_hrn+'-'+str(slice['slice_id'])
159 cnx.query("INSERT INTO "+tablename+"(hrn,type,wrapperurl,pointer) VALUES('"+new_hrn+"','slice','local',"+str(slice['slice_id'])+")")
161 if type == 'component': #component registry
162 #populate node records
163 querystr = "SELECT node_id, hostname FROM nodes WHERE site_id = "+str(site_id)
164 nodes = cnx.query(querystr).dictresult()
166 new_hrn = plnode_to_node(node['hostname'], 0)
167 existing = cnx.query("SELECT * FROM "+tablename+" WHERE hrn = '"+new_hrn+"'; ").dictresult()
168 if len(existing) > 0:
169 new_hrn = plnode_to_node(node['hostname'], 1)
170 existing = cnx.query("SELECT * FROM "+tablename+" WHERE hrn = '"+new_hrn+"'; ").dictresult()
171 if len(existing) > 0:
172 new_hrn = plnode_to_node(node['hostname'], 2)
173 cnx.query("INSERT INTO "+tablename+"(hrn,type,wrapperurl,pointer) VALUES('"+new_hrn+"','node','local',"+str(node['node_id'])+")")