Merge branch 'geni-v3' of ssh://git.onelab.eu/git/sfa into geni-v3
authorMohamed Larabi <mohamed.larabi@inria.fr>
Tue, 26 Nov 2013 15:49:11 +0000 (16:49 +0100)
committerMohamed Larabi <mohamed.larabi@inria.fr>
Tue, 26 Nov 2013 15:49:11 +0000 (16:49 +0100)
sfa/client/sfi.py
sfa/planetlab/pldriver.py
sfa/planetlab/plslices.py
sfa/rspecs/elements/v3/services.py
sfa/rspecs/elements/versions/pgv2Services.py

index dcd1688..2f47839 100644 (file)
@@ -138,7 +138,7 @@ def save_rspec_to_file(rspec, filename):
     if not filename.endswith(".rspec"):
         filename = filename + ".rspec"
     f = open(filename, 'w')
-    f.write(rspec)
+    f.write("%s"%rspec)
     f.close()
     return
 
@@ -434,7 +434,7 @@ class Sfi:
                               help="specify specific keys to be displayed from record")
         if command in ("resources", "describe"):
             # rspec version
-            parser.add_option("-r", "--rspec-version", dest="rspec_version", default="SFA 1",
+            parser.add_option("-r", "--rspec-version", dest="rspec_version", default="GENI 3",
                               help="schema type and version of resulting RSpec")
             # disable/enable cached rspecs
             parser.add_option("-c", "--current", dest="current", default=False,
@@ -1095,7 +1095,7 @@ use this if you mean an authority instead""")
         if self.options.raw:
             save_raw_to_file(result, self.options.raw, self.options.rawformat, self.options.rawbanner)
         if options.file is not None:
-            save_rspec_to_file(value, options.file)
+            save_rspec_to_file(value['geni_rspec'], options.file)
         if (self.options.raw is None) and (options.file is None):
             display_rspec(value, options.format)
 
@@ -1136,7 +1136,7 @@ use this if you mean an authority instead""")
         if self.options.raw:
             save_raw_to_file(result, self.options.raw, self.options.rawformat, self.options.rawbanner)
         if options.file is not None:
-            save_rspec_to_file(value, options.file)
+            save_rspec_to_file(value['geni_rspec'], options.file)
         if (self.options.raw is None) and (options.file is None):
             display_rspec(value, options.format)
 
@@ -1221,7 +1221,7 @@ use this if you mean an authority instead""")
         if self.options.raw:
             save_raw_to_file(result, self.options.raw, self.options.rawformat, self.options.rawbanner)
         if options.file is not None:
-            save_rspec_to_file (value, options.file)
+            save_rspec_to_file (value['geni_rspec'], options.file)
         if (self.options.raw is None) and (options.file is None):
             print value
         return value
@@ -1281,7 +1281,7 @@ use this if you mean an authority instead""")
         if self.options.raw:
             save_raw_to_file(result, self.options.raw, self.options.rawformat, self.options.rawbanner)
         if options.file is not None:
-            save_rspec_to_file (value, options.file)
+            save_rspec_to_file (value['geni_rspec'], options.file)
         if (self.options.raw is None) and (options.file is None):
             print value
         return value     
index 6fd9b05..bc9c54f 100644 (file)
@@ -21,7 +21,6 @@ from sfa.rspecs.rspec import RSpec
 # the driver interface, mostly provides default behaviours
 from sfa.managers.driver import Driver
 from sfa.planetlab.plshell import PlShell
-import sfa.planetlab.peers as peers
 from sfa.planetlab.plaggregate import PlAggregate
 from sfa.planetlab.plslices import PlSlices
 from sfa.planetlab.plxrn import PlXrn, slicename_to_hrn, hostname_to_hrn, hrn_to_pl_slicename, xrn_to_hostname, top_auth, hash_loginbase
@@ -639,7 +638,6 @@ class PlDriver (Driver):
         xrn = Xrn(urn)
         aggregate = PlAggregate(self)
         slices = PlSlices(self)
