From: Sandrine Avakian Date: Fri, 16 Dec 2011 10:38:51 +0000 (+0100) Subject: Propagating changes from merge with master sfa version 2.0.5 X-Git-Tag: sfa-2.1-24~3^2~254 X-Git-Url: http://git.onelab.eu/?a=commitdiff_plain;h=0d5868a5dabd1bb986ad1248df0885770a81b89c;p=sfa.git Propagating changes from merge with master sfa version 2.0.5 First step, minor changes --- diff --git a/sfa/managers/aggregate_manager_slab.py b/sfa/managers/aggregate_manager_slab.py index 8b1d6d44..7ae633c5 100644 --- a/sfa/managers/aggregate_manager_slab.py +++ b/sfa/managers/aggregate_manager_slab.py @@ -19,35 +19,49 @@ from sfa.server.sfaapi import SfaApi from sfa.senslab.OARrspec import OARrspec import sfa.plc.peers as peers #from sfa.plc.aggregate import Aggregate -from sfa.senslab.slices import Slices +from sfa.senslab.slices import SlabSlices class AggregateManager: - - def __init__ (self): - # xxx Thierry : caching at the aggregate level sounds wrong... - #self.caching=True - self.caching=False + def __init__ (self, config): pass + # essentially a union of the core version, the generic version (this code) and + # whatever the driver needs to expose - def GetVersion(self, api, options={}): - version_manager = VersionManager() - ad_rspec_versions = [] - request_rspec_versions = [] - for rspec_version in version_manager.versions: - if rspec_version.content_type in ['*', 'ad']: - ad_rspec_versions.append(rspec_version.to_dict()) - if rspec_version.content_type in ['*', 'request']: - request_rspec_versions.append(rspec_version.to_dict()) + def GetVersion(self, api, options): + xrn=Xrn(api.hrn) - version_more = {'interface':'aggregate', - 'sfa': 2, - 'geni_api': api.config.SFA_AGGREGATE_API_VERSION, - 'testbed':'myplc', - 'hrn':xrn.get_hrn(), - 'geni_request_rspec_versions': request_rspec_versions, - 'geni_ad_rspec_versions': ad_rspec_versions, - } - return version_core(version_more) + version = version_core() + version_generic = {'interface':'aggregate', + 'sfa': 2, + 'geni_api': 2, + 'hrn':xrn.get_hrn(), + 'urn':xrn.get_urn(), + } + version.update(version_generic) + testbed_version = self.driver.aggregate_version() + version.update(testbed_version) + return version + + #def GetVersion(self, api, options={}): + + #version_manager = VersionManager() + #ad_rspec_versions = [] + #request_rspec_versions = [] + #for rspec_version in version_manager.versions: + #if rspec_version.content_type in ['*', 'ad']: + #ad_rspec_versions.append(rspec_version.to_dict()) + #if rspec_version.content_type in ['*', 'request']: + #request_rspec_versions.append(rspec_version.to_dict()) + #xrn=Xrn(api.hrn) + #version_more = {'interface':'aggregate', + #'sfa': 2, + #'geni_api': api.config.SFA_AGGREGATE_API_VERSION, + #'testbed':'myplc', + #'hrn':xrn.get_hrn(), + #'geni_request_rspec_versions': request_rspec_versions, + #'geni_ad_rspec_versions': ad_rspec_versions, + #} + #return version_core(version_more) def _get_registry_objects(self, slice_xrn, creds, users): """ @@ -168,7 +182,7 @@ class AggregateManager: if Callids().already_handled(call_id): return "" aggregate = OARrspec(api) #aggregate = Aggregate(api) - slices = Slices(api) + slices = SlabSlices(api) (hrn, _) = urn_to_hrn(slice_xrn) peer = slices.get_peer(hrn) sfa_peer = slices.get_sfa_peer(hrn) @@ -339,7 +353,7 @@ class AggregateManager: def GetTicket(self, api, xrn, creds, rspec, users, options={}): (slice_hrn, _) = urn_to_hrn(xrn) - slices = Slices(api) + slices = SlabSlices(api) peer = slices.get_peer(slice_hrn) sfa_peer = slices.get_sfa_peer(slice_hrn) diff --git a/sfa/senslab/slabdriver.py b/sfa/senslab/slabdriver.py index 47788c5f..fd6f96fb 100644 --- a/sfa/senslab/slabdriver.py +++ b/sfa/senslab/slabdriver.py @@ -5,6 +5,9 @@ from sfa.util.sfalogging import logger from sfa.util.table import SfaTable from sfa.util.defaultdict import defaultdict + +from sfa.rspecs.version_manager import VersionManager + from sfa.util.xrn import hrn_to_urn from sfa.util.plxrn import slicename_to_hrn, hostname_to_hrn, hrn_to_pl_slicename, hrn_to_pl_login_base @@ -54,7 +57,42 @@ class SlabDriver (): self.db = SlabDB() #self.logger=sfa_logger() - + def create_sliver (self, slice_urn, slice_hrn, creds, rspec_string, users, options): + + aggregate = SlabAggregate(self) + slices = SlabSlices(self) + peer = slices.get_peer(slice_hrn) + sfa_peer = slices.get_sfa_peer(slice_hrn) + slice_record=None + if users: + slice_record = users[0].get('slice_record', {}) + + # parse rspec + rspec = RSpec(rspec_string) + requested_attributes = rspec.version.get_slice_attributes() + + # ensure site record exists + site = slices.verify_site(slice_hrn, slice_record, peer, sfa_peer, options=options) + # ensure slice record exists + slice = slices.verify_slice(slice_hrn, slice_record, peer, sfa_peer, options=options) + # ensure person records exists + persons = slices.verify_persons(slice_hrn, slice, users, peer, sfa_peer, options=options) + # ensure slice attributes exists + #slices.verify_slice_attributes(slice, requested_attributes, options=options) + + # add/remove slice from nodes + requested_slivers = [node.get('component_name') for node in rspec.version.get_nodes_with_slivers()] + nodes = slices.verify_slice_nodes(slice, requested_slivers, peer) + + # add/remove links links + #slices.verify_slice_links(slice, rspec.version.get_link_requests(), nodes) + + # handle MyPLC peer association. + # only used by plc and ple. + #slices.handle_peer(site, slice, persons, peer) + + return aggregate.get_rspec(slice_xrn=slice_urn, version=rspec.version) + def GetPersons(self, person_filter=None, return_fields=None): person_list = self.ldap.ldapFind({'authority': self.root_auth }) @@ -108,7 +146,30 @@ class SlabDriver (): return_slice_list = parse_filter(sliceslist, slice_filter,'slice', return_fields) print >>sys.stderr, " \r\n \r\n SLABDRIVER.PY GetSlices return_slice_list %s" %(return_slice_list) return return_slice_list - + + def testbed_name (self): return "senslab2" + + # 'geni_request_rspec_versions' and 'geni_ad_rspec_versions' are mandatory + def aggregate_version (self): + version_manager = VersionManager() + ad_rspec_versions = [] + request_rspec_versions = [] + for rspec_version in version_manager.versions: + if rspec_version.content_type in ['*', 'ad']: + ad_rspec_versions.append(rspec_version.to_dict()) + if rspec_version.content_type in ['*', 'request']: + request_rspec_versions.append(rspec_version.to_dict()) + return { + 'testbed':self.testbed_name(), + 'geni_request_rspec_versions': request_rspec_versions, + 'geni_ad_rspec_versions': ad_rspec_versions, + } + + + + + + ## # Convert SFA fields to PLC fields for use when registering up updating # registry record in the PLC database @@ -475,7 +536,10 @@ class SlabDriver (): #print>>sys.stderr, "\r\n \r\rn \t\t \t <<<<<<<<<<<<<<<<<<<<<<<< fill_record_sfa_info sfa_info %s \r\n record %s : "%(sfa_info,record) record.update(sfa_info) - + + def augment_records_with_testbed_info (self, sfa_records): + return self.fill_record_info (sfa_records) + def fill_record_info(self, records): """ Given a SFA record, fill in the senslab specific and SFA specific diff --git a/sfa/senslab/slices.py b/sfa/senslab/slabslices.py similarity index 99% rename from sfa/senslab/slices.py rename to sfa/senslab/slabslices.py index b4b669f7..9e547e40 100644 --- a/sfa/senslab/slices.py +++ b/sfa/senslab/slabslices.py @@ -10,7 +10,7 @@ from sfa.util.xrn import Xrn MAXINT = 2L**31-1 -class Slices: +class SlabSlices: rspec_to_slice_tag = {'max_rate':'net_max_rate'}