From: Mohamed Larabi Date: Tue, 26 Nov 2013 15:49:11 +0000 (+0100) Subject: Merge branch 'geni-v3' of ssh://git.onelab.eu/git/sfa into geni-v3 X-Git-Tag: sfa-3.1-1~13 X-Git-Url: http://git.onelab.eu/?a=commitdiff_plain;h=1c3e5bfbf19d5d6b553d6d9f065c3e76138200de;hp=f42630a5eb66281b1a72cd9ddef976302e53b057;p=sfa.git Merge branch 'geni-v3' of ssh://git.onelab.eu/git/sfa into geni-v3 --- diff --git a/sfa/client/sfi.py b/sfa/client/sfi.py index dcd16880..2f47839d 100644 --- a/sfa/client/sfi.py +++ b/sfa/client/sfi.py @@ -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 diff --git a/sfa/planetlab/pldriver.py b/sfa/planetlab/pldriver.py index 6fd9b05d..bc9c54f4 100644 --- a/sfa/planetlab/pldriver.py +++ b/sfa/planetlab/pldriver.py @@ -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 = [] diff --git a/sfa/planetlab/plslices.py b/sfa/planetlab/plslices.py index b3c6813e..6d21a13d 100644 --- a/sfa/planetlab/plslices.py +++ b/sfa/planetlab/plslices.py @@ -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', []) diff --git a/sfa/rspecs/elements/v3/services.py b/sfa/rspecs/elements/v3/services.py index 72111085..83b300bf 100644 --- a/sfa/rspecs/elements/v3/services.py +++ b/sfa/rspecs/elements/v3/services.py @@ -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']) diff --git a/sfa/rspecs/elements/versions/pgv2Services.py b/sfa/rspecs/elements/versions/pgv2Services.py index ff9e9d13..5cdf22cf 100644 --- a/sfa/rspecs/elements/versions/pgv2Services.py +++ b/sfa/rspecs/elements/versions/pgv2Services.py @@ -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