-        peer = slices.get_peer(xrn.get_hrn())
         sfa_peer = slices.get_sfa_peer(xrn.get_hrn())
         slice_record=None    
         users = options.get('geni_users', [])
@@ -651,29 +649,25 @@ class PlDriver (Driver):
         requested_attributes = rspec.version.get_slice_attributes()
         
         # ensure site record exists
-        site = slices.verify_site(xrn.hrn, slice_record, peer, sfa_peer, options=options)
+        site = slices.verify_site(xrn.hrn, slice_record, sfa_peer, options=options)
         # ensure slice record exists
-        slice = slices.verify_slice(xrn.hrn, slice_record, peer, sfa_peer, expiration=expiration, options=options)
+        slice = slices.verify_slice(xrn.hrn, slice_record, sfa_peer, expiration=expiration, options=options)
         # ensure person records exists
-        persons = slices.verify_persons(xrn.hrn, slice, users, peer, sfa_peer, options=options)
+        persons = slices.verify_persons(xrn.hrn, slice, users, sfa_peer, options=options)
         # ensure slice attributes exists
         slices.verify_slice_attributes(slice, requested_attributes, options=options)
        
         # add/remove slice from nodes
         request_nodes = rspec.version.get_nodes_with_slivers()
-        nodes = slices.verify_slice_nodes(urn, slice, request_nodes, peer)
+        nodes = slices.verify_slice_nodes(urn, slice, request_nodes)
          
         # add/remove links links 
         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)
+        leases = slices.verify_slice_leases(slice, rspec_requested_leases)
 
-        # handle MyPLC peer association.
-        # only used by plc and ple.
-        slices.handle_peer(site, slice, None, peer)
-        
         return aggregate.describe([xrn.get_urn()], version=rspec.version)
 
     def provision(self, urns, options={}):
@@ -682,11 +676,9 @@ class PlDriver (Driver):
         aggregate = PlAggregate(self)
         slivers = aggregate.get_slivers(urns)
         slice = slivers[0]
-        peer = slices.get_peer(slice['hrn'])
         sfa_peer = slices.get_sfa_peer(slice['hrn'])
         users = options.get('geni_users', [])
-        persons = slices.verify_persons(slice['hrn'], slice, users, peer, sfa_peer, options=options)
-        slices.handle_peer(None, None, persons, peer)
+        persons = slices.verify_persons(slice['hrn'], slice, users, sfa_peer, options=options)
         # update sliver allocation states and set them to geni_provisioned
         sliver_ids = [sliver['sliver_id'] for sliver in slivers]
         dbsession=self.api.dbsession()
@@ -713,17 +705,8 @@ class PlDriver (Driver):
             leases = self.shell.GetLeases({'name': slice_name})
             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
-            # is the only/last call to this last method in plc.peers
-            #slice_hrn = PlXrn(auth=self.hrn, slice_name).get_hrn()     
             slice_hrn = self.shell.GetSliceHrn(int(slice_id))
-            peer = peers.get_peer(self, slice_hrn)
             try:
-                if peer:
-                    self.shell.UnBindObjectFromPeer('slice', slice_id, peer)
-     
                 self.shell.DeleteSliceFromNodes(slice_id, node_ids)
                 if len(leases_ids) > 0:
                     self.shell.DeleteLeases(leases_ids)
@@ -732,8 +715,7 @@ class PlDriver (Driver):
                 dbsession=self.api.dbsession()
                 SliverAllocation.delete_allocations(sliver_ids,dbsession)
             finally:
-                if peer:
-                    self.shell.BindObjectToPeer('slice', slice_id, peer, slice['peer_slice_id'])
+                pass
 
         # prepare return struct
         geni_slivers = []
index b3c6813..6d21a13 100644 (file)
@@ -125,27 +125,6 @@ class PlSlices:
 
         return slivers
  
