gid creation code change, again. NT.
[sfa.git] / sfa / senslab / slab-import.py
index 20d435b..38be563 100644 (file)
@@ -6,13 +6,19 @@
 #
 ###########################################################################
 import sys
 #
 ###########################################################################
 import sys
+import datetime
+import time
 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.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.table import SfaTable
+from sfa.util.record import SfaRecord
 from sfa.trust.hierarchy import Hierarchy
 from sfa.trust.hierarchy import Hierarchy
+from sfa.trust.certificate import Keypair,convert_public_key
+from sfa.trust.gid import create_uuid
+
 
 AuthHierarchy = Hierarchy()
 table = SfaTable()
 
 AuthHierarchy = Hierarchy()
 table = SfaTable()
@@ -45,6 +51,7 @@ def create_top_level_auth_records(hrn):
     if not auth_record:
         auth_record = SfaRecord(hrn=hrn, gid=auth_info.get_gid_object(), type="authority", pointer=-1)
         auth_record['authority'] = get_authority(auth_record['hrn'])
     if not auth_record:
         auth_record = SfaRecord(hrn=hrn, gid=auth_info.get_gid_object(), type="authority", pointer=-1)
         auth_record['authority'] = get_authority(auth_record['hrn'])
+        print sys.stderr, " \r\n \t slab-import : auth record %s inserted" %(auth_record['hrn'])
         table.insert(auth_record)
         print>>sys.stderr, "\r\n ========= \t\t SenslabImport NO AUTH RECORD \r\n" ,auth_record['authority']
         
         table.insert(auth_record)
         print>>sys.stderr, "\r\n ========= \t\t SenslabImport NO AUTH RECORD \r\n" ,auth_record['authority']
         
@@ -61,8 +68,11 @@ def import_node(hrn, node):
     node_gid = AuthHierarchy.create_gid(urn, create_uuid(), pkey)
     node_record = SfaRecord(hrn=hrn, gid=node_gid, type="node", pointer=node['node_id'])
     node_record['authority'] = get_authority(node_record['hrn'])
     node_gid = AuthHierarchy.create_gid(urn, create_uuid(), pkey)
     node_record = SfaRecord(hrn=hrn, gid=node_gid, type="node", pointer=node['node_id'])
     node_record['authority'] = get_authority(node_record['hrn'])
+    extime = datetime.datetime.utcnow()
+    node_record['date_created'] = int(time.mktime(extime.timetuple()))
     existing_records = table.find({'hrn': hrn, 'type': 'node', 'pointer': node['node_id']})
     if not existing_records:
     existing_records = table.find({'hrn': hrn, 'type': 'node', 'pointer': node['node_id']})
     if not existing_records:
+        print>>sys.stderr, " \r\n \t slab-import : node record %s inserted" %(node_record['hrn'])
         table.insert(node_record)
     else:
         existing_record = existing_records[0]
         table.insert(node_record)
     else:
         existing_record = existing_records[0]
@@ -70,24 +80,60 @@ def import_node(hrn, node):
         table.update(node_record)
 
 # person is already a sfa record 
         table.update(node_record)
 
 # person is already a sfa record 
-def import_person(person):       
+def import_person(authname,person):       
     existing_records = table.find({'hrn': person['hrn'], 'type': 'user'})
     existing_records = table.find({'hrn': person['hrn'], 'type': 'user'})
+    extime = datetime.datetime.utcnow()
+    person['date_created'] = int(time.mktime(extime.timetuple()))
     if not existing_records:
     if not existing_records:
+        print>>sys.stderr, " \r\n \t slab-import : person record %s inserted" %(person['hrn'])
+        uuid=create_uuid() 
+        RSA_KEY_STRING=person['pkey']
+        pkey=convert_public_key(RSA_KEY_STRING)
+       person['gid']=AuthHierarchy.create_gid("urn:publicid:IDN+"+authname+"+user+"+person['uid'], uuid, pkey, CA=False).save_to_string()
         table.insert(person)
     else:
         existing_record = existing_records[0]
         person['record_id'] = existing_record['record_id']
         table.insert(person)
     else:
         existing_record = existing_records[0]
         person['record_id'] = existing_record['record_id']
-        table.update(person)      
-        
+        # handle key change ??? 
+        table.update(person)
         
         
+def import_slice(person):
+
+    hrn = person['hrn']+'_slice'
+    pkey = Keypair(create=True)
+    urn = hrn_to_urn(hrn, 'slice')
+    gid = AuthHierarchy.create_gid(urn, create_uuid(), pkey)
+    slice_record= SfaRecord(hrn=hrn, gid=gid, type="slice", pointer=-1)
+    slice_record['authority'] = get_authority(slice_record['hrn'])
+   
+    extime = datetime.datetime.utcnow()
+    slice_record['date_created'] = int(time.mktime(extime.timetuple()))
+                               
+    print>>sys.stderr, " \r\n \t slab-import : slice record %s " %(slice_record['hrn']) 
+    existing_records = table.find({'hrn': slice_record['hrn'], 'type': 'slice'})
+    if not existing_records:
+        print>>sys.stderr, " \r\n \t slab-import : slice record %s inserted" %(slice_record['hrn'])
+        table.insert(slice_record)
+    else:
+        print>>sys.stderr, " \r\n \t slab-import : slice record %s updated" %(slice_record['hrn'])
+        existing_record = existing_records[0]
+        slice_record['record_id'] = existing_record['record_id']
+        table.update(slice_record)        
         
 def delete_record( hrn, type):
     # delete the record
     record_list = table.find({'type': type, 'hrn': hrn})
     for record in record_list:
         
 def delete_record( hrn, type):
     # delete the record
     record_list = table.find({'type': type, 'hrn': hrn})
     for record in record_list:
