Merge branch 'master' of ssh://git.onelab.eu/git/sfa
[sfa.git] / sfa / planetlab / pldriver.py
index 9274f39..6c88a14 100644 (file)
@@ -94,7 +94,10 @@ class PlDriver (Driver):
             if not persons:
                 for key in ['first_name','last_name']:
                     if key not in sfa_record: sfa_record[key]='*from*sfa*'
-                pointer = self.shell.AddPerson(dict(sfa_record))
+                # AddPerson does not allow everything to be set
+                can_add = ['first_name', 'last_name', 'title','email', 'password', 'phone', 'url', 'bio']
+                add_person_dict=dict ( [ (k,sfa_record[k]) for k in sfa_record if k in can_add ] )
+                pointer = self.shell.AddPerson(add_person_dict)
             else:
                 pointer = persons[0]['person_id']
     
@@ -121,7 +124,7 @@ class PlDriver (Driver):
                 self.shell.AddPersonKey(pointer, {'key_type' : 'ssh', 'key' : pub_key})
 
         elif type == 'node':
-            login_base = PlXrn(xrn=sfa_record['authority'],type='node').pl_login_base()
+            login_base = PlXrn(xrn=sfa_record['authority'],type='authority').pl_login_base()
             nodes = self.shell.GetNodes([pl_record['hostname']])
             if not nodes:
                 pointer = self.shell.AddNode(login_base, pl_record)
@@ -742,8 +745,11 @@ class PlDriver (Driver):
         slices.verify_slice_links(slice, rspec.version.get_link_requests(), nodes)
 
         # add/remove leases
-        rspec_requested_leases = rspec.version.get_leases()
-        leases = slices.verify_slice_leases(slice, rspec_requested_leases, peer)
+        try:
+           rspec_requested_leases = rspec.version.get_leases()
+           leases = slices.verify_slice_leases(slice, rspec_requested_leases, peer)
+        except:
+           pass
         #requested_leases = []
         #kept_leases = []
         #for lease in rspec.version.get_leases():
@@ -772,7 +778,10 @@ class PlDriver (Driver):
         if not slices:
             return True
         slice = slices[0]
-    
+        
+        # leases
+        leases = self.shell.GetLeases({'name': slicename})
+        leases_ids = [lease['lease_id'] for lease in leases ]
         # determine if this is a peer slice
         # xxx I wonder if this would not need to use PlSlices.get_peer instead 
         # in which case plc.peers could be deprecated as this here
@@ -782,6 +791,8 @@ class PlDriver (Driver):
             if peer:
                 self.shell.UnBindObjectFromPeer('slice', slice['slice_id'], peer)
             self.shell.DeleteSliceFromNodes(slicename, slice['node_ids'])
+            if len(leases_ids) > 0:
+                self.shell.DeleteLeases(leases_ids)
         finally:
             if peer:
                 self.shell.BindObjectToPeer('slice', slice['slice_id'], peer, slice['peer_slice_id'])