use plxrn to process xrns
[sfa.git] / sfa / planetlab / plslices.py
index 6d21a13..68ea2aa 100644 (file)
@@ -323,13 +323,20 @@ class PlSlices:
         
 
     def verify_site(self, slice_xrn, slice_record={}, sfa_peer=None, options={}):
-        (slice_hrn, type) = urn_to_hrn(slice_xrn)
-        top_auth_hrn = top_auth(slice_hrn)
-        site_hrn = '.'.join(slice_hrn.split('.')[:-1])
-        if top_auth_hrn == self.driver.hrn:
-            login_base = slice_hrn.split('.')[-2][:12]
-        else:
-            login_base = hash_loginbase(site_hrn)
+        #(slice_hrn, type) = urn_to_hrn(slice_xrn)
+        #top_auth_hrn = top_auth(slice_hrn)
+        #site_hrn = '.'.join(slice_hrn.split('.')[:-1])
+        #if top_auth_hrn == self.driver.hrn:
+        #    login_base = slice_hrn.split('.')[-2][:12]
+        #else:
+        #    login_base = hash_loginbase(site_hrn)
+        plxrn = PlXrn(xrn=slice_xrn)
+        slice_hrn = plxrn.get_hrn()
+        type = plxrn.get_type()
+        site_hrn = plxrn.get_authority_hrn()
+        authority_name = plxrn.pl_authname()
+        slicename = plxrn.pl_slicename()
+        login_base = plxrn.pl_login_base()
 
         sites = self.driver.shell.GetSites({'peer_id': None},['site_id','name','abbreviated_name','login_base','hrn'])
 
@@ -361,25 +368,36 @@ class PlSlices:
 
 
     def verify_slice(self, slice_hrn, slice_record, sfa_peer, expiration, options={}):
-        top_auth_hrn = top_auth(slice_hrn)
-        site_hrn = '.'.join(slice_hrn.split('.')[:-1])
-        slice_part = slice_hrn.split('.')[-1]
-        if top_auth_hrn == self.driver.hrn:
-            login_base = slice_hrn.split('.')[-2][:12]
-        else:
-            login_base = hash_loginbase(site_hrn)
-
-
-        slice_name = '_'.join([login_base, slice_part])
+        #top_auth_hrn = top_auth(slice_hrn)
+        #site_hrn = '.'.join(slice_hrn.split('.')[:-1])
+        #slice_part = slice_hrn.split('.')[-1]
+        #if top_auth_hrn == self.driver.hrn:
+        #    login_base = slice_hrn.split('.')[-2][:12]
+        #else:
+        #    login_base = hash_loginbase(site_hrn)
+        #slice_name = '_'.join([login_base, slice_part])
+        plxrn = PlXrn(xrn=slice_xrn)
+        slice_hrn = plxrn.get_hrn()
+        type = plxrn.get_type()
+        site_hrn = plxrn.get_authority_hrn()
+        authority_name = plxrn.pl_authname()
+        slicename = plxrn.pl_slicename()
+        login_base = plxrn.pl_login_base()
 
         slices = self.driver.shell.GetSlices({'peer_id': None},['slice_id','name','hrn'])
         # Filter slices by HRN
         slice_exists = [slice for slice in slices if slice['hrn'] == slice_hrn]
         expires = int(datetime_to_epoch(utcparse(expiration)))
         if not slice_exists:
+            if slice_record:
+                url = slice_record.get('url', slice_hrn)
+                description = slice_record.get('description', slice_hrn)
+            else:
+                url = slice_hrn
+                description = slice_hrn
             slice = {'name': slice_name,
-                     'url': slice_record.get('url', slice_hrn),
-                     'description': slice_record.get('description', slice_hrn)}
+                     'url': url,
+                     'description': description}
             # add the slice                          
             slice['slice_id'] = self.driver.shell.AddSlice(slice)
             # set the slice HRN
@@ -415,8 +433,10 @@ class PlSlices:
         slice_name = '_'.join([login_base, slice_part])
 
         persons = self.driver.shell.GetPersons({'peer_id': None},['person_id','email','hrn'])
-        site = self.driver.shell.GetSites({'peer_id': None, 'login_base': login_base})[0]
-        slice = self.driver.shell.GetSlices({'peer_id': None, 'name': slice_name})[0]
+        sites = self.driver.shell.GetSites({'peer_id': None}, ['node_ids', 'site_id', 'name', 'person_ids', 'slice_ids', 'login_base', 'hrn'])
+        site = [site for site in sites if site['hrn'] == site_hrn][0]
+        slices = self.driver.shell.GetSlices({'peer_id': None}, ['slice_id', 'node_ids', 'person_ids', 'expires', 'site_id', 'name', 'hrn'])
+        slice = [slice for slice in slices if slice['hrn'] == slice_hrn][0]
         slice_persons = self.driver.shell.GetPersons({'peer_id': None, 'person_id': slice['person_ids']},['person_id','email','hrn'])
 
         persons_by_hrn = {}
@@ -438,7 +458,7 @@ class PlSlices:
 
         # Add persons or add persons to slice
         for person_hrn in persons_to_add:
-             person_email = users_by_hrn[person_hrn].get('email', None)
+             person_email = users_by_hrn[person_hrn].get('email', "%s@geni.net"%person_hrn.split('.')[-1])
              if person_email and person_email in persons_by_email.keys():
                  # check if the user already exist in PL
                  person_id = persons_by_email[person_email]['person_id']
@@ -456,10 +476,10 @@ class PlSlices:
                  self.driver.shell.AddRoleToPerson('user', int(person_id))
                  # enable the account 
                  self.driver.shell.UpdatePerson(int(person_id), {'enabled': True})
-                 self.driver.shell.SetPersonHrn(int(person_id), person_hrn)
                  self.driver.shell.SetPersonSfaCreated(int(person_id), 'True')
                  self.driver.shell.AddPersonToSite(int(person_id), site['site_id'])
                  self.driver.shell.AddPersonToSlice(int(person_id), slice['slice_id'])
+                 self.driver.shell.SetPersonHrn(int(person_id), person_hrn)
 
                  # Add keys
                  for key in users_by_hrn[person_hrn].get('keys', []):