From f6bda5d9a28338244fffbfb90b087d8c0c0f77fd Mon Sep 17 00:00:00 2001 From: Tony Mack Date: Sun, 12 Apr 2009 22:56:46 +0000 Subject: [PATCH] define the server interface in __init__ --- geni/aggregate.py | 47 +++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 45 insertions(+), 2 deletions(-) diff --git a/geni/aggregate.py b/geni/aggregate.py index 4b9f8a3a..a4733459 100644 --- a/geni/aggregate.py +++ b/geni/aggregate.py @@ -6,7 +6,7 @@ import xmlrpclib from types import StringTypes, ListType from geni.util.geniserver import GeniServer -from geni.util.geniclient import * +from geni.util.geniclient import GeniClient from geni.util.cert import Keypair, Certificate from geni.util.credential import Credential from geni.util.trustedroot import TrustedRootList @@ -42,6 +42,7 @@ class Aggregate(GeniServer): def __init__(self, ip, port, key_file, cert_file, config = "/usr/share/geniwrapper/geni/util/geni_config"): GeniServer.__init__(self, ip, port, key_file, cert_file) + self.server.interface = 'aggregate' self.key_file = key_file self.cert_file = cert_file self.config = Config(config) @@ -592,4 +593,46 @@ class Aggregate(GeniServer): self.server.register_function(self.start_slice) self.server.register_function(self.stop_slice) self.server.register_function(self.reset_slice) - + + + + +class Aggregates(dict): + + 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': ''} + self.aggregate_info = XmlStorage(aggregates_file, {'aggregates': {'aggregate': [connection_dict]}}) + self.aggregate_info.load() + self.connectAggregates() + + + def connectAggregates(self): + """ + 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()): + continue + hrn, address, port = aggregate['hrn'], aggregate['addr'], aggregate['port'] + if not hrn or not address or not port: + continue + url = 'http://%(address)s:%(port)s' % locals() + 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 + address = self.api.config.GENI_AGGREGATE_HOSTNAME + port = self.api.config.GENI_AGGREGATE_PORT + url = 'http://%(address)s:%(port)s' % locals() + self[self.api.hrn] = GeniClient(url, self.api.key_file, self.api.cert_file) + -- 2.43.0