define the server interface in __init__
authorTony Mack <tmack@cs.princeton.edu>
Sun, 12 Apr 2009 22:56:46 +0000 (22:56 +0000)
committerTony Mack <tmack@cs.princeton.edu>
Sun, 12 Apr 2009 22:56:46 +0000 (22:56 +0000)
geni/aggregate.py

index 4b9f8a3..a473345 100644 (file)
@@ -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)
+