From: Tony Mack Date: Mon, 14 Sep 2009 23:19:11 +0000 (+0000) Subject: remove sfa upcalls X-Git-Tag: PLCAPI-4.3-24~2 X-Git-Url: http://git.onelab.eu/?p=plcapi.git;a=commitdiff_plain;h=3c5dc3e7de8c544b622eb0cc62354af311c68a4f remove sfa upcalls --- diff --git a/PLC/SFA.py b/PLC/SFA.py deleted file mode 100644 index edff676..0000000 --- a/PLC/SFA.py +++ /dev/null @@ -1,183 +0,0 @@ -import traceback -from types import StringTypes -from PLC.Sites import Sites -try: - from sfa.util.geniclient import * - from sfa.util.config import * - from sfa.trust.credential import * - from sfa.plc.sfaImport import cleanup_string - from sfa.util.record import * - from sfa.trust.hierarchy import * - from sfa.util.misc import * - packages_imported = True -except: - packages_imported = False - -def wrap_exception(method): - def wrap(*args, **kwds): - try: - return method(*args, **kwds) - except: - traceback.print_exc() - return wrap - -def required_packages_imported(method): - def wrap(*args, **kwds): - if packages_imported: - return method(*args, **kwds) - else: - return - return wrap - -class SFA: - - @wrap_exception - @required_packages_imported - def __init__(self, api): - - self.api = api - - # Get the path to the sfa server key/cert files from - # the sfa hierarchy object - sfa_hierarchy = Hierarchy() - sfa_key_path = sfa_hierarchy.basedir - key_file = os.path.join(sfa_key_path, "server.key") - cert_file = os.path.join(sfa_key_path, "server.cert") - - # get a connection to our local sfa registry - # and a valid credential - config = Config() - self.authority = config.SFA_INTERFACE_HRN - url = 'http://%s:%s/' %(config.SFA_REGISTRY_HOST, config.SFA_REGISTRY_PORT) - self.registry = GeniClient(url, key_file, cert_file) - #self.sfa_api = GeniAPI(key_file = key_file, cert_file = cert_file) - #self.credential = self.sfa_api.getCredential() - cred_file = '/etc/sfa/slicemgr.' + self.authority + '.authority.cred' - self.credential = Credential(filename = cred_file) - - def get_login_base(self, site_id): - sites = Sites(self.api, [site_id], ['login_base']) - login_base = sites[0]['login_base'] - return login_base - - - def get_login_bases(self, object): - login_bases = [] - site_ids = [] - - # get the site_ids - if object.has_key('site_id') and object['site_id']: - site_ids.append(object['site_id']) - elif object.has_key('site_ids') and object['site_ids']: - site_ids.extend(object['site_ids']) - else: - return login_bases - - # get the login bases - for site_id in site_ids: - login_bases.append(self.get_login_base(site_id)) - - return login_bases - - def get_object_hrn(self, type, object, authority, login_base): - parent_hrn = authority + "." + login_base - if type in ['person', 'user']: - name_parts = object['email'].split("@") - hrn = parent_hrn + "." + name_parts[:1][0] - - elif type in ['slice']: - name_parts = object['name'].split("_") - hrn = parent_hrn + "." + name_parts[-1:][0] - - elif type in ['node']: - hrn = hostname_to_hrn(self.authority, login_base, object['hostname']) - - elif type in ['site', 'authority']: - hrn = parent_hrn - - else: - raise Exception, "Invalid record type %(type)s" % locals() - - return hrn - - def sfa_record_exists(self, hrn, type): - """ - check if the record (hrn and type) already exist in our sfa db - """ - exists = False - # list is quicker than resolve - parent_hrn = get_authority(hrn) - if not parent_hrn: parent_hrn = hrn - #records = self.registry.list(self.credential, parent_hrn) - records = self.registry.resolve(self.credential, hrn) - for record in records: - if record['type'] == type and record['hrn'] == hrn: - exists = True - return exists - - @wrap_exception - @required_packages_imported - def update_record(self, object, type, login_bases = None): - # determine this objects site and login_base - if not login_bases: - login_bases = self.get_login_bases(object) - - if isinstance(login_bases, StringTypes): - login_bases = [login_bases] - - for login_base in login_bases: - login_base = cleanup_string(login_base) - parent_hrn = self.authority + "." + login_base - - if type in ['person']: - type = 'user' - elif type in ['site']: - type = 'authority' - - # set the object hrn, tpye and create the sfa record - # object - object['hrn'] = self.get_object_hrn(type, object, self.authority, login_base) - object['type'] = type - if type in ['user']: - record = UserRecord(dict=object) - - elif type in ['slice']: - record = SliceRecord(dict=object) - - elif type in ['node']: - record = NodeRecord(dict=object) - - elif type in ['authority']: - record = AuthorityRecord(dict=object) - - else: - raise Exception, "Invalid record type %(type)s" % locals() - - # add the record to sfa - if not self.sfa_record_exists(object['hrn'], type): - self.registry.register(self.credential, record) - else: - self.registry.update(self.credential, record) - - @wrap_exception - @required_packages_imported - def delete_record(self, object, type, login_base = None): - if type in ['person']: - type = 'user' - elif type in ['site']: - type = 'authority' - - if type not in ['user', 'slice', 'node', 'authority']: - raise Exception, "Invalid type %(type)s" % locals() - - if not login_base: - login_bases = self.get_login_bases(object) - else: - login_bases = [login_base] - - for login_base in login_bases: - login_base = cleanup_string(login_base) - hrn = self.get_object_hrn(type, object, self.authority, login_base) - if self.sfa_record_exists(hrn, type): - self.registry.remove(self.credential, type, hrn) -