Small bugfix. NT.
[sfa.git] / sfa / senslab / slab-import.py
index 9d17757..c10a91f 100644 (file)
@@ -8,14 +8,21 @@
 import sys
 from sfa.senslab.OARrestapi import OARapi
 from sfa.senslab.LDAPapi import LDAPapi
+from sfa.senslab.slabdriver import SlabDriver
 from sfa.util.config import Config
-from sfa.util.xrn import hrn_to_urn, get_authority
+from sfa.util.xrn import hrn_to_urn, get_authority,Xrn,get_leaf
 from sfa.util.table import SfaTable
+from sfa.util.record import SfaRecord
 from sfa.trust.hierarchy import Hierarchy
+from sfa.trust.certificate import Keypair
+from sfa.trust.gid import create_uuid
+
 
 AuthHierarchy = Hierarchy()
 table = SfaTable()
-
+if not table.exists():
+    table.create()
+    
 def create_top_level_auth_records(hrn):
     """
     Create top level records (includes root and sub authorities (local/remote)
@@ -66,15 +73,15 @@ def import_node(hrn, node):
         node_record['record_id'] = existing_record['record_id']
         table.update(node_record)
 
+# person is already a sfa record 
 def import_person(person):       
     existing_records = table.find({'hrn': person['hrn'], 'type': 'user'})
     if not existing_records:
-        table.insert(person_record)
+        table.insert(person)
     else:
         existing_record = existing_records[0]
         person['record_id'] = existing_record['record_id']
-        table.update(person_record)      
+        table.update(person)      
         
         
         
@@ -84,7 +91,13 @@ def delete_record( hrn, type):
     for record in record_list:
         table.remove(record)
                 
-                
+def hostname_to_hrn(root_auth,hostname):
+    # keep only the first part of the DNS name
+    #hrn='.'.join( [auth,hostname.split(".")[0] ] )
+    # escape the '.' in the hostname
+    hrn='.'.join( [root_auth,Xrn.escape(hostname)] )
+    return hrn_to_urn(hrn,'node')
+    
 def main():
 
     config = Config()
@@ -95,12 +108,12 @@ def main():
     print interface_hrn, root_auth
     
      # initialize registry db table
-    table = SfaTable()
-    if not table.exists():
-       table.create()
+    #table = SfaTable()
+    #if not table.exists():
+       #table.create()
 
     # create root authority 
-    SenslabImporter.create_top_level_auth_records(root_auth)
+    create_top_level_auth_records(root_auth)
     
     # create s user record for the slice manager
     #Do we need this?
@@ -121,15 +134,16 @@ def main():
         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
+    #Get Senslab nodes 
+   
+    Driver = SlabDriver(config)
+    nodes_dict  = Driver.GetNodes()
+    #print "\r\n NODES8DICT ",nodes_dict
     
-    persons_list = SenslabUsers.GetPersons()
-    print "\r\n PERSONS_LIST ",persons_list
+    ldap_person_list = Driver.GetPersons()
+    print "\r\n PERSONS_LIST ",ldap_person_list
 
-    keys_list = SenslabUsers.GetKeys()
-    print "\r\n KEYSS_LIST ",keys_list
+   
     
     #slices_list = SenslabUsers.GetSlices()
     #print "\r\n SLICES_LIST ",slices_list
@@ -149,32 +163,24 @@ def main():
             #(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, root_auth, 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
-        import_node(hrn, node)
+        hrn =  hostname_to_hrn( root_auth, node['hostname'])
+        if hrn not in existing_hrns or \
+        (hrn, 'node') not in existing_records:
+            print "\t\t NODE HRN NOT in existing record, importing it" ,hrn
+            import_node(hrn, node)
 
    # import persons
-    for person in persons_list:
-        print >>sys.stderr, "\r\n\r\n^^^^^^^^^^^^^PERSON hrn %s person %s site hrn %s" %(hrn,person)    
-        SenslabImporter.import_person( site_hrn, person,keys_list)
-        if hrn not in existing_hrns or \
-            (hrn, 'user') not in existing_records or update_record:
-            import_person(site_hrn, person)    
+    for person in ldap_person_list:
+        if person['hrn'] not in existing_hrns or \
+            (person['hrn'], 'user') not in existing_records :
+            import_person( person)     
 # import slices
         #for slice_id in site['slice_ids']:
                #print >>sys.stderr, "\r\n\r\n \t ^^^^^^^\\\\\\\\\\\\\\\^^^^^^ slice_id  %s  " %(slice_id)              
@@ -221,7 +227,7 @@ def main():
             login_base = get_leaf(get_authority(record_hrn))
             nodename = Xrn.unescape(get_leaf(record_hrn))
             print "type: node :  nodename %s" %(nodename)
-            for node in nodes_dict.values():
+            for node in nodes_dict:
                 if node['hostname'] == nodename :
                     found = True
                     break