-# 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, file = "/etc/sfa/aggregates.xml"):
- dict.__init__(self, {})
- self.api = api
-
- # create default connection dict
- connection_dict = {}
- for field in self.required_fields:
- connection_dict[field] = ''
- aggregates_dict = {'aggregates': {'aggregate': [connection_dict]}}
- # get possible config file locations
- loaded = False
- path = os.path.dirname(os.path.abspath(__file__))
- filename = file.split(os.sep)[-1]
- alt_file = path + os.sep + filename
- files = [file, alt_file]
-
- for f in files:
- try:
- if os.path.isfile(f):
- self.aggregate_info = XmlStorage(f, aggregates_dict)
- loaded = True
- except: pass
-
- # if file is missing, just recreate it in the right place
- if not loaded:
- self.aggregate_info = XmlStorage(file, aggregates_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.
- """
- aggregates = self.aggregate_info['aggregates']['aggregate']
- if isinstance(aggregates, dict):
- aggregates = [aggregates]
- if isinstance(aggregates, list):
- for aggregate in aggregates:
- # 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()