X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=sfa%2Fserver%2Finterface.py;h=12a0e4fe97398ce235c483f5a152221e4eba92a5;hb=db091e73c33c373b7f6c2c96bd2caf6a2acf0178;hp=5ccb7ee3764d5563a9658b0e81f86adf417966bc;hpb=d1ea6f1747dbe6edb0fefc05dda8f6eed864c024;p=sfa.git diff --git a/sfa/server/interface.py b/sfa/server/interface.py index 5ccb7ee3..12a0e4fe 100644 --- a/sfa/server/interface.py +++ b/sfa/server/interface.py @@ -1,18 +1,13 @@ -# -### $Id: interface.py 17583 2010-04-06 15:01:08Z tmack $ -### $URL: https://svn.planet-lab.org/svn/sfa/trunk/sfa/server/interface.py $ -# +import traceback +import os.path from sfa.util.faults import * -from sfa.util.storage import * -from sfa.util.namespace import * -from sfa.trust.gid import GID -from sfa.util.table import SfaTable +from sfa.util.storage import XmlStorage +from sfa.util.xrn import get_authority, hrn_to_urn from sfa.util.record import SfaRecord -import traceback import sfa.util.xmlrpcprotocol as xmlrpcprotocol import sfa.util.soapprotocol as soapprotocol - +from sfa.trust.gid import GID # GeniLight client support is optional try: @@ -32,7 +27,7 @@ class Interfaces(dict): 1) Makes sure a record exist in the local registry for the each fedeated peer - 2) Attepts to fetch and install trusted gids + 2) Attempts to fetch and install trusted gids 3) Provides connections (xmlrpc or soap) to federated peers """ @@ -60,6 +55,17 @@ class Interfaces(dict): interfaces = self.interface_info.values()[0].values()[0] if not isinstance(interfaces, list): interfaces = [self.interfaces] + # set the url and urn + for interface in interfaces: + # port is appended onto the domain, before the path. Should look like: + # http://domain:port/path + hrn, address, port = interface['hrn'], interface['addr'], interface['port'] + address_parts = address.split('/') + address_parts[0] = address_parts[0] + ":" + str(port) + url = "http://%s" % "/".join(address_parts) + interface['url'] = url + interface['urn'] = hrn_to_urn(hrn, 'authority') + self.interfaces = {} required_fields = self.default_fields.keys() for interface in interfaces: @@ -130,8 +136,7 @@ class Interfaces(dict): except: message = "interface: %s\tunable to install trusted gid for %s" % \ (self.api.interface, new_hrn) - self.api.logger.info(message) - traceback.print_exc() + self.api.logger.log_exc(message) # reload the trusted certs list self.api.auth.load_trusted_certs() @@ -143,6 +148,8 @@ class Interfaces(dict): defined in the config file (registries.xml). Removes old records from the db. """ + # import SfaTable here so this module can be loaded by ComponentAPI + from sfa.util.table import SfaTable if not gids: return @@ -182,13 +189,8 @@ class Interfaces(dict): connections = {} required_fields = self.default_fields.keys() for interface in self.interfaces.values(): - # make sure the required fields are present and not null - if not all([interface.get(key) for key in required_fields]): - continue - - hrn, address, port = interface['hrn'], interface['addr'], interface['port'] - url = 'http://%(address)s:%(port)s' % locals() - + url = interface['url'] +# sfa_logger().debug("Interfaces.get_connections - looping on neighbour %s"%url) # check which client we should use # sfa.util.xmlrpcprotocol is default client_type = 'xmlrpcprotocol' @@ -198,6 +200,6 @@ class Interfaces(dict): client_type = 'geniclientlight' connections[hrn] = GeniClientLight(url, self.api.key_file, self.api.cert_file) else: - connections[hrn] = xmlrpcprotocol.get_server(url, self.api.key_file, self.api.cert_file) + connections[interface['hrn']] = xmlrpcprotocol.get_server(url, self.api.key_file, self.api.cert_file) return connections