the big cleanup: remove unused relating to nitos
authorThierry Parmentelat <thierry.parmentelat@inria.fr>
Mon, 28 May 2018 06:40:14 +0000 (08:40 +0200)
committerThierry Parmentelat <thierry.parmentelat@inria.fr>
Mon, 28 May 2018 09:33:48 +0000 (11:33 +0200)
20 files changed:
config/default_config.xml
config/sfa-config-tty
setup.py
sfa.spec
sfa/client/client_helper.py
sfa/generic/nitos.py [deleted file]
sfa/importer/nitosimporter.py [deleted file]
sfa/managers/v2_to_v3_adapter.py [deleted file]
sfa/nitos/__init__.py [deleted file]
sfa/nitos/nitosaggregate.py [deleted file]
sfa/nitos/nitosdriver.py [deleted file]
sfa/nitos/nitosshell.py [deleted file]
sfa/nitos/nitosslices.py [deleted file]
sfa/nitos/nitosxrn.py [deleted file]
sfa/rspecs/elements/versions/nitosv1Channel.py [deleted file]
sfa/rspecs/elements/versions/nitosv1Lease.py [deleted file]
sfa/rspecs/elements/versions/nitosv1Node.py [deleted file]
sfa/rspecs/elements/versions/nitosv1PLTag.py [deleted file]
sfa/rspecs/elements/versions/nitosv1Sliver.py [deleted file]
sfa/rspecs/versions/nitosv1.py [deleted file]

index 33f8901..0c7c526 100644 (file)
@@ -258,20 +258,6 @@ Thierry Parmentelat
       </variablelist>
     </category>
 
-    <!-- ======================================== -->
-    <category id="sfa_nitos">
-      <name></name>
-      <description>The settings that tell this SFA instance how to interact with the NITOS testbed.</description>
-
-      <variablelist>
-        <variable id="url" type="string">
-          <name>XMLRPC URL</name>
-          <value>http://195.251.17.239:8080/RPC2</value>
-          <description>URL for the NITOS Scheduler xmlrpc API</description>
-        </variable>
-      </variablelist>
-    </category>
-
     <!-- ======================================== -->
     <category id="sfa_dummy">
       <name></name>