-    def get_peer(self, xrn):
-        hrn, type = urn_to_hrn(xrn)
-        # Becaues of myplc federation,  we first need to determine if this
-        # slice belongs to out local plc or a myplc peer. We will assume it 
-        # is a local site, unless we find out otherwise  
-        peer = None
-
-        # get this slice's authority (site)
-        slice_authority = get_authority(hrn)
-
-        # get this site's authority (sfa root authority or sub authority)
-        site_authority = get_authority(slice_authority).lower()
-
-        # check if we are already peered with this site_authority, if so
-        peers = self.driver.shell.GetPeers({}, ['peer_id', 'peername', 'shortname', 'hrn_root'])
-        for peer_record in peers:
-            names = [name.lower() for name in peer_record.values() if isinstance(name, StringTypes)]
-            if site_authority in names:
-                peer = peer_record
-
-        return peer
 
     def get_sfa_peer(self, xrn):
         hrn, type = urn_to_hrn(xrn)
@@ -160,7 +139,7 @@ class PlSlices:
 
         return sfa_peer
 
-    def verify_slice_leases(self, slice, rspec_requested_leases, peer):
+    def verify_slice_leases(self, slice, rspec_requested_leases):
 
         leases = self.driver.shell.GetLeases({'name':slice['name'], 'clip':int(time.time())}, ['lease_id','name', 'hostname', 't_from', 't_until'])
         grain = self.driver.shell.GetLeaseGranularity()
@@ -214,8 +193,6 @@ class PlSlices:
    
 
         try:
-            if peer:
-                self.driver.shell.UnBindObjectFromPeer('slice', slice['slice_id'], peer['shortname'])
             self.driver.shell.DeleteLeases(deleted_leases_id)
             for lease in added_leases:
                 self.driver.shell.AddLeases(lease['hostname'], slice['name'], lease['t_from'], lease['t_until'])
@@ -226,7 +203,7 @@ class PlSlices:
         return leases
 
 
-    def verify_slice_nodes(self, slice_urn, slice, rspec_nodes, peer):
+    def verify_slice_nodes(self, slice_urn, slice, rspec_nodes):
         
         slivers = {}
         for node in rspec_nodes:
@@ -250,8 +227,6 @@ class PlSlices:
         added_nodes = list(set(slivers.keys()).difference(current_slivers))        
 
         try:
-            if peer:
-                self.driver.shell.UnBindObjectFromPeer('slice', slice['slice_id'], peer['shortname'])
             self.driver.shell.AddSliceToNodes(slice['name'], added_nodes)
             self.driver.shell.DeleteSliceFromNodes(slice['name'], deleted_nodes)
             
@@ -347,43 +322,7 @@ class PlSlices:
                         
         
 
-    def handle_peer(self, site, slice, persons, peer):
-        if peer:
-            # bind site
-            try:
-                if site:
-                    self.driver.shell.BindObjectToPeer('site', site['site_id'], peer['shortname'], slice['site_id'])
-            except Exception,e:
-                self.driver.shell.DeleteSite(site['site_id'])
-                raise e
-            
-            # bind slice
-            try:
-                if slice:
-                    self.driver.shell.BindObjectToPeer('slice', slice['slice_id'], peer['shortname'], slice['slice_id'])
-            except Exception,e:
-                self.driver.shell.DeleteSlice(slice['slice_id'])
-                raise e 
-
-            # bind persons
-            for person in persons:
-                try:
-                    self.driver.shell.BindObjectToPeer('person', 
-                                                     person['person_id'], peer['shortname'], person['peer_person_id'])
-
-                    for (key, remote_key_id) in zip(person['keys'], person['key_ids']):
-                        try:
-                            self.driver.shell.BindObjectToPeer( 'key', key['key_id'], peer['shortname'], remote_key_id)
-                        except:
-                            self.driver.shell.DeleteKey(key['key_id'])
-                            logger("failed to bind key: %s to peer: %s " % (key['key_id'], peer['shortname']))
-                except Exception,e:
-                    self.driver.shell.DeletePerson(person['person_id'])
-                    raise e       
-
-        return slice
-
-    def verify_site(self, slice_xrn, slice_record={}, peer=None, sfa_peer=None, options={}):
+    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])
@@ -421,7 +360,7 @@ class PlSlices:
         return site
 
 
