From 71292384c47fb9dd70ef782ffe799d6d235fb204 Mon Sep 17 00:00:00 2001 From: Tony Mack Date: Tue, 14 Apr 2009 20:30:16 +0000 Subject: [PATCH] added support for GeniClientLight client --- geni/aggregate.py | 33 +++++++++++++++++++++++++++------ geni/registry.py | 37 +++++++++++++++++++++++++++++++------ 2 files changed, 58 insertions(+), 12 deletions(-) diff --git a/geni/aggregate.py b/geni/aggregate.py index c1d74b59..fe1a5e80 100644 --- a/geni/aggregate.py +++ b/geni/aggregate.py @@ -7,6 +7,11 @@ import xmlrpclib from types import StringTypes, ListType from geni.util.geniserver import GeniServer from geni.util.geniclient import GeniClient +# GeniLight client support is optional +try: + from egeni.geniLight_client import * +except ImportError: + GeniClientLight = None from geni.util.storage import * from geni.util.excep import * @@ -28,12 +33,16 @@ class Aggregate(GeniServer): # Aggregates is a dictionary of geniclient aggregate connections keyed on the aggregate hrn class Aggregates(dict): - + + required_fields = ['hrn', 'addr', 'port'] + def __init__(self, api): dict.__init__(self, {}) self.api = api aggregates_file = self.api.server_basedir + os.sep + 'aggregates.xml' - connection_dict = {'hrn': '', 'addr': '', 'port': ''} + connection_dict = {} + for field in self.required_fields: + connection_dict[field] = '' self.aggregate_info = XmlStorage(aggregates_file, {'aggregates': {'aggregate': [connection_dict]}}) self.aggregate_info.load() self.connectAggregates() @@ -44,20 +53,32 @@ class Aggregates(dict): Get connection details for the trusted peer aggregates from file and create an GeniClient connection to each. """ - required_fields = ['hrn', 'addr', 'port'] aggregates = self.aggregate_info['aggregates']['aggregate'] if isinstance(aggregates, dict): aggregates = [aggregates] if isinstance(aggregates, list): for aggregate in aggregates: - # create xmlrpc connection using GeniClient - if not set(required_fields).issubset(aggregate.keys()): + # make sure the required fields are present + if not set(self.required_fields).issubset(aggregate.keys()): continue hrn, address, port = aggregate['hrn'], aggregate['addr'], aggregate['port'] if not hrn or not address or not port: continue + # check which client we should use + # geniclient is default + client_type = 'geniclient' + if aggregate.has_key('client') and aggregate['client'] in ['geniclientlight']: + client_type = 'geniclientlight' + + # create url url = 'http://%(address)s:%(port)s' % locals() - self[hrn] = GeniClient(url, self.api.key_file, self.api.cert_file) + + # create the client connection + # make sure module exists before trying to instantiate it + if client_type in ['geniclientlight'] and GeniClientLight: + self[hrn] = GeniClientLight(url, self.api.key_file, self.api.cert_file) + else: + self[hrn] = GeniClient(url, self.api.key_file, self.api.cert_file) # set up a connection to the local registry # connect to registry using GeniClient diff --git a/geni/registry.py b/geni/registry.py index 963da39b..c03e4810 100644 --- a/geni/registry.py +++ b/geni/registry.py @@ -8,11 +8,19 @@ import sys from geni.util.geniserver import GeniServer from geni.util.geniclient import GeniClient +# GeniLight client support is optional +try: + from egeni.geniLight_client import * +except ImportError: + GeniClientLight = None from geni.util.genitable import GeniTable from geni.util.excep import * -from geni.util.config import * from geni.util.storage import * + +# + + ## # Registry is a GeniServer that serves registry and slice operations at PLC. @@ -36,11 +44,15 @@ class Registry(GeniServer): class Registries(dict): + required_fields = ['hrn', 'addr', 'port'] + def __init__(self, api): dict.__init__(self, {}) self.api = api registries_file = self.api.server_basedir + os.sep + 'registries.xml' - connection_dict = {'hrn': '', 'addr': '', 'port': ''} + connection_dict = {} + for field in self.required_fields: + connection_dict[field] = '' self.registry_info = XmlStorage(registries_file, {'registries': {'registry': [connection_dict]}}) self.registry_info.load() self.connectRegistries() @@ -50,20 +62,33 @@ class Registries(dict): Get connection details for the trusted peer registries from file and create an GeniClient connection to each. """ - required_fields = ['hrn', 'addr', 'port'] registries = self.registry_info['registries']['registry'] if isinstance(registries, dict): registries = [registries] if isinstance(registries, list): for registry in registries: - # create xmlrpc connection using GeniClient - if not set(required_fields).issubset(registry.keys()): + # make sure the required fields are present + if not set(self.required_fields).issubset(registry.keys()): continue hrn, address, port = registry['hrn'], registry['addr'], registry['port'] if not hrn or not address or not port: continue + + # check which client we should use + # geniclient is default + client_type = 'geniclient' + if registry.has_key('client') and registry['client'] in ['geniclientlight']: + client_type = 'geniclientlight' + + # create url url = 'http://%(address)s:%(port)s' % locals() - self[hrn] = GeniClient(url, self.api.key_file, self.api.cert_file) + + # create the client connection + # make sure module exists before trying to instantiate it + if client_type in ['geniclientlight'] and GeniClientLight: + self[hrn] = GeniClientLight(url, self.api.key_file, self.api.cert_file) + else: + self[hrn] = GeniClient(url, self.api.key_file, self.api.cert_file) # set up a connection to the local registry # connect to registry using GeniClient -- 2.43.0