added support for GeniClientLight client
authorTony Mack <tmack@cs.princeton.edu>
Tue, 14 Apr 2009 20:30:16 +0000 (20:30 +0000)
committerTony Mack <tmack@cs.princeton.edu>
Tue, 14 Apr 2009 20:30:16 +0000 (20:30 +0000)
geni/aggregate.py
geni/registry.py

index c1d74b5..fe1a5e8 100644 (file)
@@ -7,6 +7,11 @@ import xmlrpclib
 from types import StringTypes, ListType
 from geni.util.geniserver import GeniServer
 from geni.util.geniclient import GeniClient
 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 *
 
 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):
 # 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'
     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()
         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. 
         """
         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:
         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
                     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()
                 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
 
         # set up a connection to the local registry
         # connect to registry using GeniClient
index 963da39..c03e481 100644 (file)
@@ -8,11 +8,19 @@ import sys
 
 from geni.util.geniserver import GeniServer
 from geni.util.geniclient import GeniClient
 
 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.genitable import GeniTable
 from geni.util.excep import *
-from geni.util.config import *
 from geni.util.storage import *
 
 from geni.util.storage import *
 
+
+#
+
+
 ##
 # Registry is a GeniServer that serves registry and slice operations at PLC.
 
 ##
 # Registry is a GeniServer that serves registry and slice operations at PLC.
 
@@ -36,11 +44,15 @@ class Registry(GeniServer):
 
 class Registries(dict):
 
 
 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'
     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()
         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. 
         """
         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:
         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
                     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()
                 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
 
         # set up a connection to the local registry
         # connect to registry using GeniClient