-    def verify_slice(self, slice_hrn, slice_record, peer, sfa_peer, expiration, options={}):
+    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]
@@ -459,7 +398,7 @@ class PlSlices:
         return self.driver.shell.GetSlices(int(slice['slice_id']))[0]
 
 
-    def verify_persons(self, slice_hrn, slice_record, users, peer, sfa_peer, options={}):
+    def verify_persons(self, slice_hrn, slice_record, users, sfa_peer, options={}):
         top_auth_hrn = top_auth(slice_hrn)
         site_hrn = '.'.join(slice_hrn.split('.')[:-1])
         slice_part = slice_hrn.split('.')[-1]
@@ -540,12 +479,12 @@ class PlSlices:
              person_id = slice_persons_by_hrn[person_hrn].get('person_id')
              persons_to_verify_keys[person_id] = users_by_hrn[person_hrn]
 
-        self.verify_keys(persons_to_verify_keys, peer, options)
+        self.verify_keys(persons_to_verify_keys, options)
 
         return persons_to_add
 
 
-    def verify_keys(self, persons_to_verify_keys, peer, options={}):
+    def verify_keys(self, persons_to_verify_keys, options={}):
         # we only add keys that comes from sfa to persons in PL
         for person_id in persons_to_verify_keys:
              person_sfa_keys = persons_to_verify_keys[person_id].get('keys', [])
index 7211108..83b300b 100644 (file)
@@ -41,16 +41,16 @@ class Services:
         for services_elem in xml.xpath('./default:services | ./services'):
             service = ServicesElement(services_elem.attrib, services_elem)
             # get install 
-            install_elems = xml.xpath('./default:install | ./install')
+            install_elems = services_elem.xpath('./default:install | ./install')
             service['install'] = [install_elem.get_instance(Install) for install_elem in install_elems]
             # get execute
-            execute_elems = xml.xpath('./default:execute | ./execute')
+            execute_elems = services_elem.xpath('./default:execute | ./execute')
             service['execute'] = [execute_elem.get_instance(Execute) for execute_elem in execute_elems]
             # get login
-            login_elems = xml.xpath('./default:login | ./login')
+            login_elems = services_elem.xpath('./default:login | ./login')
             service['login'] = [login_elem.get_instance(Login) for login_elem in login_elems]
             
-            ssh_user_elems = xml.xpath('./ssh-user:service_user | ./service_user')
+            ssh_user_elems = services_elem.xpath('./ssh-user:service_user | ./service_user')
             services_user = []    
             for ssh_user_elem in ssh_user_elems:
                 services_user = ssh_user_elem.get_instance(None, fields=['login', 'user_urn'])
index ff9e9d1..5cdf22c 100644 (file)
@@ -30,13 +30,13 @@ class PGv2Services:
         for services_elem in xml.xpath('./default:services | ./services'):
             service = ServicesElement(services_elem.attrib, services_elem)
             # get install 
-            install_elems = xml.xpath('./default:install | ./install')
+            install_elems = services_elem.xpath('./default:install | ./install')
             service['install'] = [install_elem.get_instance(Install) for install_elem in install_elems]
             # get execute
-            execute_elems = xml.xpath('./default:execute | ./execute')
+            execute_elems = services_elem.xpath('./default:execute | ./execute')
             service['execute'] = [execute_elem.get_instance(Execute) for execute_elem in execute_elems]
             # get login
-            login_elems = xml.xpath('./default:login | ./login')
+            login_elems = services_elem.xpath('./default:login | ./login')
             service['login'] = [login_elem.get_instance(Login) for login_elem in login_elems]
             services.append(service)  
         return services