X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=sfa%2Fmanagers%2Fv2_to_v3_adapter.py;fp=sfa%2Fmanagers%2Fv2_to_v3_adapter.py;h=0000000000000000000000000000000000000000;hb=1a9718ae903eef6c6485c851a81c2f794e971ea2;hp=e37c2c82571a2525d3f0161ffa84088c8ee7b23a;hpb=6766a510ba0528c1c880497d4ae5a547cc76844a;p=sfa.git diff --git a/sfa/managers/v2_to_v3_adapter.py b/sfa/managers/v2_to_v3_adapter.py deleted file mode 100644 index e37c2c82..00000000 --- a/sfa/managers/v2_to_v3_adapter.py +++ /dev/null @@ -1,201 +0,0 @@ -# -# an adapter on top of driver implementing AM API v2 to be AM API v3 compliant -# -import sys -from sfa.util.sfalogging import logger -from sfa.util.xrn import Xrn, urn_to_hrn, hrn_to_urn, get_leaf, get_authority -from sfa.util.cache import Cache -from sfa.rspecs.rspec import RSpec -from sfa.storage.model import SliverAllocation - - -class V2ToV3Adapter: - - def __init__(self, api): - config = api.config - flavour = config.SFA_GENERIC_FLAVOUR - # to be cleaned - if flavour == "nitos": - from sfa.nitos.nitosdriver import NitosDriver - self.driver = NitosDriver(api) - else: - logger.error( - "V2ToV3Adapter: Unknown Flavour !!!\n Supported Flavours: nitos") - - # Caching - if config.SFA_AGGREGATE_CACHING: - if self.driver.cache: - self.cache = self.driver.cache - else: - self.cache = Cache() - - def __getattr__(self, name): - def func(*args, **kwds): - if name == "list_resources": - (version, options) = args - slice_urn = slice_hrn = None - creds = [] - rspec = getattr(self.driver, "list_resources")( - slice_urn, slice_hrn, [], options) - result = rspec - - elif name == "describe": - (urns, version, options) = args - slice_urn = urns[0] - slice_hrn, type = urn_to_hrn(slice_urn) - creds = [] - rspec = getattr(self.driver, "list_resources")( - slice_urn, slice_hrn, creds, options) - - # SliverAllocation - if len(urns) == 1 and Xrn(xrn=urns[0]).type == 'slice': - constraint = SliverAllocation.slice_urn.in_(urns) - else: - constraint = SliverAllocation.sliver_id.in_(urns) - - sliver_allocations = self.driver.api.dbsession().query( - SliverAllocation).filter(constraint) - sliver_status = getattr(self.driver, "sliver_status")( - slice_urn, slice_hrn) - if 'geni_expires' in sliver_status.keys(): - geni_expires = sliver_status['geni_expires'] - else: - geni_expires = '' - - geni_slivers = [] - for sliver_allocation in sliver_allocations: - geni_sliver = {} - geni_sliver['geni_expires'] = geni_expires - geni_sliver[ - 'geni_allocation'] = sliver_allocation.allocation_state - geni_sliver[ - 'geni_sliver_urn'] = sliver_allocation.sliver_id - geni_sliver['geni_error'] = '' - if geni_sliver['geni_allocation'] == 'geni_allocated': - geni_sliver[ - 'geni_operational_status'] = 'geni_pending_allocation' - else: - geni_sliver['geni_operational_status'] = 'geni_ready' - geni_slivers.append(geni_sliver) - - result = {'geni_urn': slice_urn, - 'geni_rspec': rspec, - 'geni_slivers': geni_slivers} - - elif name == "allocate": - (slice_urn, rspec_string, expiration, options) = args - slice_hrn, type = urn_to_hrn(slice_urn) - creds = [] - users = options.get('sfa_users', []) - manifest_string = getattr(self.driver, "create_sliver")( - slice_urn, slice_hrn, creds, rspec_string, users, options) - - # slivers allocation - rspec = RSpec(manifest_string) - slivers = rspec.version.get_nodes_with_slivers() - - # SliverAllocation - for sliver in slivers: - client_id = sliver['client_id'] - component_id = sliver['component_id'] - component_name = sliver['component_name'] - slice_name = slice_hrn.replace('.', '-') - component_short_name = component_name.split('.')[0] - # self.driver.hrn - sliver_hrn = '%s.%s-%s' % (self.driver.hrn, - slice_name, component_short_name) - sliver_id = Xrn(sliver_hrn, type='sliver').urn - record = SliverAllocation(sliver_id=sliver_id, - client_id=client_id, - component_id=component_id, - slice_urn=slice_urn, - allocation_state='geni_allocated') - - record.sync(self.driver.api.dbsession()) - - # return manifest - rspec_version = RSpec(rspec_string).version - rspec_version_str = "%s" % rspec_version - options['geni_rspec_version'] = {'version': rspec_version_str.split( - ' ')[1], 'type': rspec_version_str.lower().split(' ')[0]} - result = self.describe([slice_urn], rspec_version, options) - - elif name == "provision": - (urns, options) = args - if len(urns) == 1 and Xrn(xrn=urns[0]).type == 'slice': - constraint = SliverAllocation.slice_urn.in_(urns) - else: - constraint = SliverAllocation.sliver_id.in_(urns) - - dbsession = self.driver.api.dbsession() - sliver_allocations = dbsession.query( - SliverAllocation).filter(constraint) - for sliver_allocation in sliver_allocations: - sliver_allocation.allocation_state = 'geni_provisioned' - - dbsession.commit() - result = self.describe(urns, '', options) - - elif name == "status": - urns = args - options = {} - options['geni_rspec_version'] = { - 'version': '3', 'type': 'GENI'} - descr = self.describe(urns[0], '', options) - result = {'geni_urn': descr['geni_urn'], - 'geni_slivers': descr['geni_slivers']} - - elif name == "delete": - (urns, options) = args - slice_urn = urns[0] - slice_hrn, type = urn_to_hrn(slice_urn) - creds = [] - options['geni_rspec_version'] = { - 'version': '3', 'type': 'GENI'} - descr = self.describe(urns, '', options) - result = [] - for sliver_allocation in descr['geni_slivers']: - geni_sliver = {'geni_sliver_urn': sliver_allocation['geni_sliver_urn'], - 'geni_allocation_status': 'geni_unallocated', - 'geni_expires': sliver_allocation['geni_expires'], - 'geni_error': sliver_allocation['geni_error']} - - result.append(geni_sliver) - - getattr(self.driver, "delete_sliver")( - slice_urn, slice_hrn, creds, options) - - # SliverAllocation - constraints = SliverAllocation.slice_urn.in_(urns) - dbsession = self.driver.api.dbsession() - sliver_allocations = dbsession.query( - SliverAllocation).filter(constraints) - sliver_ids = [ - sliver_allocation.sliver_id for sliver_allocation in sliver_allocations] - SliverAllocation.delete_allocations(sliver_ids, dbsession) - - elif name == "renew": - (urns, expiration_time, options) = args - slice_urn = urns[0] - slice_hrn, type = urn_to_hrn(slice_urn) - creds = [] - - getattr(self.driver, "renew_sliver")( - slice_urn, slice_hrn, creds, expiration_time, options) - - options['geni_rspec_version'] = { - 'version': '3', 'type': 'GENI'} - descr = self.describe(urns, '', options) - result = descr['geni_slivers'] - - elif name == "perform_operational_action": - (urns, action, options) = args - options['geni_rspec_version'] = { - 'version': '3', 'type': 'GENI'} - result = self.describe(urns, '', options)['geni_slivers'] - - else: - # same as v2 ( registry methods) - result = getattr(self.driver, name)(*args, **kwds) - return result - return func