+        print>>sys.stderr, " \r\n \t slab-import : record %s deleted" %(record['hrn'])
         table.remove(record)
                 
         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()
 def main():
 
     config = Config()
@@ -128,13 +174,11 @@ def main():
    
     Driver = SlabDriver(config)
     nodes_dict  = Driver.GetNodes()
    
     Driver = SlabDriver(config)
     nodes_dict  = Driver.GetNodes()
-    print "\r\n NODES8DICT ",nodes_dict
+    #print "\r\n NODES8DICT ",nodes_dict
     
     ldap_person_list = Driver.GetPersons()
     
     ldap_person_list = Driver.GetPersons()
-    print "\r\n PERSONS_LIST ",ldap_person_list
-
-   
     
     
+
     #slices_list = SenslabUsers.GetSlices()
     #print "\r\n SLICES_LIST ",slices_list
     
     #slices_list = SenslabUsers.GetSlices()
     #print "\r\n SLICES_LIST ",slices_list
     
@@ -155,24 +199,19 @@ def main():
              #site_hrn = SenslabImporter.import_site(interface_hrn, site)
    
         # import node records
              #site_hrn = SenslabImporter.import_site(interface_hrn, site)
    
         # 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:
     for node in nodes_dict:
-        print '\r\n \t NODE_ID %s node %s '%( node_id, node)
-        hrn =  hostname_to_hrn(interface_hrn, root_auth, node['hostname'])
+        hrn =  hostname_to_hrn( root_auth, node['hostname'])
         if hrn not in existing_hrns or \
         (hrn, 'node') not in existing_records:
         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)
 
    # import persons
     for person in ldap_person_list:
             import_node(hrn, node)
 
    # import persons
     for person in ldap_person_list:
-        print >>sys.stderr, "\r\n\r\n^^^^^^^^^^^^^PERSON hrn %s person %s site hrn %s" %(hrn,person)    
         if person['hrn'] not in existing_hrns or \
             (person['hrn'], 'user') not in existing_records :
         if person['hrn'] not in existing_hrns or \
             (person['hrn'], 'user') not in existing_records :
-            import_person( person)     
+            import_person(root_auth,person)
+            import_slice(person)
+
 # import slices
         #for slice_id in site['slice_ids']:
                #print >>sys.stderr, "\r\n\r\n \t ^^^^^^^\\\\\\\\\\\\\\\^^^^^^ slice_id  %s  " %(slice_id)              
 # import slices
         #for slice_id in site['slice_ids']:
                #print >>sys.stderr, "\r\n\r\n \t ^^^^^^^\\\\\\\\\\\\\\\^^^^^^ slice_id  %s  " %(slice_id)              
@@ -188,6 +227,7 @@ def main():
                                        
     # remove stale records    
     system_records = [interface_hrn, root_auth, interface_hrn + '.slicemanager']
                                        
     # 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
     for (record_hrn, type) in existing_records.keys():
         if record_hrn in system_records:
             continue
@@ -210,27 +250,31 @@ def main():
             break
                 
         elif type == 'user':
             break
                 
         elif type == 'user':
-            for person in persons:
+            for person in ldap_person_list:
                 if person['hrn'] == record_hrn:
                     found = True
                 if person['hrn'] == record_hrn:
                     found = True
-                break
+                    break
             
         elif type == 'node':
             login_base = get_leaf(get_authority(record_hrn))
             nodename = Xrn.unescape(get_leaf(record_hrn))
             
         elif type == 'node':
             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 
                 if node['hostname'] == nodename :
                     found = True
                     break 
-                    
+                
+        elif type == 'slice':
+            for person in ldap_person_list:
+                if person['hrn']+'_slice' == record_hrn:
+                    found = True
+                    break           
         else:
             continue 
         
         if not found:
             record_object = existing_records[(record_hrn, type)]
         else:
             continue 
         
         if not found:
             record_object = existing_records[(record_hrn, type)]
-            print "\t\t NOT FOUND ! "
+            print "\t\t  NOT FOUND ! ", record_hrn
             delete_record(record_hrn, type) 
     
 if __name__ == "__main__":
             delete_record(record_hrn, type) 
     
 if __name__ == "__main__":
-    main()    
\ No newline at end of file
+    main()