index e28d60b..ce25b56 100755 (executable)
@@ -34,7 +34,6 @@ usual_variables = [
 
 flavour_xml_section_hash = {
     'pl': 'sfa_plc',
-    'nitos': 'sfa_nitos',
     'dummy': 'sfa_dummy',
 }
 configuration = {
index 3c34a17..3c13257 100755 (executable)
--- a/setup.py
+++ b/setup.py
@@ -53,7 +53,6 @@ packages = [
     'sfa/rspecs/versions',
     'sfa/client',
     'sfa/planetlab',
-    'sfa/nitos',
     'sfa/dummy',
     'sfa/iotlab',
     'sfatables',
index 23cea71..5c8b72a 100644 (file)
--- a/sfa.spec
+++ b/sfa.spec
@@ -62,11 +62,6 @@ Summary: the SFA layer around MyPLC
 Group: Applications/System
 Requires: sfa
 
-%package nitos
-Summary: the SFA layer around NITOS
-Group: Applications/System
-Requires: sfa
-
 %package iotlab
 Summary: the SFA layer around IotLab
 Group: Applications/System
@@ -103,9 +98,6 @@ sfi.py, together with other utilities.
 This package implements the SFA interface which serves as a layer
 between the existing PlanetLab interfaces and the SFA API.
 
-%description nitos
-The SFA driver for NITOS.
-
 %description iotlab
 The SFA driver for IotLab.
 
@@ -185,9 +177,6 @@ rm -rf $RPM_BUILD_ROOT
 /etc/sfa/protogeni-rspec-common.xsd
 /etc/sfa/topology
 
-%files nitos
-%{python_sitelib}/sfa/nitos
-
 %files iotlab
 %{python_sitelib}/sfa/iotlab
 
index fd15c0f..82b5f19 100644 (file)
@@ -41,10 +41,8 @@ def sfa_users_arg(records, slice_record):
         # note that reg-email is not yet available
         pl_fields = ['email', 'person_id',
                      'first_name', 'last_name', 'key_ids']
-        nitos_fields = ['email', 'user_id']
-        extra_fields = list(set(pl_fields).union(set(nitos_fields)))
         # try to fill all these in
-        for field in extra_fields:
+        for field in pl_fields:
             if field in record:
                 user[field] = record[field]
         users.append(user)
diff --git a/sfa/generic/nitos.py b/sfa/generic/nitos.py
deleted file mode 100644 (file)
index 3d8f394..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-from sfa.generic import Generic
-
-
-class nitos (Generic):
-
-    # the importer class
-    def importer_class(self):
-        import sfa.importer.nitosimporter
-        return sfa.importer.nitosimporter.NitosImporter
-
-    # use the standard api class
-    def api_class(self):
-        import sfa.server.sfaapi
-        return sfa.server.sfaapi.SfaApi
-
-    # the manager classes for the server-side services
-    def registry_manager_class(self):
-        import sfa.managers.registry_manager
-        return sfa.managers.registry_manager.RegistryManager
-
-    def slicemgr_manager_class(self):
-        import sfa.managers.slice_manager
-        return sfa.managers.slice_manager.SliceManager
-
-    def aggregate_manager_class(self):
-        import sfa.managers.aggregate_manager
-        return sfa.managers.aggregate_manager.AggregateManager
-
-    # driver class for server-side services, talk to the whole testbed
-    def driver_class(self):
-        import sfa.managers.v2_to_v3_adapter
-        return sfa.managers.v2_to_v3_adapter.V2ToV3Adapter
-
-    # for the component mode, to be run on board planetlab nodes
-    # manager class
-    def component_manager_class(self):
-        return None
-    # driver_class
-
-    def component_driver_class(self):
-        return None
diff --git a/sfa/importer/nitosimporter.py b/sfa/importer/nitosimporter.py
deleted file mode 100644 (file)
index aa7a978..0000000
+++ /dev/null
@@ -1,363 +0,0 @@
-
-import os
-
-from sfa.util.config import Config
-from sfa.util.xrn import Xrn, get_leaf, get_authority, hrn_to_urn
-
-from sfa.trust.gid import create_uuid
-from sfa.trust.certificate import convert_public_key, Keypair
-
-# using global alchemy.session() here is fine
-# as importer is on standalone one-shot process
-from sfa.storage.alchemy import global_dbsession
-from sfa.storage.model import RegRecord, RegAuthority, RegSlice, RegNode, RegUser, RegKey
-
-from sfa.nitos.nitosshell import NitosShell
-from sfa.nitos.nitosxrn import hostname_to_hrn, slicename_to_hrn, email_to_hrn, hrn_to_nitos_slicename, username_to_hrn
-
-
-def _get_site_hrn(interface_hrn, site):
-    hrn = ".".join([interface_hrn, site['name']])
-    return hrn
-
-
-class NitosImporter:
-
-    def __init__(self, auth_hierarchy, logger):
-        self.auth_hierarchy = auth_hierarchy
-        self.logger = logger
-
-    def add_options(self, parser):
-        # we don't have any options for now
-        pass
-
-    # hrn hash is initialized from current db
-    # remember just-created records as we go
-    # xxx might make sense to add a UNIQUE constraint in the db itself
-    def remember_record_by_hrn(self, record):
-        tuple = (record.type, record.hrn)
-        if tuple in self.records_by_type_hrn:
-            self.logger.warning(
-                "NitosImporter.remember_record_by_hrn: duplicate (%s,%s)" % tuple)
-            return
-        self.records_by_type_hrn[tuple] = record
-
-    # ditto for pointer hash
-    def remember_record_by_pointer(self, record):
-        if record.pointer == -1:
-            self.logger.warning(
-                "NitosImporter.remember_record_by_pointer: pointer is void")
-            return
-        tuple = (record.type, record.pointer)
-        if tuple in self.records_by_type_pointer:
-            self.logger.warning(
-                "NitosImporter.remember_record_by_pointer: duplicate (%s,%s)" % tuple)
-            return
-        self.records_by_type_pointer[(record.type, record.pointer,)] = record
-
-    def remember_record(self, record):
-        self.remember_record_by_hrn(record)
-        self.remember_record_by_pointer(record)
-
-    def locate_by_type_hrn(self, type, hrn):
-        return self.records_by_type_hrn.get((type, hrn), None)
-
-    def locate_by_type_pointer(self, type, pointer):
-        return self.records_by_type_pointer.get((type, pointer), None)
-
-    # a convenience/helper function to see if a record is already known
-    # a former, broken, attempt (in 2.1-9) had been made
-    # to try and use 'pointer' as a first, most significant attempt
-    # the idea being to preserve stuff as much as possible, and thus
-    # to avoid creating a new gid in the case of a simple hrn rename
-    # however this of course doesn't work as the gid depends on the hrn...
-    # def locate (self, type, hrn=None, pointer=-1):
-    #    if pointer!=-1:
-    #        attempt = self.locate_by_type_pointer (type, pointer)
-    #        if attempt : return attempt
-    #    if hrn is not None:
-    #        attempt = self.locate_by_type_hrn (type, hrn,)
-    #        if attempt : return attempt
-    #    return None
-
-    # this makes the run method a bit abtruse - out of the way
-
-    def run(self, options):
-        config = Config()
-        interface_hrn = config.SFA_INTERFACE_HRN
-        root_auth = config.SFA_REGISTRY_ROOT_AUTH
-        shell = NitosShell(config)
-
-        # retrieve all existing SFA objects
-        all_records = global_dbsession.query(RegRecord).all()
-
-        # create hash by (type,hrn)
-        # we essentially use this to know if a given record is already known to
-        # SFA
-        self.records_by_type_hrn = \
-            dict([((record.type, record.hrn), record)
-                  for record in all_records])
-        # create hash by (type,pointer)
-        self.records_by_type_pointer = \
-            dict([((record.type, record.pointer), record) for record in all_records
-                  if record.pointer != -1])
-
-        # initialize record.stale to True by default, then mark stale=False on
-        # the ones that are in use
-        for record in all_records:
-            record.stale = True
-
-        # retrieve NITOS data
-        # Get site info
-        # retrieve only required stuf
-        site = shell.getTestbedInfo()
-        sites = [site]
-        # create a hash of sites by login_base
-#       # sites_by_login_base = dict ( [ ( site['login_base'], site ) for site in sites ] )
-        # Get all NITOS users
-        users = shell.getUsers()
-        # create a hash of users by user_id
-        users_by_id = dict([(user['user_id'], user) for user in users])
-        # Get all NITOS public keys
-        # accumulate key ids for keys retrieval
-#        key_ids = []
-#        for person in persons:
-#            key_ids.extend(person['key_ids'])
-#        keys = shell.GetKeys( {'peer_id': None, 'key_id': key_ids,
-#                               'key_type': 'ssh'} )
-#        # create a hash of keys by key_id
-#        keys_by_id = dict ( [ ( key['key_id'], key ) for key in keys ] )
-        # create a dict user_id -> [ (nitos)keys ]
-        keys_by_user_id = dict(
-            [(user['user_id'], user['keys']) for user in users])
-        # Get all nitos nodes
-        nodes = shell.getNodes({}, [])
-        # create hash by node_id
-        nodes_by_id = dict([(node['node_id'], node) for node in nodes])
-        # Get all nitos slices
-        slices = shell.getSlices({}, [])
-        # create hash by slice_id
-        slices_by_id = dict([(slice['slice_id'], slice) for slice in slices])
-
-        # start importing
-        for site in sites:
-            # for i in [0]:
-            site_hrn = _get_site_hrn(interface_hrn, site)
-            # import if hrn is not in list of existing hrns or if the hrn exists
-            # but its not a site record
-            site_record = self.locate_by_type_hrn('authority', site_hrn)
-            if not site_record:
-                try:
-                    urn = hrn_to_urn(site_hrn, 'authority')
-                    if not self.auth_hierarchy.auth_exists(urn):
-                        self.auth_hierarchy.create_auth(urn)
-                    auth_info = self.auth_hierarchy.get_auth_info(urn)
-                    site_record = RegAuthority(hrn=site_hrn, gid=auth_info.get_gid_object(),
-                                               pointer=0,
-                                               authority=get_authority(site_hrn))
-                    site_record.just_created()
-                    global_dbsession.add(site_record)
-                    global_dbsession.commit()
-                    self.logger.info(
-                        "NitosImporter: imported authority (site) : %s" % site_record)
-                    self.remember_record(site_record)
-                except:
-                    # if the site import fails then there is no point in trying to import the
-                    # site's child records (node, slices, persons), so skip
-                    # them.
-                    self.logger.log_exc(
-                        "NitosImporter: failed to import site. Skipping child records")
-                    continue
-            else:
-                # xxx update the record ...
-                pass
-            site_record.stale = False
-
-            # import node records
-            for node in nodes:
-                site_auth = get_authority(site_hrn)
-                site_name = site['name']
-                node_hrn = hostname_to_hrn(
-                    site_auth, site_name, node['hostname'])
-                # xxx this sounds suspicious
-                if len(node_hrn) > 64:
-                    node_hrn = node_hrn[:64]
-                node_record = self.locate_by_type_hrn('node', node_hrn)
-                if not node_record:
-                    try:
-                        pkey = Keypair(create=True)
-                        urn = hrn_to_urn(node_hrn, 'node')
-                        node_gid = self.auth_hierarchy.create_gid(
-                            urn, create_uuid(), pkey)
-                        node_record = RegNode(hrn=node_hrn, gid=node_gid,
-                                              pointer=node['node_id'],
-                                              authority=get_authority(node_hrn))
-                        node_record.just_created()
-                        global_dbsession.add(node_record)
-                        global_dbsession.commit()
-                        self.logger.info(
-                            "NitosImporter: imported node: %s" % node_record)
-                        self.remember_record(node_record)
-                    except:
-                        self.logger.log_exc(
-                            "NitosImporter: failed to import node")
-                else:
-                    # xxx update the record ...
-                    pass
-
-                node_record.stale = False
-
-            # import users
-            for user in users:
-                user_hrn = username_to_hrn(
-                    interface_hrn, site['name'], user['username'])
-                # xxx suspicious again
-                if len(user_hrn) > 64:
-                    user_hrn = user_hrn[:64]
-                user_urn = hrn_to_urn(user_hrn, 'user')
-
-                user_record = self.locate_by_type_hrn('user', user_hrn)
-
-                # return a tuple pubkey (a nitos key object) and pkey (a
-                # Keypair object)
-                def init_user_key(user):
-                    pubkey = None
-                    pkey = None
-                    if user['keys']:
-                        # randomly pick first key in set
-                        for key in user['keys']:
-                            pubkey = key
-                            try:
-                                pkey = convert_public_key(pubkey)
-                                break
-                            except:
-                                continue
-                        if not pkey:
-                            self.logger.warning(
-                                'NitosImporter: unable to convert public key for %s' % user_hrn)
-                            pkey = Keypair(create=True)
-                    else:
-                        # the user has no keys. Creating a random keypair for
-                        # the user's gid
-                        self.logger.warning(
-                            "NitosImporter: user %s does not have a NITOS public key" % user_hrn)
-                        pkey = Keypair(create=True)
-                    return (pubkey, pkey)
-
-                # new user
-                try:
-                    if not user_record:
-                        (pubkey, pkey) = init_user_key(user)
-                        user_gid = self.auth_hierarchy.create_gid(
-                            user_urn, create_uuid(), pkey)
-                        user_gid.set_email(user['email'])
-                        user_record = RegUser(hrn=user_hrn, gid=user_gid,
-                                              pointer=user['user_id'],
-                                              authority=get_authority(
-                                                  user_hrn),
-                                              email=user['email'])
-                        if pubkey:
-                            user_record.reg_keys = [RegKey(pubkey)]
-                        else:
-                            self.logger.warning(
-                                "No key found for user %s" % user_record)
-                        user_record.just_created()
-                        global_dbsession.add(user_record)
-                        global_dbsession.commit()
-                        self.logger.info(
-                            "NitosImporter: imported user: %s" % user_record)
-                        self.remember_record(user_record)
-                    else:
-                        # update the record ?
-                        # if user's primary key has changed then we need to update the
-                        # users gid by forcing an update here
-                        sfa_keys = user_record.reg_keys
-
-                        def sfa_key_in_list(sfa_key, nitos_user_keys):
-                            for nitos_key in nitos_user_keys:
-                                if nitos_key == sfa_key:
-                                    return True
-                            return False
-                        # are all the SFA keys known to nitos ?
-                        new_keys = False
-                        if not sfa_keys and user['keys']:
-                            new_keys = True
-                        else:
-                            for sfa_key in sfa_keys:
-                                if not sfa_key_in_list(sfa_key.key, user['keys']):
-                                    new_keys = True
-
-                        if new_keys:
-                            (pubkey, pkey) = init_user_key(user)
-                            user_gid = self.auth_hierarchy.create_gid(
-                                user_urn, create_uuid(), pkey)
-                            if not pubkey:
-                                user_record.reg_keys = []
-                            else:
-                                user_record.reg_keys = [RegKey(pubkey)]
-                            user_record.gid = user_gid
-                            user_record.just_updated()
-                            self.logger.info(
-                                "NitosImporter: updated user: %s" % user_record)
-                    user_record.email = user['email']
-                    global_dbsession.commit()
-                    user_record.stale = False
-                except:
-                    self.logger.log_exc("NitosImporter: failed to import user %s %s" % (
-                        user['user_id'], user['email']))
-
-            # import slices
-            for slice in slices:
-                slice_hrn = slicename_to_hrn(
-                    interface_hrn, site['name'], slice['slice_name'])
-                slice_record = self.locate_by_type_hrn('slice', slice_hrn)
-                if not slice_record:
-                    try:
-                        pkey = Keypair(create=True)
-                        urn = hrn_to_urn(slice_hrn, 'slice')
-                        slice_gid = self.auth_hierarchy.create_gid(
-                            urn, create_uuid(), pkey)
-                        slice_record = RegSlice(hrn=slice_hrn, gid=slice_gid,
-                                                pointer=slice['slice_id'],
-                                                authority=get_authority(slice_hrn))
-                        slice_record.just_created()
-                        global_dbsession.add(slice_record)
-                        global_dbsession.commit()
-                        self.logger.info(
-                            "NitosImporter: imported slice: %s" % slice_record)
-                        self.remember_record(slice_record)
-                    except:
-                        self.logger.log_exc(
-                            "NitosImporter: failed to import slice")
-                else:
-                    # xxx update the record ...
-                    self.logger.warning("Slice update not yet implemented")
-                    pass
-                # record current users affiliated with the slice
-                slice_record.reg_researchers = \
-                    [self.locate_by_type_pointer('user', int(
-                        user_id)) for user_id in slice['user_ids']]
-                global_dbsession.commit()
-                slice_record.stale = False
-
-        # remove stale records
-        # special records must be preserved
-        system_hrns = [interface_hrn, root_auth,
-                       interface_hrn + '.slicemanager']
-        for record in all_records:
-            if record.hrn in system_hrns:
-                record.stale = False
-            if record.peer_authority:
-                record.stale = False
-
-        for record in all_records:
-            try:
-                stale = record.stale
-            except:
-                stale = True
-                self.logger.warning("stale not found with %s" % record)
-            if stale:
-                self.logger.info(
-                    "NitosImporter: deleting stale record: %s" % record)
-                global_dbsession.delete(record)
-                global_dbsession.commit()
diff --git a/sfa/managers/v2_to_v3_adapter.py b/sfa/managers/v2_to_v3_adapter.py
deleted file mode 100644 (file)
index e37c2c8..0000000
+++ /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
diff --git a/sfa/nitos/__init__.py b/sfa/nitos/__init__.py
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/sfa/nitos/nitosaggregate.py b/sfa/nitos/nitosaggregate.py
deleted file mode 100644 (file)
index 4201a89..0000000
+++ /dev/null
@@ -1,302 +0,0 @@
-#!/usr/bin/python
-from sfa.util.xrn import Xrn, hrn_to_urn, urn_to_hrn
-from sfa.util.sfatime import utcparse, datetime_to_string
-from sfa.util.sfalogging import logger
-
-from sfa.rspecs.rspec import RSpec
-from sfa.rspecs.elements.hardware_type import HardwareType
-from sfa.rspecs.elements.node import NodeElement
-from sfa.rspecs.elements.link import Link
-from sfa.rspecs.elements.sliver import Sliver
-from sfa.rspecs.elements.login import Login
-from sfa.rspecs.elements.location import Location
-from sfa.rspecs.elements.position_3d import Position3D
-from sfa.rspecs.elements.interface import Interface
-from sfa.rspecs.elements.pltag import PLTag
-from sfa.rspecs.elements.lease import Lease
-from sfa.rspecs.elements.granularity import Granularity
-from sfa.rspecs.elements.channel import Channel
-from sfa.rspecs.version_manager import VersionManager
-
-from sfa.nitos.nitosxrn import NitosXrn, hostname_to_urn, hrn_to_nitos_slicename, slicename_to_hrn, channel_to_urn
-from sfa.planetlab.vlink import get_tc_rate
-from sfa.planetlab.topology import Topology
-
-import time
-
-
-class NitosAggregate:
-
-    def __init__(self, driver):
-        self.driver = driver
-
-    def get_slice_and_slivers(self, slice_xrn):
-        """
-        Returns a dict of slivers keyed on the sliver's node_id
-        """
-        slivers = {}
-        slice = None
-        if not slice_xrn:
-            return (slice, slivers)
-        slice_urn = hrn_to_urn(slice_xrn, 'slice')
-        slice_hrn, _ = urn_to_hrn(slice_xrn)
-        slice_name = hrn_to_nitos_slicename(slice_hrn)
-        slices = self.driver.shell.getSlices({'slice_name': slice_name}, [])
-        # filter results
-        for slc in slices:
-            if slc['slice_name'] == slice_name:
-                slice = slc
-                break
-
-        if not slice:
-            return (slice, slivers)
-
-        reserved_nodes = self.driver.shell.getReservedNodes(
-            {'slice_id': slice['slice_id']}, [])
-        reserved_node_ids = []
-        # filter on the slice
-        for node in reserved_nodes:
-            if node['slice_id'] == slice['slice_id']:
-                reserved_node_ids.append(node['node_id'])
-        # get all the nodes
-        all_nodes = self.driver.shell.getNodes({}, [])
-
-        for node in all_nodes:
-            if node['node_id'] in reserved_node_ids:
-                slivers[node['node_id']] = node
-
-        return (slice, slivers)
-
-    def get_nodes(self, slice_xrn, slice=None, slivers=None, options=None):
-        if slivers is None:
-            slivers = {}
-        if options is None:
-            options = {}
-        # if we are dealing with a slice that has no node just return
-        # and empty list
-        if slice_xrn:
-            if not slice or not slivers:
-                return []
-            else:
-                nodes = [slivers[sliver] for sliver in slivers]
-        else:
-            nodes = self.driver.shell.getNodes({}, [])
-
-        # get the granularity in second for the reservation system
-        grain = self.driver.testbedInfo['grain']
-        #grain = 1800
-
-        rspec_nodes = []
-        for node in nodes:
-            rspec_node = NodeElement()
-            site_name = self.driver.testbedInfo['name']
-            rspec_node['component_id'] = hostname_to_urn(
-                self.driver.hrn, site_name, node['hostname'])
-            rspec_node['component_name'] = node['hostname']
-            rspec_node['component_manager_id'] = Xrn(
-                self.driver.hrn, 'authority+cm').get_urn()
-            rspec_node['authority_id'] = hrn_to_urn(
-                NitosXrn.site_hrn(self.driver.hrn, site_name), 'authority+sa')
-            # do not include boot state (<available> element) in the manifest rspec
-            # if not slice:
-            #    rspec_node['boot_state'] = node['boot_state']
-            rspec_node['exclusive'] = 'true'
-            # site location
-            longitude = self.driver.testbedInfo['longitude']
-            latitude = self.driver.testbedInfo['latitude']
-            if longitude and latitude:
-                location = Location(
-                    {'longitude': longitude, 'latitude': latitude, 'country': 'unknown'})
-                rspec_node['location'] = location
-            # 3D position
-            position_3d = Position3D({'x': node['position']['X'], 'y': node[
-                                     'position']['Y'], 'z': node['position']['Z']})
-            #position_3d = Position3D({'x': 1, 'y': 2, 'z': 3})
-            rspec_node['position_3d'] = position_3d
-            # Granularity
-            granularity = Granularity({'grain': grain})
-            rspec_node['granularity'] = granularity
-
-            # HardwareType
-            rspec_node['hardware_type'] = node['node_type']
-            #rspec_node['hardware_type'] = "orbit"
-
-            # slivers
-            if node['node_id'] in slivers:
-                # add sliver info
-                sliver = slivers[node['node_id']]
-                rspec_node['sliver_id'] = sliver['node_id']
-                rspec_node['client_id'] = node['hostname']
-                rspec_node['slivers'] = [sliver]
-
-            rspec_nodes.append(rspec_node)
-        return rspec_nodes
-
-    def get_leases_and_channels(self, slice=None, slice_xrn=None,  options=None):
-
-        if options is None:
-            options = {}
-        slices = self.driver.shell.getSlices({}, [])
-        nodes = self.driver.shell.getNodes({}, [])
-        leases = self.driver.shell.getReservedNodes({}, [])
-        channels = self.driver.shell.getChannels({}, [])
-        reserved_channels = self.driver.shell.getReservedChannels()
-        grain = self.driver.testbedInfo['grain']
-
-        if slice_xrn and not slice:
-            return ([], [])
-
-        if slice:
-            all_leases = []
-            all_leases.extend(leases)
-            all_reserved_channels = []
-            all_reserved_channels.extend(reserved_channels)
-            for lease in all_leases:
-                if lease['slice_id'] != slice['slice_id']:
-                    leases.remove(lease)
-            for channel in all_reserved_channels:
-                if channel['slice_id'] != slice['slice_id']:
-                    reserved_channels.remove(channel)
-
-        rspec_channels = []
-        for channel in reserved_channels:
-
-            rspec_channel = {}
-            # retrieve channel number
-            for chl in channels:
-                if chl['channel_id'] == channel['channel_id']:
-                    channel_number = chl['channel']
-                    break
-
-            rspec_channel['channel_num'] = channel_number
-            rspec_channel['start_time'] = channel['start_time']
-            rspec_channel['duration'] = (
-                int(channel['end_time']) - int(channel['start_time'])) / int(grain)
-            rspec_channel['component_id'] = channel_to_urn(
-                self.driver.hrn, self.driver.testbedInfo['name'], channel_number)
-
-            # retreive slicename
-            for slc in slices:
-                if slc['slice_id'] == channel['slice_id']:
-                    slicename = slc['slice_name']
-                    break
-
-            if slice_xrn:
-                slice_urn = slice_xrn
-                slice_hrn = urn_to_hrn(slice_urn)
-            else:
-                slice_hrn = slicename_to_hrn(
-                    self.driver.hrn, self.driver.testbedInfo['name'], slicename)
-                slice_urn = hrn_to_urn(slice_hrn, 'slice')
-
-            rspec_channel['slice_id'] = slice_urn
-            rspec_channels.append(rspec_channel)
-
-        rspec_leases = []
-        for lease in leases:
-
-            rspec_lease = Lease()
-
-            rspec_lease['lease_id'] = lease['reservation_id']
-            # retreive node name
-            for node in nodes:
-                if node['node_id'] == lease['node_id']:
-                    nodename = node['hostname']
-                    break
-
-            rspec_lease['component_id'] = hostname_to_urn(
-                self.driver.hrn, self.driver.testbedInfo['name'], nodename)
-            # retreive slicename
-            for slc in slices:
-                if slc['slice_id'] == lease['slice_id']:
-                    slicename = slc['slice_name']
-                    break
-
-            if slice_xrn:
-                slice_urn = slice_xrn
-                slice_hrn = urn_to_hrn(slice_urn)
-            else:
-                slice_hrn = slicename_to_hrn(
-                    self.driver.hrn, self.driver.testbedInfo['name'], slicename)
-                slice_urn = hrn_to_urn(slice_hrn, 'slice')
-
-            rspec_lease['slice_id'] = slice_urn
-            rspec_lease['start_time'] = lease['start_time']
-            rspec_lease['duration'] = (
-                int(lease['end_time']) - int(lease['start_time'])) / int(grain)
-            rspec_leases.append(rspec_lease)
-
-        return (rspec_leases, rspec_channels)
-
-    def get_channels(self, slice=None, options=None):
-        if options is None:
-            options = {}
-
-        all_channels = self.driver.shell.getChannels({}, [])
-        channels = []
-        if slice:
-            reserved_channels = self.driver.shell.getReservedChannels()
-            reserved_channel_ids = []
-            for channel in reserved_channels:
-                if channel['slice_id'] == slice['slice_id']:
-                    reserved_channel_ids.append(channel['channel_id'])
-
-            for channel in all_channels:
-                if channel['channel_id'] in reserved_channel_ids:
-                    channels.append(channel)
-        else:
-            channels = all_channels
-
-        rspec_channels = []
-        for channel in channels:
-            rspec_channel = Channel()
-            rspec_channel['channel_num'] = channel['channel']
-            rspec_channel['frequency'] = channel['frequency']
-            rspec_channel['standard'] = channel['modulation']
-            rspec_channel['component_id'] = channel_to_urn(
-                self.driver.hrn, self.driver.testbedInfo['name'], channel['channel'])
-            rspec_channels.append(rspec_channel)
-        return rspec_channels
-
-    def get_rspec(self, slice_xrn=None, version=None, options=None):
-        if options is None:
-            options = {}
-
-        version_manager = VersionManager()
-        version = version_manager.get_version(version)
-
-        if not slice_xrn:
-            rspec_version = version_manager._get_version(
-                version.type, version.version, 'ad')
-        else:
-            rspec_version = version_manager._get_version(
-                version.type, version.version, 'manifest')
-
-        slice, slivers = self.get_slice_and_slivers(slice_xrn)
-
-        rspec = RSpec(version=rspec_version, user_options=options)
-
-        if slice and 'expires' in slice:
-            rspec.xml.set('expires',  datetime_to_string(
-                utcparse(slice['expires'])))
-
-        if not options.get('list_leases') or options.get('list_leases') and options['list_leases'] != 'leases':
-            nodes = self.get_nodes(slice_xrn, slice, slivers, options)
-            rspec.version.add_nodes(nodes)
-            # add sliver defaults
-            default_sliver = slivers.get(None, [])
-            if default_sliver:
-                default_sliver_attribs = default_sliver.get('tags', [])
-                for attrib in default_sliver_attribs:
-                    logger.info(attrib)
-                    rspec.version.add_default_sliver_attribute(
-                        attrib['tagname'], attrib['value'])
-            # add wifi channels
-            channels = self.get_channels(slice, options)
-            rspec.version.add_channels(channels)
-
-        if not options.get('list_leases') or options.get('list_leases') and options['list_leases'] != 'resources':
-            leases_channels = self.get_leases_and_channels(slice, slice_xrn)
-            rspec.version.add_leases(leases_channels)
-
-        return rspec.toxml()
diff --git a/sfa/nitos/nitosdriver.py b/sfa/nitos/nitosdriver.py
deleted file mode 100644 (file)
index 8bbf115..0000000
+++ /dev/null
@@ -1,766 +0,0 @@
-import time
-import datetime
-#
-from sfa.util.faults import MissingSfaInfo, UnknownSfaType, \
-    RecordNotFound, SfaNotImplemented, SliverDoesNotExist
-
-from sfa.util.sfalogging import logger
-from sfa.util.defaultdict import defaultdict
-from sfa.util.sfatime import utcparse, datetime_to_string, datetime_to_epoch
-from sfa.util.xrn import Xrn, hrn_to_urn, get_leaf, urn_to_hrn
-from sfa.util.cache import Cache
-
-# one would think the driver should not need to mess with the SFA db, but..
-from sfa.storage.model import RegRecord
-
-# used to be used in get_ticket
-#from sfa.trust.sfaticket import SfaTicket
-
-from sfa.rspecs.version_manager import VersionManager
-from sfa.rspecs.rspec import RSpec
-
-# the driver interface, mostly provides default behaviours
-from sfa.managers.driver import Driver
-
-from sfa.nitos.nitosshell import NitosShell
-from sfa.nitos.nitosaggregate import NitosAggregate
-from sfa.nitos.nitosslices import NitosSlices
-
-from sfa.nitos.nitosxrn import NitosXrn, slicename_to_hrn, hostname_to_hrn, hrn_to_nitos_slicename, xrn_to_hostname
-
-
-def list_to_dict(recs, key):
-    """
-    convert a list of dictionaries into a dictionary keyed on the 
-    specified dictionary key 
-    """
-    return dict([(rec[key], rec) for rec in recs])
-
-#
-# NitosShell is just an xmlrpc serverproxy where methods
-# can be sent as-is; it takes care of authentication
-# from the global config
-#
-
-
-class NitosDriver (Driver):
-
-    # the cache instance is a class member so it survives across incoming
-    # requests
-    cache = None
-
-    def __init__(self, api):
-        Driver.__init__(self, api)
-        config = api.config
-        self.shell = NitosShell(config)
-        self.cache = None
-        self.testbedInfo = self.shell.getTestbedInfo()
-# un-comment below lines to enable caching
-#        if config.SFA_AGGREGATE_CACHING:
-#            if NitosDriver.cache is None:
-#                NitosDriver.cache = Cache()
-#            self.cache = NitosDriver.cache
-
-    ###########################################
-    # utility methods for NITOS driver
-    ###########################################
-
-    def filter_nitos_results(self, listo, filters_dict):
-        """
-        the Nitos scheduler API does not provide a get result filtring so we do it here
-        """
-        mylist = []
-        mylist.extend(listo)
-        for dicto in mylist:
-            for filter in filters_dict:
-                if filter not in dicto or dicto[filter] != filters_dict[filter]:
-                    listo.remove(dicto)
-                    break
-        return listo
-
-    def convert_id(self, list_of_dict):
-        """
-        convert object id retrived in string format to int format
-        """
-        for dicto in list_of_dict:
-            for key in dicto:
-                if key in ['node_id', 'slice_id', 'user_id', 'channel_id', 'reservation_id'] and isinstance(dicto[key], str):
-                    dicto[key] = int(dicto[key])
-                elif key in ['user_ids']:
-                    user_ids2 = []
-                    for user_id in dicto['user_ids']:
-                        user_ids2.append(int(user_id))
-                    dicto['user_ids'] = user_ids2
-        return list_of_dict
-
-    ########################################
-    # registry oriented
-    ########################################
-
-    def augment_records_with_testbed_info(self, sfa_records):
-        return self.fill_record_info(sfa_records)
-
-    ##########
-    def register(self, sfa_record, hrn, pub_key):
-        type = sfa_record['type']
-        nitos_record = self.sfa_fields_to_nitos_fields(type, hrn, sfa_record)
-
-        if type == 'authority':
-            pointer = -1
-
-        elif type == 'slice':
-            slices = self.shell.getSlices()
-            # filter slices
-            for slice in slices:
-                if slice['slice_name'] == nitos_record['name']:
-                    slice_id = slice['slice_id']
-                    break
-
-            if not slice_id:
-                pointer = self.shell.addSlice(
-                    {'slice_name': nitos_record['name']})
-            else:
-                pointer = slice_id
-
-        elif type == 'user':
-            users = self.shell.getUsers()
-            # filter users
-            for user in users:
-                if user['user_name'] == nitos_record['name']:
-                    user_id = user['user_id']
-                    break
-            if not user_id:
-                pointer = self.shell.addUser(
-                    {'username': nitos_record['name'], 'email': nitos_record['email']})
-            else:
-                pointer = user_id
-
-            # Add the user's key
-            if pub_key:
-                self.shell.addUserKey({'user_id': pointer, 'key': pub_key})
-
-        elif type == 'node':
-            nodes = self.shell.GetNodes({}, [])
-            # filter nodes
-            for node in nodes:
-                if node['hostname'] == nitos_record['name']:
-                    node_id = node['node_id']
-                    break
-
-            if not node_id:
-                pointer = self.shell.addNode(nitos_record)
-            else:
-                pointer = node_id
-
-        return pointer
-
-    ##########
-    def update(self, old_sfa_record, new_sfa_record, hrn, new_key):
-
-        pointer = old_sfa_record['pointer']
-        type = old_sfa_record['type']
-        new_nitos_record = self.sfa_fields_to_nitos_fields(
-            type, hrn, new_sfa_record)
-
-        # new_key implemented for users only
-        if new_key and type not in ['user']:
-            raise UnknownSfaType(type)
-
-        if type == "slice":
-            if 'name' in new_sfa_record:
-                self.shell.updateSlice({'slice_id': pointer, 'fields': {
-                                       'slice_name': new_sfa_record['name']}})
-
-        elif type == "user":
-            update_fields = {}
-            if 'name' in new_sfa_record:
-                update_fields['username'] = new_sfa_record['name']
-            if 'email' in new_sfa_record:
-                update_fields['email'] = new_sfa_record['email']
-
-            self.shell.updateUser(
-                {'user_id': pointer, 'fields': update_fields})
-
-            if new_key:
-                # needs to be improved
-                self.shell.addUserKey({'user_id': pointer, 'key': new_key})
-
-        elif type == "node":
-            self.shell.updateNode(
-                {'node_id': pointer, 'fields': new_sfa_record})
-
-        return True
-
-    ##########
-    def remove(self, sfa_record):
-
-        type = sfa_record['type']
-        pointer = sfa_record['pointer']
-        if type == 'user':
-            self.shell.deleteUser({'user_id': pointer})
-        elif type == 'slice':
-            self.shell.deleteSlice({'slice_id': pointer})
-        elif type == 'node':
-            self.shell.deleteNode({'node_id': pointer})
-
-        return True
-
-    ##
-    # Convert SFA fields to NITOS fields for use when registering or updating
-    # registry record in the NITOS Scheduler database
-    #
-
-    def sfa_fields_to_nitos_fields(self, type, hrn, sfa_record):
-
-        nitos_record = {}
-
-        if type == "slice":
-            nitos_record["slice_name"] = hrn_to_nitos_slicename(hrn)
-        elif type == "node":
-            if "hostname" not in sfa_record:
-                raise MissingSfaInfo("hostname")
-            nitos_record["node_name"] = sfa_record["hostname"]
-
-        return nitos_record
-
-    ####################
-    def fill_record_info(self, records):
-        """
-        Given a (list of) SFA record, fill in the NITOS specific 
-        and SFA specific fields in the record. 
-        """
-        if not isinstance(records, list):
-            records = [records]
-
-        self.fill_record_nitos_info(records)
-        self.fill_record_hrns(records)
-        self.fill_record_sfa_info(records)
-        return records
-
-    def fill_record_nitos_info(self, records):
-        """
-        Fill in the nitos specific fields of a SFA record. This
-        involves calling the appropriate NITOS API method to retrieve the 
-        database record for the object.
-
-        @param record: record to fill in field (in/out param)     
-        """
-
-        # get ids by type
-        node_ids, slice_ids = [], []
-        user_ids, key_ids = [], []
-        type_map = {'node': node_ids, 'slice': slice_ids, 'user': user_ids}
-
-        for record in records:
-            for type in type_map:
-                if type == record['type']:
-                    type_map[type].append(record['pointer'])
-
-        # get nitos records
-        nodes, slices, users, keys = {}, {}, {}, {}
-        if node_ids:
-            all_nodes = self.convert_id(self.shell.getNodes({}, []))
-            node_list = [node for node in all_nodes if node[
-                'node_id'] in node_ids]
-            nodes = list_to_dict(node_list, 'node_id')
-        if slice_ids:
-            all_slices = self.convert_id(self.shell.getSlices({}, []))
-            slice_list = [slice for slice in all_slices if slice[
-                'slice_id'] in slice_ids]
-            slices = list_to_dict(slice_list, 'slice_id')
-        if user_ids:
-            all_users = self.convert_id(self.shell.getUsers())
-            user_list = [user for user in all_users if user[
-                'user_id'] in user_ids]
-            users = list_to_dict(user_list, 'user_id')
-
-        nitos_records = {'node': nodes, 'slice': slices, 'user': users}
-
-        # fill record info
-        for record in records:
-            if record['pointer'] == -1:
-                continue
-
-            for type in nitos_records:
-                if record['type'] == type:
-                    if record['pointer'] in nitos_records[type]:
-                        record.update(nitos_records[type][record['pointer']])
-                        break
-            # fill in key info
-            if record['type'] == 'user':
-                if record['pointer'] in nitos_records['user']:
-                    record['keys'] = nitos_records[
-                        'user'][record['pointer']]['keys']
-
-        return records
-
-    def fill_record_hrns(self, records):
-        """
-        convert nitos ids to hrns
-        """
-
-        # get ids
-        slice_ids, user_ids, node_ids = [], [], []
-        for record in records:
-            if 'user_ids' in record:
-                user_ids.extend(record['user_ids'])
-            if 'slice_ids' in record:
-                slice_ids.extend(record['slice_ids'])
-            if 'node_ids' in record:
-                node_ids.extend(record['node_ids'])
-
-        # get nitos records
-        slices, users, nodes = {}, {}, {}
-        if node_ids:
-            all_nodes = self.convert_id(self.shell.getNodes({}, []))
-            node_list = [node for node in all_nodes if node[
-                'node_id'] in node_ids]
-            nodes = list_to_dict(node_list, 'node_id')
-        if slice_ids:
-            all_slices = self.convert_id(self.shell.getSlices({}, []))
-            slice_list = [slice for slice in all_slices if slice[
-                'slice_id'] in slice_ids]
-            slices = list_to_dict(slice_list, 'slice_id')
-        if user_ids:
-            all_users = self.convert_id(self.shell.getUsers())
-            user_list = [user for user in all_users if user[
-                'user_id'] in user_ids]
-            users = list_to_dict(user_list, 'user_id')
-
-        # convert ids to hrns
-        for record in records:
-            # get all relevant data
-            type = record['type']
-            pointer = record['pointer']
-            auth_hrn = self.hrn
-            testbed_name = self.testbedInfo['name']
-            if pointer == -1:
-                continue
-            if 'user_ids' in record:
-                usernames = [users[user_id]['username'] for user_id in record['user_ids']
-                             if user_id in users]
-                user_hrns = [".".join([auth_hrn, testbed_name, username])
-                             for username in usernames]
-                record['users'] = user_hrns
-            if 'slice_ids' in record:
-                slicenames = [slices[slice_id]['slice_name'] for slice_id in record['slice_ids']
-                              if slice_id in slices]
-                slice_hrns = [slicename_to_hrn(
-                    auth_hrn, slicename) for slicename in slicenames]
-                record['slices'] = slice_hrns
-            if 'node_ids' in record:
-                hostnames = [nodes[node_id]['hostname'] for node_id in record['node_ids']
-                             if node_id in nodes]
-                node_hrns = [hostname_to_hrn(
-                    auth_hrn, login_base, hostname) for hostname in hostnames]
-                record['nodes'] = node_hrns
-
-            if 'expires' in record:
-                date = utcparse(record['expires'])
-                datestring = datetime_to_string(date)
-                record['expires'] = datestring
-
-        return records
-
-    def fill_record_sfa_info(self, records):
-
-        def startswith(prefix, values):
-            return [value for value in values if value.startswith(prefix)]
-
-        # get user ids
-        user_ids = []
-        for record in records:
-            user_ids.extend(record.get("user_ids", []))
-
-        # get the registry records
-        user_list, users = [], {}
-        user_list = self.api.dbsession().query(RegRecord).filter(
-            RegRecord.pointer.in_(user_ids)).all()
-        # create a hrns keyed on the sfa record's pointer.
-        # Its possible for multiple records to have the same pointer so
-        # the dict's value will be a list of hrns.
-        users = defaultdict(list)
-        for user in user_list:
-            users[user.pointer].append(user)
-
-        # get the nitos records
-        nitos_user_list, nitos_users = [], {}
-        nitos_all_users = self.convert_id(self.shell.getUsers())
-        nitos_user_list = [
-            user for user in nitos_all_users if user['user_id'] in user_ids]
-        nitos_users = list_to_dict(nitos_user_list, 'user_id')
-
-        # fill sfa info
-        for record in records:
-            if record['pointer'] == -1:
-                continue
-
-            sfa_info = {}
-            type = record['type']
-            logger.info(
-                "fill_record_sfa_info - incoming record typed %s" % type)
-            if (type == "slice"):
-                # all slice users are researchers
-                record['geni_urn'] = hrn_to_urn(record['hrn'], 'slice')
-                record['researcher'] = []
-                for user_id in record.get('user_ids', []):
-                    hrns = [user.hrn for user in users[user_id]]
-                    record['researcher'].extend(hrns)
-
-            elif (type == "node"):
-                sfa_info['dns'] = record.get("hostname", "")
-                # xxx TODO: URI, LatLong, IP, DNS
-
-            elif (type == "user"):
-                logger.info('setting user.email')
-                sfa_info['email'] = record.get("email", "")
-                sfa_info['geni_urn'] = hrn_to_urn(record['hrn'], 'user')
-                sfa_info['geni_certificate'] = record['gid']
-                # xxx TODO: PostalAddress, Phone
-            record.update(sfa_info)
-
-    ####################
-    def update_relation(self, subject_type, target_type, relation_name, subject_id, target_ids):
-
-        if subject_type == 'slice' and target_type == 'user' and relation_name == 'researcher':
-            subject = self.shell.getSlices({'slice_id': subject_id}, [])[0]
-            current_target_ids = subject['user_ids']
-            add_target_ids = list(
-                set(target_ids).difference(current_target_ids))
-            del_target_ids = list(
-                set(current_target_ids).difference(target_ids))
-            logger.debug("subject_id = %s (type=%s)" %
-                         (subject_id, type(subject_id)))
-            for target_id in add_target_ids:
-                self.shell.addUserToSlice(
-                    {'user_id': target_id, 'slice_id': subject_id})
-                logger.debug("add_target_id = %s (type=%s)" %
-                             (target_id, type(target_id)))
-            for target_id in del_target_ids:
-                logger.debug("del_target_id = %s (type=%s)" %
-                             (target_id, type(target_id)))
-                self.shell.deleteUserFromSlice(
-                    {'user_id': target_id, 'slice_id': subject_id})
-        else:
-            logger.info('unexpected relation %s to maintain, %s -> %s' %
-                        (relation_name, subject_type, target_type))
-
-    ########################################
-    # aggregate oriented
-    ########################################
-
-    def testbed_name(self): return "nitos"
-
-    # '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,
-        }
-
-    def list_slices(self, creds, options):
-        # look in cache first
-        if self.cache:
-            slices = self.cache.get('slices')
-            if slices:
-                logger.debug("NitosDriver.list_slices returns from cache")
-                return slices
-
-        # get data from db
-        slices = self.shell.getSlices({}, [])
-        testbed_name = self.testbedInfo['name']
-        slice_hrns = [slicename_to_hrn(self.hrn, testbed_name, slice[
-                                       'slice_name']) for slice in slices]
-        slice_urns = [hrn_to_urn(slice_hrn, 'slice')
-                      for slice_hrn in slice_hrns]
-
-        # cache the result
-        if self.cache:
-            logger.debug("NitosDriver.list_slices stores value in cache")
-            self.cache.add('slices', slice_urns)
-
-        return slice_urns
-
-    # first 2 args are None in case of resource discovery
-    def list_resources(self, slice_urn, slice_hrn, creds, options):
-        cached_requested = options.get('cached', True)
-        version_manager = VersionManager()
-        # get the rspec's return format from options
-        #rspec_version = version_manager.get_version(options.get('geni_rspec_version'))
-        # rspec's return format for nitos aggregate is version  NITOS 1
-        rspec_version = version_manager.get_version('NITOS 1')
-        version_string = "rspec_%s" % (rspec_version)
-
-        # panos adding the info option to the caching key (can be improved)
-        if options.get('info'):
-            version_string = version_string + \
-                "_" + options.get('info', 'default')
-
-        # Adding the list_leases option to the caching key
-        if options.get('list_leases'):
-            version_string = version_string + "_" + \
-                options.get('list_leases', 'default')
-
-        # Adding geni_available to caching key
-        if options.get('geni_available'):
-            version_string = version_string + "_" + \
-                str(options.get('geni_available'))
-
-        # look in cache first
-        if cached_requested and self.cache and not slice_hrn:
-            rspec = self.cache.get(version_string)
-            if rspec:
-                logger.debug(
-                    "NitosDriver.ListResources: returning cached advertisement")
-                return rspec
-
-        # panos: passing user-defined options
-        # print "manager options = ",options
-        aggregate = NitosAggregate(self)
-        rspec = aggregate.get_rspec(slice_xrn=slice_urn, version=rspec_version,
-                                    options=options)
-
-        # cache the result
-        if self.cache and not slice_hrn:
-            logger.debug(
-                "NitosDriver.ListResources: stores advertisement in cache")
-            self.cache.add(version_string, rspec)
-
-        return rspec
-
-    def sliver_status(self, slice_urn, slice_hrn):
-        # find out where this slice is currently running
-        slicename = hrn_to_nitos_slicename(slice_hrn)
-
-        slices = self.shell.getSlices({}, [])
-        # filter slicename
-        if len(slices) == 0:
-            raise SliverDoesNotExist(
-                "%s (used %s as slicename internally)" % (slice_hrn, slicename))
-
-        for slice in slices:
-            if slice['slice_name'] == slicename:
-                user_slice = slice
-                break
-
-        if not user_slice:
-            raise SliverDoesNotExist(
-                "%s (used %s as slicename internally)" % (slice_hrn, slicename))
-
-        # report about the reserved nodes only
-        reserved_nodes = self.shell.getReservedNodes({}, [])
-        nodes = self.shell.getNodes({}, [])
-
-        slice_reserved_nodes = []
-        for r_node in reserved_nodes:
-            if r_node['slice_id'] == slice['slice_id']:
-                for node in nodes:
-                    if node['node_id'] == r_node['node_id']:
-                        slice_reserved_nodes.append(node)
-
-        if len(slice_reserved_nodes) == 0:
-            raise SliverDoesNotExist("You have not allocated any slivers here")
-
-# continue from here
-        # get login info
-        user = {}
-        keys = []
-        if slice['user_ids']:
-            users = self.shell.getUsers()
-            # filter users on slice['user_ids']
-            for usr in users:
-                if usr['user_id'] in slice['user_ids']:
-                    keys.extend(usr['keys'])
-
-            user.update({'urn': slice_urn,
-                         'login': slice['slice_name'],
-                         'protocol': ['ssh'],
-                         'port': ['22'],
-                         'keys': keys})
-
-        result = {}
-        top_level_status = 'unknown'
-        if slice_reserved_nodes:
-            top_level_status = 'ready'
-        result['geni_urn'] = slice_urn
-        result['nitos_gateway_login'] = slice['slice_name']
-        #result['pl_expires'] = datetime_to_string(utcparse(slice['expires']))
-        #result['geni_expires'] = datetime_to_string(utcparse(slice['expires']))
-
-        resources = []
-        for node in slice_reserved_nodes:
-            res = {}
-            res['nitos_hostname'] = node['hostname']
-            sliver_id = Xrn(slice_urn, type='slice', id=node['node_id']).urn
-            res['geni_urn'] = sliver_id
-            res['geni_status'] = 'ready'
-            res['geni_error'] = ''
-            res['users'] = [user]
-
-            resources.append(res)
-
-        result['geni_status'] = top_level_status
-        result['geni_resources'] = resources
-
-        return result
-
-    def create_sliver(self, slice_urn, slice_hrn, creds, rspec_string, users, options):
-
-        aggregate = NitosAggregate(self)
-        slices = NitosSlices(self)
-        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, version='NITOS 1')
-
-        # ensure slice record exists
-        slice = slices.verify_slice(
-            slice_hrn, slice_record, sfa_peer, options=options)
-        # ensure user records exists
-        users = slices.verify_users(
-            slice_hrn, slice, users, sfa_peer, options=options)
-
-        # add/remove leases (nodes and channels)
-        # a lease in Nitos RSpec case is a reservation of nodes and channels
-        # grouped by (slice,timeslot)
-        rspec_requested_leases = rspec.version.get_leases()
-        rspec_requested_nodes = []
-        rspec_requested_channels = []
-        for lease in rspec_requested_leases:
-            if lease['type'] == 'node':
-                lease.pop('type', None)
-                rspec_requested_nodes.append(lease)
-            else:
-                lease.pop('type', None)
-                rspec_requested_channels.append(lease)
-
-        nodes = slices.verify_slice_leases_nodes(slice, rspec_requested_nodes)
-        channels = slices.verify_slice_leases_channels(
-            slice, rspec_requested_channels)
-
-        return aggregate.get_rspec(slice_xrn=slice_urn, version=rspec.version)
-
-    def delete_sliver(self, slice_urn, slice_hrn, creds, options):
-        slicename = hrn_to_nitos_slicename(slice_hrn)
-        slices = self.filter_nitos_results(
-            self.shell.getSlices({}, []), {'slice_name': slicename})
-        if not slices:
-            return 1
-        slice = slices[0]
-
-        slice_reserved_nodes = self.filter_nitos_results(
-            self.shell.getReservedNodes({}, []), {'slice_id': slice['slice_id']})
-        slice_reserved_channels = self.filter_nitos_results(
-            self.shell.getReservedChannels(), {'slice_id': slice['slice_id']})
-
-        slice_reserved_nodes_ids = [node['reservation_id']
-                                    for node in slice_reserved_nodes]
-        slice_reserved_channels_ids = [
-            channel['reservation_id'] for channel in slice_reserved_channels]
-
-        # release all reserved nodes and channels for that slice
-        try:
-            released_nodes = self.shell.releaseNodes(
-                {'reservation_ids': slice_reserved_nodes_ids})
-            released_channels = self.shell.releaseChannels(
-                {'reservation_ids': slice_reserved_channels_ids})
-        except:
-            pass
-        return 1
-
-    def renew_sliver(self, slice_urn, slice_hrn, creds, expiration_time, options):
-        slicename = hrn_to_nitos_slicename(slice_hrn)
-        slices = self.shell.GetSlices({'slicename': slicename}, ['slice_id'])
-        if not slices:
-            raise RecordNotFound(slice_hrn)
-        slice = slices[0]
-        requested_time = utcparse(expiration_time)
-        record = {'expires': int(datetime_to_epoch(requested_time))}
-        try:
-            self.shell.UpdateSlice(slice['slice_id'], record)
-
-            return True
-        except:
-            return False
-
-    # xxx this code is quite old and has not run for ages
-    # it is obviously totally broken and needs a rewrite
-    def get_ticket(self, slice_urn, slice_hrn, creds, rspec_string, options):
-        raise SfaNotImplemented("NitosDriver.get_ticket needs a rewrite")
-# please keep this code for future reference
-#        slices = PlSlices(self)
-#        peer = slices.get_peer(slice_hrn)
-#        sfa_peer = slices.get_sfa_peer(slice_hrn)
-#
-#        # get the slice record
-#        credential = api.getCredential()
-#        interface = api.registries[api.hrn]
-#        registry = api.server_proxy(interface, credential)
-#        records = registry.Resolve(xrn, credential)
-#
-#        # make sure we get a local slice record
-#        record = None
-#        for tmp_record in records:
-#            if tmp_record['type'] == 'slice' and \
-#               not tmp_record['peer_authority']:
-#    #Error (E0602, GetTicket): Undefined variable 'SliceRecord'
-#                slice_record = SliceRecord(dict=tmp_record)
-#        if not record:
-#            raise RecordNotFound(slice_hrn)
-#
-#        # similar to CreateSliver, we must verify that the required records exist
-#        # at this aggregate before we can issue a ticket
-#        # 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)
-#        # ensure slice record exists
-#        slice = slices.verify_slice(slice_hrn, slice_record, peer, sfa_peer)
-#        # ensure person records exists
-#    # xxx users is undefined in this context
-#        persons = slices.verify_persons(slice_hrn, slice, users, peer, sfa_peer)
-#        # ensure slice attributes exists
-#        slices.verify_slice_attributes(slice, requested_attributes)
-#
-#        # get sliver info
-#        slivers = slices.get_slivers(slice_hrn)
-#
-#        if not slivers:
-#            raise SliverDoesNotExist(slice_hrn)
-#
-#        # get initscripts
-#        initscripts = []
-#        data = {
-#            'timestamp': int(time.time()),
-#            'initscripts': initscripts,
-#            'slivers': slivers
-#        }
-#
-#        # create the ticket
-#        object_gid = record.get_gid_object()
-#        new_ticket = SfaTicket(subject = object_gid.get_subject())
-#        new_ticket.set_gid_caller(api.auth.client_gid)
-#        new_ticket.set_gid_object(object_gid)
-#        new_ticket.set_issuer(key=api.key, subject=self.hrn)
-#        new_ticket.set_pubkey(object_gid.get_pubkey())
-#        new_ticket.set_attributes(data)
-#        new_ticket.set_rspec(rspec)
-#        #new_ticket.set_parent(api.auth.hierarchy.get_auth_ticket(auth_hrn))
-#        new_ticket.encode()
-#        new_ticket.sign()
-#
-#        return new_ticket.save_to_string(save_parents=True)
diff --git a/sfa/nitos/nitosshell.py b/sfa/nitos/nitosshell.py
deleted file mode 100644 (file)
index 8142b1e..0000000
+++ /dev/null
@@ -1,46 +0,0 @@
-import sys
-import socket
-from urlparse import urlparse
-
-from sfa.util.sfalogging import logger
-from sfa.util.py23 import xmlrpc_client
-
-
-class NitosShell:
-    """
-    A simple xmlrpc shell to a NITOS Scheduler instance
-    This class can receive all NITOS API  calls to the underlying testbed
-    For safety this is limited to a set of hard-coded calls
-    """
-
-    direct_calls = ['getNodes', 'getChannels', 'getSlices', 'getUsers', 'getReservedNodes',
-                    'getReservedChannels', 'getTestbedInfo',
-                    'reserveNodes', 'reserveChannels', 'addSlice', 'addUser', 'addUserToSlice',
-                    'addUserKey', 'addNode', 'addChannel',
-                    'updateReservedNodes', 'updateReservedChannels', 'updateSlice', 'updateUser',
-                    'updateNode', 'updateChannel',
-                    'deleteNode', 'deleteChannel', 'deleteSlice', 'deleteUser', 'deleteUserFromSLice',
-                    'deleteKey', 'releaseNodes', 'releaseChannels'
-                    ]
-
-    # use the 'capability' auth mechanism for higher performance when the PLC
-    # db is local
-    def __init__(self, config):
-        url = config.SFA_NITOS_URL
-        self.proxy = xmlrpc_client.ServerProxy(
-            url, verbose=False, allow_none=True)
-
-    def __getattr__(self, name):
-        def func(*args, **kwds):
-            actual_name = None
-            if name in NitosShell.direct_calls:
-                actual_name = name
-            if not actual_name:
-                raise Exception(
-                    "Illegal method call %s for NITOS driver" % (name))
-            actual_name = "scheduler.server." + actual_name
-            result = getattr(self.proxy, actual_name)(*args, **kwds)
-            logger.debug('NitosShell %s (%s) returned ... ' %
-                         (name, actual_name))
-            return result
-        return func
diff --git a/sfa/nitos/nitosslices.py b/sfa/nitos/nitosslices.py
deleted file mode 100644 (file)
index 46005cc..0000000
+++ /dev/null
@@ -1,278 +0,0 @@
-from collections import defaultdict
-
-from sfa.util.sfatime import utcparse, datetime_to_epoch
-from sfa.util.sfalogging import logger
-from sfa.util.xrn import Xrn, get_leaf, get_authority, urn_to_hrn
-
-from sfa.rspecs.rspec import RSpec
-
-from sfa.nitos.nitosxrn import NitosXrn, hrn_to_nitos_slicename, xrn_to_hostname, xrn_to_channel
-
-MAXINT = 2L**31 - 1
-
-
-class NitosSlices:
-
-    def __init__(self, driver):
-        self.driver = driver
-
-    def get_sfa_peer(self, xrn):
-        hrn, type = urn_to_hrn(xrn)
-
-        # return the authority for this hrn or None if we are the authority
-        sfa_peer = None
-        slice_authority = get_authority(hrn)
-        site_authority = get_authority(slice_authority)
-
-        if site_authority != self.driver.hrn:
-            sfa_peer = site_authority
-
-        return sfa_peer
-
-    def verify_slice_leases_nodes(self, slice, rspec_requested_nodes):
-        nodes = self.driver.shell.getNodes({}, [])
-
-        requested_nodes = []
-        for node in rspec_requested_nodes:
-            requested_node = {}
-            nitos_nodes = []
-            nitos_nodes.extend(nodes)
-            slice_name = hrn_to_nitos_slicename(node['slice_id'])
-            if slice_name != slice['slice_name']:
-                continue
-            hostname = xrn_to_hostname(node['component_id'])
-            nitos_node = self.driver.filter_nitos_results(
-                nitos_nodes, {'hostname': hostname})
-            if not nitos_node:
-                continue
-            nitos_node = nitos_node[0]
-            # fill the requested node with nitos ids
-            requested_node['slice_id'] = slice['slice_id']
-            requested_node['node_id'] = nitos_node['node_id']
-            requested_node['start_time'] = node['start_time']
-            requested_node['end_time'] = str(int(
-                node['duration']) * int(self.driver.testbedInfo['grain']) + int(node['start_time']))
-            requested_nodes.append(requested_node)
-
-        # get actual nodes reservation data for the slice
-        reserved_nodes = self.driver.filter_nitos_results(
-            self.driver.shell.getReservedNodes({}, []), {'slice_id': slice['slice_id']})
-
-        reserved_nodes_by_id = {}
-        for node in reserved_nodes:
-            reserved_nodes_by_id[node['reservation_id']] = {'slice_id': node['slice_id'],
-                                                            'node_id': node['node_id'], 'start_time': node['start_time'],
-                                                            'end_time': node['end_time']}
-
-        added_nodes = []
-        kept_nodes_id = []
-        deleted_nodes_id = []
-        for reservation_id in reserved_nodes_by_id:
-            if reserved_nodes_by_id[reservation_id] not in requested_nodes:
-                deleted_nodes_id.append(reservation_id)
-            else:
-                kept_nodes_id.append(reservation_id)
-                requested_nodes.remove(reserved_nodes_by_id[reservation_id])
-        added_nodes = requested_nodes
-
-        try:
-            deleted = self.driver.shell.releaseNodes(
-                {'reservation_ids': deleted_nodes_id})
-            for node in added_nodes:
-                added = self.driver.shell.reserveNodes({'slice_id': slice['slice_id'], 'start_time': node[
-                                                       'start_time'], 'end_time': node['end_time'], 'nodes': [node['node_id']]})
-
-        except:
-            logger.log_exc('Failed to add/remove slice leases nodes')
-
-        return added_nodes
-
-    def verify_slice_leases_channels(self, slice, rspec_requested_channels):
-        channels = self.driver.shell.getChannels({}, [])
-
-        requested_channels = []
-        for channel in rspec_requested_channels:
-            requested_channel = {}
-            nitos_channels = []
-            nitos_channels.extend(channels)
-            slice_name = hrn_to_nitos_slicename(channel['slice_id'])
-            if slice_name != slice['slice_name']:
-                continue
-            channel_num = xrn_to_channel(channel['component_id'])
-            nitos_channel = self.driver.filter_nitos_results(
-                nitos_channels, {'channel': channel_num})[0]
-            # fill the requested channel with nitos ids
-            requested_channel['slice_id'] = slice['slice_id']
-            requested_channel['channel_id'] = nitos_channel['channel_id']
-            requested_channel['start_time'] = channel['start_time']
-            requested_channel['end_time'] = str(int(
-                channel['duration']) * int(self.driver.testbedInfo['grain']) + int(channel['start_time']))
-            requested_channels.append(requested_channel)
-
-        # get actual channel reservation data for the slice
-        reserved_channels = self.driver.filter_nitos_results(
-            self.driver.shell.getReservedChannels(), {'slice_id': slice['slice_id']})
-
-        reserved_channels_by_id = {}
-        for channel in reserved_channels:
-            reserved_channels_by_id[channel['reservation_id']] = {'slice_id': channel['slice_id'],
-                                                                  'channel_id': channel['channel_id'], 'start_time': channel['start_time'],
-                                                                  'end_time': channel['end_time']}
-
-        added_channels = []
-        kept_channels_id = []
-        deleted_channels_id = []
-        for reservation_id in reserved_channels_by_id:
-            if reserved_channels_by_id[reservation_id] not in requested_channels:
-                deleted_channels_id.append(reservation_id)
-            else:
-                kept_channels_id.append(reservation_id)
-                requested_channels.remove(
-                    reserved_channels_by_id[reservation_id])
-        added_channels = requested_channels
-
-        try:
-            deleted = self.driver.shell.releaseChannels(
-                {'reservation_ids': deleted_channels_id})
-            for channel in added_channels:
-                added = self.driver.shell.reserveChannels({'slice_id': slice['slice_id'], 'start_time': channel[
-                                                          'start_time'], 'end_time': channel['end_time'], 'channels': [channel['channel_id']]})
-
-        except:
-            logger.log_exc('Failed to add/remove slice leases channels')
-
-        return added_channels
-
-    def free_egre_key(self):
-        used = set()
-        for tag in self.driver.shell.GetSliceTags({'tagname': 'egre_key'}):
-            used.add(int(tag['value']))
-
-        for i in range(1, 256):
-            if i not in used:
-                key = i
-                break
-        else:
-            raise KeyError("No more EGRE keys available")
-
-        return str(key)
-
-    def verify_slice(self, slice_hrn, slice_record, sfa_peer, options=None):
-        if options is None:
-            options = {}
-        slicename = hrn_to_nitos_slicename(slice_hrn)
-        slices = self.driver.shell.getSlices({}, [])
-        slices = self.driver.filter_nitos_results(
-            slices, {'slice_name': slicename})
-        if not slices:
-            slice = {'slice_name': slicename}
-            # add the slice
-            slice['slice_id'] = self.driver.shell.addSlice(slice)
-            slice['node_ids'] = []
-            slice['user_ids'] = []
-        else:
-            slice = slices[0]
-
-        return slice
-
-    def verify_users(self, slice_hrn, slice_record, users, sfa_peer, options=None):
-        if options is None:
-            options = {}
-        # get slice info
-        slicename = hrn_to_nitos_slicename(slice_hrn)
-        slices = self.driver.shell.getSlices({}, [])
-        slice = self.driver.filter_nitos_results(
-            slices, {'slice_name': slicename})[0]
-        added_users = []
-        # get users info
-        users_info = []
-        for user in users:
-            user_urn = user['urn']
-            user_hrn, type = urn_to_hrn(user_urn)
-            username = str(user_hrn).split('.')[-1]
-            email = user['email']
-            # look for the user according to his username, email...
-            nitos_users = self.driver.filter_nitos_results(
-                self.driver.shell.getUsers(), {'username': username})
-            if not nitos_users:
-                nitos_users = self.driver.filter_nitos_results(
-                    self.driver.shell.getUsers(), {'email': email})
-
-            if not nitos_users:
-                # create the user
-                user_id = self.driver.shell.addUser(
-                    {'username': email.split('@')[0], 'email': email})
-                added_users.append(user_id)
-                # add user keys
-                for key in user['keys']:
-                    self.driver.shell.addUserKey(
-                        {'user_id': user_id, 'key': key, 'slice_id': slice['slice_id']})
-                # add the user to the slice
-                self.driver.shell.addUserToSlice(
-                    {'slice_id': slice['slice_id'], 'user_id': user_id})
-            else:
-                # check if the users are in the slice
-                for user in nitos_users:
-                    if not user['user_id'] in slice['user_ids']:
-                        self.driver.shell.addUserToSlice(
-                            {'slice_id': slice['slice_id'], 'user_id': user['user_id']})
-
-        return added_users
-
-    def verify_keys(self, persons, users, options=None):
-        if options is None:
-            options = {}
-        # existing keys
-        key_ids = []
-        for person in persons:
-            key_ids.extend(person['key_ids'])
-        keylist = self.driver.shell.GetKeys(key_ids, ['key_id', 'key'])
-        keydict = {}
-        for key in keylist:
-            keydict[key['key']] = key['key_id']
-        existing_keys = keydict.keys()
-        persondict = {}
-        for person in persons:
-            persondict[person['email']] = person
-
-        # add new keys
-        requested_keys = []
-        updated_persons = []
-        for user in users:
-            user_keys = user.get('keys', [])
-            updated_persons.append(user)
-            for key_string in user_keys:
-                requested_keys.append(key_string)
-                if key_string not in existing_keys:
-                    key = {'key': key_string, 'key_type': 'ssh'}
-                    try:
-                        if peer:
-                            person = persondict[user['email']]
-                            self.driver.shell.UnBindObjectFromPeer(
-                                'person', person['person_id'], peer['shortname'])
-                        key['key_id'] = self.driver.shell.AddPersonKey(
-                            user['email'], key)
-                        if peer:
-                            key_index = user_keys.index(key['key'])
-                            remote_key_id = user['key_ids'][key_index]
-                            self.driver.shell.BindObjectToPeer('key', key['key_id'], peer[
-                                                               'shortname'], remote_key_id)
-
-                    finally:
-                        if peer:
-                            self.driver.shell.BindObjectToPeer('person', person['person_id'], peer[
-                                                               'shortname'], user['person_id'])
-
-        # remove old keys (only if we are not appending)
-        append = options.get('append', True)
-        if append == False:
-            removed_keys = set(existing_keys).difference(requested_keys)
-            for existing_key_id in keydict:
-                if keydict[existing_key_id] in removed_keys:
-                    try:
-                        if peer:
-                            self.driver.shell.UnBindObjectFromPeer(
-                                'key', existing_key_id, peer['shortname'])
-                        self.driver.shell.DeleteKey(existing_key_id)
-                    except:
-                        pass
diff --git a/sfa/nitos/nitosxrn.py b/sfa/nitos/nitosxrn.py
deleted file mode 100644 (file)
index 375a75f..0000000
+++ /dev/null
@@ -1,139 +0,0 @@
-from __future__ import print_function
-
-# specialized Xrn class for NITOS
-import re
-from sfa.util.xrn import Xrn
-
-# temporary helper functions to use this module instead of namespace
-
-
-def hostname_to_hrn(auth, login_base, hostname):
-    return NitosXrn(auth=auth + '.' + login_base, hostname=hostname).get_hrn()
-
-
-def hostname_to_urn(auth, login_base, hostname):
-    return NitosXrn(auth=auth + '.' + login_base, hostname=hostname).get_urn()
-
-
-def slicename_to_hrn(auth_hrn, site_name, slicename):
-    return NitosXrn(auth=auth_hrn + '.' + site_name, slicename=slicename).get_hrn()
-# hack to convert nitos user name to hrn
-
-
-def username_to_hrn(auth_hrn, site_name, username):
-    return NitosXrn(auth=auth_hrn + '.' + site_name, slicename=username).get_hrn()
-
-
-def email_to_hrn(auth_hrn, email):
-    return NitosXrn(auth=auth_hrn, email=email).get_hrn()
-
-
-def hrn_to_nitos_slicename(hrn):
-    return NitosXrn(xrn=hrn, type='slice').nitos_slicename()
-# removed-dangerous - was used for non-slice objects
-# def hrn_to_nitos_login_base (hrn):
-#    return NitosXrn(xrn=hrn,type='slice').nitos_login_base()
-
-
-def hrn_to_nitos_authname(hrn):
-    return NitosXrn(xrn=hrn, type='any').nitos_authname()
-
-
-def xrn_to_hostname(hrn):
-    return Xrn.unescape(NitosXrn(xrn=hrn, type='node').get_leaf())
-
-
-def channel_to_hrn(auth, login_base, channel):
-    return NitosXrn(auth=auth + '.' + login_base, channel=channel).get_hrn()
-
-
-def channel_to_urn(auth, login_base, channel):
-    return NitosXrn(auth=auth + '.' + login_base, channel=channel).get_urn()
-
-
-def xrn_to_channel(hrn):
-    return Xrn.unescape(NitosXrn(xrn=hrn, type='channel').get_leaf())
-
-
-class NitosXrn (Xrn):
-
-    @staticmethod
-    def site_hrn(auth, login_base):
-        return '.'.join([auth, login_base])
-
-    def __init__(self, auth=None, hostname=None, slicename=None, email=None, interface=None, channel=None, **kwargs):
-        # def hostname_to_hrn(auth_hrn, login_base, hostname):
-        if hostname is not None:
-            self.type = 'node'
-            # keep only the first part of the DNS name
-            #self.hrn='.'.join( [auth,hostname.split(".")[0] ] )
-            # escape the '.' in the hostname
-            self.hrn = '.'.join([auth, Xrn.escape(hostname)])
-            self.hrn_to_urn()
-        # def slicename_to_hrn(auth_hrn, slicename):
-        elif slicename is not None:
-            self.type = 'slice'
-            self.hrn = ".".join([auth] + [slicename.replace(".", "_")])
-            self.hrn_to_urn()
-        # def email_to_hrn(auth_hrn, email):
-        elif email is not None:
-            self.type = 'person'
-            # keep only the part before '@' and replace special chars into _
-            self.hrn = '.'.join(
-                [auth, email.split('@')[0].replace(".", "_").replace("+", "_")])
-            self.hrn_to_urn()
-        elif interface is not None:
-            self.type = 'interface'
-            self.hrn = auth + '.' + interface
-            self.hrn_to_urn()
-        elif channel is not None:
-            self.type = 'channel'
-            self.hrn = ".".join([auth] + [channel])
-            self.hrn_to_urn()
-        else:
-            Xrn.__init__(self, **kwargs)
-
-    # def hrn_to_pl_slicename(hrn):
-    def nitos_slicename(self):
-        self._normalize()
-        leaf = self.leaf
-        sliver_id_parts = leaf.split(':')
-        name = sliver_id_parts[0]
-        name = re.sub('[^a-zA-Z0-9_]', '', name)
-        # return self.nitos_login_base() + '_' + name
-        return name
-
-    # def hrn_to_pl_authname(hrn):
-    def nitos_authname(self):
-        self._normalize()
-        return self.authority[-1]
-
-    def interface_name(self):
-        self._normalize()
-        return self.leaf
-
-    def nitos_login_base(self):
-        self._normalize()
-        if self.type and self.type.startswith('authority'):
-            base = self.leaf
-        else:
-            base = self.authority[-1]
-
-        # Fix up names of GENI Federates
-        base = base.lower()
-        base = re.sub('\\\[^a-zA-Z0-9]', '', base)
-
-        if len(base) > 20:
-            base = base[len(base) - 20:]
-
-        return base
-
-
-if __name__ == '__main__':
-
-        #nitosxrn = NitosXrn(auth="omf.nitos",slicename="aminesl")
-        #slice_hrn = nitosxrn.get_hrn()
-        #slice_name = NitosXrn(xrn="omf.nitos.aminesl",type='slice').nitos_slicename()
-    slicename = "giorgos_n"
-    hrn = slicename_to_hrn("pla", "nitos", slicename)
-    print(hrn)
diff --git a/sfa/rspecs/elements/versions/nitosv1Channel.py b/sfa/rspecs/elements/versions/nitosv1Channel.py
deleted file mode 100644 (file)
index 04f4aa6..0000000
+++ /dev/null
@@ -1,77 +0,0 @@
-from sfa.util.sfalogging import logger
-from sfa.util.xml import XpathFilter
-from sfa.util.xrn import Xrn
-
-from sfa.rspecs.elements.element import Element
-from sfa.rspecs.elements.node import NodeElement
-from sfa.rspecs.elements.sliver import Sliver
-from sfa.rspecs.elements.location import Location
-from sfa.rspecs.elements.hardware_type import HardwareType
-from sfa.rspecs.elements.disk_image import DiskImage
-from sfa.rspecs.elements.interface import Interface
-from sfa.rspecs.elements.bwlimit import BWlimit
-from sfa.rspecs.elements.pltag import PLTag
-from sfa.rspecs.elements.versions.nitosv1Sliver import NITOSv1Sliver
-from sfa.rspecs.elements.versions.nitosv1PLTag import NITOSv1PLTag
-from sfa.rspecs.elements.versions.pgv2Services import PGv2Services
-from sfa.rspecs.elements.lease import Lease
-from sfa.rspecs.elements.spectrum import Spectrum
-from sfa.rspecs.elements.channel import Channel
-
-
-class NITOSv1Channel:
-
-    @staticmethod
-    def add_channels(xml, channels):
-
-        network_elems = xml.xpath('//network')
-        if len(network_elems) > 0:
-            network_elem = network_elems[0]
-        elif len(channels) > 0:
-            # dirty hack that handles no resource manifest rspec
-            network_urn = "omf"
-            network_elem = xml.add_element('network', name=network_urn)
-        else:
-            network_elem = xml
-
-#        spectrum_elems = xml.xpath('//spectrum')
-#        spectrum_elem = xml.add_element('spectrum')
-
-#        if len(spectrum_elems) > 0:
-#            spectrum_elem = spectrum_elems[0]
-#        elif len(channels) > 0:
-#            spectrum_elem = xml.add_element('spectrum')
-#        else:
-#            spectrum_elem = xml
-
-        spectrum_elem = network_elem.add_instance('spectrum', [])
-
-        channel_elems = []
-        for channel in channels:
-            channel_fields = ['channel_num',
-                              'frequency', 'standard', 'component_id']
-            channel_elem = spectrum_elem.add_instance(
-                'channel', channel, channel_fields)
-            channel_elems.append(channel_elem)
-
-    @staticmethod
-    def get_channels(xml, filter=None):
-        if filter is None:
-            filter = {}
-        xpath = '//channel%s | //default:channel%s' % (
-            XpathFilter.xpath(filter), XpathFilter.xpath(filter))
-        channel_elems = xml.xpath(xpath)
-        return NITOSv1Channel.get_channel_objs(channel_elems)
-
-    @staticmethod
-    def get_channel_objs(channel_elems):
-        channels = []
-        for channel_elem in channel_elems:
-            channel = Channel(channel_elem.attrib, channel_elem)
-            channel['channel_num'] = channel_elem.attrib['channel_num']
-            channel['frequency'] = channel_elem.attrib['frequency']
-            channel['standard'] = channel_elem.attrib['standard']
-            channel['component_id'] = channel_elem.attrib['component_id']
-
-            channels.append(channel)
-        return channels
diff --git a/sfa/rspecs/elements/versions/nitosv1Lease.py b/sfa/rspecs/elements/versions/nitosv1Lease.py
deleted file mode 100644 (file)
index b5cb319..0000000
+++ /dev/null
@@ -1,113 +0,0 @@
-from sfa.util.sfalogging import logger
-from sfa.util.xml import XpathFilter
-from sfa.util.xrn import Xrn
-from sfa.util.sfatime import utcparse, datetime_to_string, datetime_to_epoch
-
-from sfa.rspecs.elements.element import Element
-from sfa.rspecs.elements.node import NodeElement
-from sfa.rspecs.elements.sliver import Sliver
-from sfa.rspecs.elements.location import Location
-from sfa.rspecs.elements.hardware_type import HardwareType
-from sfa.rspecs.elements.disk_image import DiskImage
-from sfa.rspecs.elements.interface import Interface
-from sfa.rspecs.elements.bwlimit import BWlimit
-from sfa.rspecs.elements.pltag import PLTag
-from sfa.rspecs.elements.versions.nitosv1Sliver import NITOSv1Sliver
-from sfa.rspecs.elements.versions.nitosv1PLTag import NITOSv1PLTag
-from sfa.rspecs.elements.versions.pgv2Services import PGv2Services
-from sfa.rspecs.elements.lease import Lease
-from sfa.rspecs.elements.channel import Channel
-
-
-class NITOSv1Lease:
-
-    @staticmethod
-    def add_leases(xml, leases, channels):
-
-        network_elems = xml.xpath('//network')
-        if len(network_elems) > 0:
-            network_elem = network_elems[0]
-        elif len(leases) > 0:
-            network_urn = Xrn(leases[0]['component_id']
-                              ).get_authority_urn().split(':')[0]
-            network_elem = xml.add_element('network', name=network_urn)
-        else:
-            network_elem = xml
-
-        # group the leases by slice and timeslots
-        grouped_leases = []
-
-        while leases:
-            slice_id = leases[0]['slice_id']
-            start_time = leases[0]['start_time']
-            duration = leases[0]['duration']
-            group = []
-
-            for lease in leases:
-                if slice_id == lease['slice_id'] and start_time == lease['start_time'] and duration == lease['duration']:
-                    group.append(lease)
-
-            grouped_leases.append(group)
-
-            for lease1 in group:
-                leases.remove(lease1)
-
-        lease_elems = []
-        for lease in grouped_leases:
-            #lease[0]['start_time'] = datetime_to_string(utcparse(lease[0]['start_time']))
-
-            lease_fields = ['slice_id', 'start_time', 'duration']
-            lease_elem = network_elem.add_instance(
-                'lease', lease[0], lease_fields)
-            lease_elems.append(lease_elem)
-
-            # add nodes of this lease
-            for node in lease:
-                lease_elem.add_instance('node', node, ['component_id'])
-
-            # add reserved channels of this lease
-            #channels = [{'channel_id': 1}, {'channel_id': 2}]
-            for channel in channels:
-                #channel['start_time'] = datetime_to_string(utcparse(channel['start_time']))
-                if channel['slice_id'] == lease[0]['slice_id'] and channel['start_time'] == lease[0]['start_time'] and channel['duration'] == lease[0]['duration']:
-                    lease_elem.add_instance(
-                        'channel', channel, ['component_id'])
-
-    @staticmethod
-    def get_leases(xml, filter=None):
-        if filter is None:
-            filter = {}
-        xpath = '//lease%s | //default:lease%s' % (
-            XpathFilter.xpath(filter), XpathFilter.xpath(filter))
-        lease_elems = xml.xpath(xpath)
-        return NITOSv1Lease.get_lease_objs(lease_elems)
-
-    @staticmethod
-    def get_lease_objs(lease_elems):
-        leases = []
-        channels = []
-        for lease_elem in lease_elems:
-            # get nodes
-            node_elems = lease_elem.xpath('./default:node | ./node')
-            for node_elem in node_elems:
-                lease = Lease(lease_elem.attrib, lease_elem)
-                lease['slice_id'] = lease_elem.attrib['slice_id']
-                #lease['start_time'] = datetime_to_epoch(utcparse(lease_elem.attrib['start_time']))
-                lease['start_time'] = lease_elem.attrib['start_time']
-                lease['duration'] = lease_elem.attrib['duration']
-                lease['component_id'] = node_elem.attrib['component_id']
-                lease['type'] = 'node'
-                leases.append(lease)
-            # get channels
-            channel_elems = lease_elem.xpath('./default:channel | ./channel')
-            for channel_elem in channel_elems:
-                channel = Channel(channel_elem.attrib, channel_elem)
-                channel['slice_id'] = lease_elem.attrib['slice_id']
-                #channel['start_time'] = datetime_to_epoch(utcparse(lease_elem.attrib['start_time']))
-                channel['start_time'] = lease_elem.attrib['start_time']
-                channel['duration'] = lease_elem.attrib['duration']
-                channel['component_id'] = channel_elem.attrib['component_id']
-                channel['type'] = 'channel'
-                channels.append(channel)
-
-        return leases + channels
diff --git a/sfa/rspecs/elements/versions/nitosv1Node.py b/sfa/rspecs/elements/versions/nitosv1Node.py
deleted file mode 100644 (file)
index c434939..0000000
+++ /dev/null
@@ -1,200 +0,0 @@
-from sfa.util.sfalogging import logger
-from sfa.util.xml import XpathFilter
-from sfa.util.xrn import Xrn
-
-from sfa.rspecs.elements.element import Element
-from sfa.rspecs.elements.node import NodeElement
-from sfa.rspecs.elements.sliver import Sliver
-from sfa.rspecs.elements.location import Location
-from sfa.rspecs.elements.position_3d import Position3D
-from sfa.rspecs.elements.hardware_type import HardwareType
-from sfa.rspecs.elements.disk_image import DiskImage
-from sfa.rspecs.elements.interface import Interface
-from sfa.rspecs.elements.bwlimit import BWlimit
-from sfa.rspecs.elements.pltag import PLTag
-from sfa.rspecs.elements.versions.nitosv1Sliver import NITOSv1Sliver
-from sfa.rspecs.elements.versions.nitosv1PLTag import NITOSv1PLTag
-from sfa.rspecs.elements.versions.pgv2Services import PGv2Services
-
-
-class NITOSv1Node:
-
-    @staticmethod
-    def add_nodes(xml, nodes, rspec_content_type=None):
-        network_elems = xml.xpath('//network')
-        if len(network_elems) > 0:
-            network_elem = network_elems[0]
-        elif len(nodes) > 0 and nodes[0].get('component_manager_id'):
-            network_urn = nodes[0]['component_manager_id']
-            network_elem = xml.add_element(
-                'network', name=Xrn(network_urn).get_hrn())
-        else:
-            network_elem = xml
-
-        # needs to be improuved to retreive the gateway addr dynamically.
-        gateway_addr = 'nitlab.inf.uth.gr'
-
-        node_elems = []
-        for node in nodes:
-            node_fields = ['component_manager_id',
-                           'component_id', 'boot_state']
-            node_elem = network_elem.add_instance('node', node, node_fields)
-            node_elems.append(node_elem)
-
-            # determine network hrn
-            network_hrn = None
-            if 'component_manager_id' in node and node['component_manager_id']:
-                network_hrn = Xrn(node['component_manager_id']).get_hrn()
-
-            # set component_name attribute and  hostname element
-            if 'component_id' in node and node['component_id']:
-                component_name = Xrn(xrn=node['component_id']).get_leaf()
-                node_elem.set('component_name', component_name)
-                hostname_elem = node_elem.add_element('hostname')
-                hostname_elem.set_text(component_name)
-
-            # set site id
-            if 'authority_id' in node and node['authority_id']:
-                node_elem.set('site_id', node['authority_id'])
-
-            # add locaiton
-            location = node.get('location')
-            if location:
-                node_elem.add_instance('location', location, Location.fields)
-
-            # add 3D Position of the node
-            position_3d = node.get('position_3d')
-            if position_3d:
-                node_elem.add_instance(
-                    'position_3d', position_3d, Position3D.fields)
-
-            # all nitos nodes are exculsive
-            exclusive_elem = node_elem.add_element('exclusive')
-            exclusive_elem.set_text('TRUE')
-
-            # In order to access nitos nodes, one need to pass through the nitos gateway
-            # here we advertise Nitos access gateway address
-            gateway_elem = node_elem.add_element('gateway')
-            gateway_elem.set_text(gateway_addr)
-
-            # add granularity of the reservation system
-            granularity = node.get('granularity')['grain']
-            if granularity:
-                #node_elem.add_instance('granularity', granularity, granularity.fields)
-                granularity_elem = node_elem.add_element('granularity')
-                granularity_elem.set_text(str(granularity))
-            # add hardware type
-            #hardware_type = node.get('hardware_type')
-            # if hardware_type:
-            #    node_elem.add_instance('hardware_type', hardware_type)
-            hardware_type_elem = node_elem.add_element('hardware_type')
-            hardware_type_elem.set_text(node.get('hardware_type'))
-
-            if isinstance(node.get('interfaces'), list):
-                for interface in node.get('interfaces', []):
-                    node_elem.add_instance('interface', interface, [
-                                           'component_id', 'client_id', 'ipv4'])
-
-            # if 'bw_unallocated' in node and node['bw_unallocated']:
-            #    bw_unallocated = etree.SubElement(node_elem, 'bw_unallocated', units='kbps').text = str(int(node['bw_unallocated'])/1000)
-
-            PGv2Services.add_services(node_elem, node.get('services', []))
-            tags = node.get('tags', [])
-            if tags:
-                for tag in tags:
-                    tag_elem = node_elem.add_element(tag['tagname'])
-                    tag_elem.set_text(tag['value'])
-            NITOSv1Sliver.add_slivers(node_elem, node.get('slivers', []))
-
-            # add sliver tag in Request Rspec
-            if rspec_content_type == "request":
-                node_elem.add_instance('sliver', '', [])
-
-    @staticmethod
-    def add_slivers(xml, slivers):
-        component_ids = []
-        for sliver in slivers:
-            filter = {}
-            if isinstance(sliver, str):
-                filter['component_id'] = '*%s*' % sliver
-                sliver = {}
-            elif 'component_id' in sliver and sliver['component_id']:
-                filter['component_id'] = '*%s*' % sliver['component_id']
-            if not filter:
-                continue
-            nodes = NITOSv1Node.get_nodes(xml, filter)
-            if not nodes:
-                continue
-            node = nodes[0]
-            NITOSv1Sliver.add_slivers(node, sliver)
-
-    @staticmethod
-    def remove_slivers(xml, hostnames):
-        for hostname in hostnames:
-            nodes = NITOSv1Node.get_nodes(
-                xml, {'component_id': '*%s*' % hostname})
-            for node in nodes:
-                slivers = NITOSv1Sliver.get_slivers(node.element)
-                for sliver in slivers:
-                    node.element.remove(sliver.element)
-
-    @staticmethod
-    def get_nodes(xml, filter=None):
-        if filter is None:
-            filter = {}
-        xpath = '//node%s | //default:node%s' % (
-            XpathFilter.xpath(filter), XpathFilter.xpath(filter))
-        node_elems = xml.xpath(xpath)
-        return NITOSv1Node.get_node_objs(node_elems)
-
-    @staticmethod
-    def get_nodes_with_slivers(xml):
-        xpath = '//node[count(sliver)>0] | //default:node[count(default:sliver)>0]'
-        node_elems = xml.xpath(xpath)
-        return NITOSv1Node.get_node_objs(node_elems)
-
-    @staticmethod
-    def get_node_objs(node_elems):
-        nodes = []
-        for node_elem in node_elems:
-            node = NodeElement(node_elem.attrib, node_elem)
-            if 'site_id' in node_elem.attrib:
-                node['authority_id'] = node_elem.attrib['site_id']
-            # get location
-            location_elems = node_elem.xpath('./default:location | ./location')
-            locations = [loc_elem.get_instance(
-                Location) for loc_elem in location_elems]
-            if len(locations) > 0:
-                node['location'] = locations[0]
-            # get bwlimit
-            bwlimit_elems = node_elem.xpath('./default:bw_limit | ./bw_limit')
-            bwlimits = [bwlimit_elem.get_instance(
-                BWlimit) for bwlimit_elem in bwlimit_elems]
-            if len(bwlimits) > 0:
-                node['bwlimit'] = bwlimits[0]
-            # get interfaces
-            iface_elems = node_elem.xpath('./default:interface | ./interface')
-            ifaces = [iface_elem.get_instance(
-                Interface) for iface_elem in iface_elems]
-            node['interfaces'] = ifaces
-            # get services
-            node['services'] = PGv2Services.get_services(node_elem)
-            # get slivers
-            node['slivers'] = NITOSv1Sliver.get_slivers(node_elem)
-            # get tags
-            node['tags'] = NITOSv1PLTag.get_pl_tags(
-                node_elem, ignore=NodeElement.fields + ["hardware_type"])
-            # get hardware types
-            hardware_type_elems = node_elem.xpath(
-                './default:hardware_type | ./hardware_type')
-            node['hardware_types'] = [hw_type.get_instance(
-                HardwareType) for hw_type in hardware_type_elems]
-
-            # temporary... play nice with old slice manager rspec
-            if not node['component_name']:
-                hostname_elem = node_elem.find("hostname")
-                if hostname_elem != None:
-                    node['component_name'] = hostname_elem.text
-
-            nodes.append(node)
-        return nodes
diff --git a/sfa/rspecs/elements/versions/nitosv1PLTag.py b/sfa/rspecs/elements/versions/nitosv1PLTag.py
deleted file mode 100644 (file)
index cca22af..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-from sfa.rspecs.elements.element import Element
-from sfa.rspecs.elements.pltag import PLTag
-
-
-class NITOSv1PLTag:
-
-    @staticmethod
-    def add_pl_tag(xml, name, value):
-        for pl_tag in pl_tags:
-            pl_tag_elem = xml.add_element(name)
-            pl_tag_elem.set_text(value)
-
-    @staticmethod
-    def get_pl_tags(xml, ignore=None):
-        if ignore is None:
-            ignore = []
-        pl_tags = []
-        for elem in xml.iterchildren():
-            if elem.tag not in ignore:
-                pl_tag = PLTag({'tagname': elem.tag, 'value': elem.text})
-                pl_tags.append(pl_tag)
-        return pl_tags
diff --git a/sfa/rspecs/elements/versions/nitosv1Sliver.py b/sfa/rspecs/elements/versions/nitosv1Sliver.py
deleted file mode 100644 (file)
index 6ceb87f..0000000
+++ /dev/null
@@ -1,61 +0,0 @@
-from sfa.util.xrn import Xrn
-from sfa.util.xml import XmlElement
-
-from sfa.rspecs.elements.element import Element
-from sfa.rspecs.elements.sliver import Sliver
-from sfa.rspecs.elements.versions.nitosv1PLTag import NITOSv1PLTag
-
-#from sfa.planetlab.plxrn import PlXrn
-
-
-class NITOSv1Sliver:
-
-    @staticmethod
-    def add_slivers(xml, slivers):
-        if not slivers:
-            return
-        if not isinstance(slivers, list):
-            slivers = [slivers]
-        for sliver in slivers:
-            sliver_elem = xml.add_instance('sliver', sliver, ['name'])
-            tags = sliver.get('tags', [])
-            if tags:
-                for tag in tags:
-                    NITOSv1Sliver.add_sliver_attribute(
-                        sliver_elem, tag['tagname'], tag['value'])
-            if sliver.get('sliver_id'):
-                name = Xrn(xrn=sliver.get('sliver_id')
-                           ).get_hrn().split('.')[-1]
-                sliver_elem.set('name', name)
-
-    @staticmethod
-    def add_sliver_attribute(xml, name, value):
-        elem = xml.add_element(name)
-        elem.set_text(value)
-
-    @staticmethod
-    def get_sliver_attributes(xml):
-        attribs = []
-        for elem in xml.iterchildren():
-            if elem.tag not in Sliver.fields:
-                xml_element = XmlElement(elem, xml.namespaces)
-                instance = Element(fields=xml_element, element=elem)
-                instance['name'] = elem.tag
-                instance['value'] = elem.text
-                attribs.append(instance)
-        return attribs
-
-    @staticmethod
-    def get_slivers(xml, filter=None):
-        if filter is None:
-            filter = {}
-        xpath = './default:sliver | ./sliver'
-        sliver_elems = xml.xpath(xpath)
-        slivers = []
-        for sliver_elem in sliver_elems:
-            sliver = Sliver(sliver_elem.attrib, sliver_elem)
-            if 'component_id' in xml.attrib:
-                sliver['component_id'] = xml.attrib['component_id']
-            sliver['tags'] = NITOSv1Sliver.get_sliver_attributes(sliver_elem)
-            slivers.append(sliver)
-        return slivers
diff --git a/sfa/rspecs/versions/nitosv1.py b/sfa/rspecs/versions/nitosv1.py
deleted file mode 100644 (file)
index 99485c6..0000000
+++ /dev/null
@@ -1,244 +0,0 @@
-from __future__ import print_function
-
-from copy import deepcopy
-from lxml import etree
-
-from sfa.util.sfalogging import logger
-from sfa.util.xrn import hrn_to_urn, urn_to_hrn
-from sfa.rspecs.version import RSpecVersion
-from sfa.rspecs.elements.element import Element
-from sfa.rspecs.elements.versions.pgv2Link import PGv2Link
-from sfa.rspecs.elements.versions.nitosv1Node import NITOSv1Node
-from sfa.rspecs.elements.versions.nitosv1Sliver import NITOSv1Sliver
-from sfa.rspecs.elements.versions.nitosv1Lease import NITOSv1Lease
-from sfa.rspecs.elements.versions.nitosv1Channel import NITOSv1Channel
-
-
-class NITOSv1(RSpecVersion):
-    enabled = True
-    type = 'NITOS'
-    content_type = '*'
-    version = '1'
-    schema = None
-    namespace = None
-    extensions = {}
-    namespaces = None
-    template = '<RSpec type="%s"></RSpec>' % type
-
-    # Network
-    def get_networks(self):
-        network_elems = self.xml.xpath('//network')
-        networks = [network_elem.get_instance(fields=['name', 'slice']) for
-                    network_elem in network_elems]
-        return networks
-
-    def add_network(self, network):
-        network_tags = self.xml.xpath('//network[@name="%s"]' % network)
-        if not network_tags:
-            network_tag = self.xml.add_element('network', name=network)
-        else:
-            network_tag = network_tags[0]
-        return network_tag
-
-    # Nodes
-
-    def get_nodes(self, filter=None):
-        return NITOSv1Node.get_nodes(self.xml, filter)
-
-    def get_nodes_with_slivers(self):
-        return NITOSv1Node.get_nodes_with_slivers(self.xml)
-
-    def add_nodes(self, nodes, network=None, no_dupes=False, rspec_content_type=None):
-        NITOSv1Node.add_nodes(self.xml, nodes, rspec_content_type)
-
-    def merge_node(self, source_node_tag, network, no_dupes=False):
-        if no_dupes and self.get_node_element(node['hostname']):
-            # node already exists
-            return
-
-        network_tag = self.add_network(network)
-        network_tag.append(deepcopy(source_node_tag))
-
-    # Slivers
-
-    def add_slivers(self, hostnames, attributes=None, sliver_urn=None, append=False):
-        if attributes is None:
-            attributes = []
-        # add slice name to network tag
-        network_tags = self.xml.xpath('//network')
-        if network_tags:
-            network_tag = network_tags[0]
-            network_tag.set('slice', urn_to_hrn(sliver_urn)[0])
-
-        # add slivers
-        sliver = {'name': sliver_urn,
-                  'pl_tags': attributes}
-        for hostname in hostnames:
-            if sliver_urn:
-                sliver['name'] = sliver_urn
-            node_elems = self.get_nodes({'component_id': '*%s*' % hostname})
-            if not node_elems:
-                continue
-            node_elem = node_elems[0]
-            NITOSv1Sliver.add_slivers(node_elem.element, sliver)
-
-        # remove all nodes without slivers
-        if not append:
-            for node_elem in self.get_nodes():
-                if not node_elem['slivers']:
-                    parent = node_elem.element.getparent()
-                    parent.remove(node_elem.element)
-
-    def remove_slivers(self, slivers, network=None, no_dupes=False):
-        NITOSv1Node.remove_slivers(self.xml, slivers)
-
-    def get_slice_attributes(self, network=None):
-        attributes = []
-        nodes_with_slivers = self.get_nodes_with_slivers()
-        for default_attribute in self.get_default_sliver_attributes(network):
-            attribute = default_attribute.copy()
-            attribute['node_id'] = None
-            attributes.append(attribute)
-        for node in nodes_with_slivers:
-            nodename = node['component_name']
-            sliver_attributes = self.get_sliver_attributes(nodename, network)
-            for sliver_attribute in sliver_attributes:
-                sliver_attribute['node_id'] = nodename
-                attributes.append(sliver_attribute)
-        return attributes
-
-    def add_sliver_attribute(self, component_id, name, value, network=None):
-        nodes = self.get_nodes({'component_id': '*%s*' % component_id})
-        if nodes is not None and isinstance(nodes, list) and len(nodes) > 0:
-            node = nodes[0]
-            slivers = NITOSv1Sliver.get_slivers(node)
-            if slivers:
-                sliver = slivers[0]
-                NITOSv1Sliver.add_sliver_attribute(sliver, name, value)
-        else:
-            # should this be an assert / raise an exception?
-            logger.error("WARNING: failed to find component_id %s" %
-                         component_id)
-
-    def get_sliver_attributes(self, component_id, network=None):
-        nodes = self.get_nodes({'component_id': '*%s*' % component_id})
-        attribs = []
-        if nodes is not None and isinstance(nodes, list) and len(nodes) > 0:
-            node = nodes[0]
-            slivers = NITOSv1Sliver.get_slivers(node.element)
-            if slivers is not None and isinstance(slivers, list) and len(slivers) > 0:
-                sliver = slivers[0]
-                attribs = NITOSv1Sliver.get_sliver_attributes(sliver.element)
-        return attribs
-
-    def remove_sliver_attribute(self, component_id, name, value, network=None):
-        attribs = self.get_sliver_attributes(component_id)
-        for attrib in attribs:
-            if attrib['name'] == name and attrib['value'] == value:
-                # attrib.element.delete()
-                parent = attrib.element.getparent()
-                parent.remove(attrib.element)
-
-    def add_default_sliver_attribute(self, name, value, network=None):
-        if network:
-            defaults = self.xml.xpath(
-                "//network[@name='%s']/sliver_defaults" % network)
-        else:
-            defaults = self.xml.xpath("//sliver_defaults")
-        if not defaults:
-            if network:
-                network_tag = self.xml.xpath("//network[@name='%s']" % network)
-            else:
-                network_tag = self.xml.xpath("//network")
-            if isinstance(network_tag, list):
-                network_tag = network_tag[0]
-            defaults = network_tag.add_element('sliver_defaults')
-        elif isinstance(defaults, list):
-            defaults = defaults[0]
-        NITOSv1Sliver.add_sliver_attribute(defaults, name, value)
-
-    def get_default_sliver_attributes(self, network=None):
-        if network:
-            defaults = self.xml.xpath(
-                "//network[@name='%s']/sliver_defaults" % network)
-        else:
-            defaults = self.xml.xpath("//sliver_defaults")
-        if not defaults:
-            return []
-        return NITOSv1Sliver.get_sliver_attributes(defaults[0])
-
-    def remove_default_sliver_attribute(self, name, value, network=None):
-        attribs = self.get_default_sliver_attributes(network)
-        for attrib in attribs:
-            if attrib['name'] == name and attrib['value'] == value:
-                # attrib.element.delete()
-                parent = attrib.element.getparent()
-                parent.remove(attrib.element)
-
-    # Links
-
-    def get_links(self, network=None):
-        return []
-
-    def get_link_requests(self):
-        return []
-
-    def add_links(self, links):
-        pass
-
-    def add_link_requests(self, links):
-        pass
-
-    # utility
-
-    def merge(self, in_rspec):
-        """
-        Merge contents for specified rspec with current rspec
-        """
-
-        if not in_rspec:
-            return
-
-        from sfa.rspecs.rspec import RSpec
-        if isinstance(in_rspec, RSpec):
-            rspec = in_rspec
-        else:
-            rspec = RSpec(in_rspec)
-        if rspec.version.type.lower() == 'protogeni':
-            from sfa.rspecs.rspec_converter import RSpecConverter
-            in_rspec = RSpecConverter.to_sfa_rspec(rspec.toxml())
-            rspec = RSpec(in_rspec)
-
-        # just copy over all networks
-        current_networks = self.get_networks()
-        networks = rspec.version.get_networks()
-        for network in networks:
-            current_network = network.get('name')
-            if current_network and current_network not in current_networks:
-                self.xml.append(network.element)
-                current_networks.append(current_network)
-
-    # Leases
-
-    def get_leases(self, filter=None):
-        return NITOSv1Lease.get_leases(self.xml, filter)
-
-    def add_leases(self, leases_channels, network=None, no_dupes=False):
-        leases, channels = leases_channels
-        NITOSv1Lease.add_leases(self.xml, leases, channels)
-
-    # Spectrum
-
-    def get_channels(self, filter=None):
-        return NITOSv1Channel.get_channels(self.xml, filter)
-
-    def add_channels(self, channels, network=None, no_dupes=False):
-        NITOSv1Channel.add_channels(self.xml, channels)
-
-
-if __name__ == '__main__':
-    from sfa.rspecs.rspec import RSpec
-    from sfa.rspecs.rspec_elements import *
-    r = RSpec('/tmp/resources.rspec')
-    r.load_rspec_elements(SFAv1.elements)
-    print(r.get(RSpecElements.NODE))