-from sfa.util.sfalogging import logger
-from sfa.util.py23 import xmlrpc_client
-
-
-class FdShell:
- """
- A simple xmlrpc shell to a federica API server
- This class can receive the XMLRPC calls to the federica testbed
- For safety this is limited to a set of hard-coded calls
- """
-
- direct_calls = ['listAvailableResources',
- 'listSliceResources',
- 'createSlice',
- 'deleteSlice',
- 'getRSpecVersion',
- 'listSlices',
- ]
-
- def __init__(self, config):
- url = config.SFA_FEDERICA_URL
- # xxx not sure if java xmlrpc has support for None
- # self.proxy = xmlrpc_client.ServerProxy(url, verbose = False, allow_none = True)
- # xxx turn on verbosity
- self.proxy = xmlrpc_client.ServerProxy(url, verbose=True)
-
- # xxx get credentials from the config ?
- # right now basic auth data goes into the URL
- # so do *not* add any credential at that point
- def __getattr__(self, name):
- def func(*args, **kwds):
- if name not in FdShell.direct_calls:
- raise Exception(
- "Illegal method call %s for FEDERICA driver" % (name))
- logger.info("Issuing %s args=%s kwds=%s to federica" %
- (name, args, kwds))
-# result=getattr(self.proxy, "AggregateManager.%s"%name)(credential, *args, **kwds)
- result = getattr(self.proxy, "AggregateManager.%s" %
- name)(*args, **kwds)
- logger.debug('FdShell %s (%s) returned ... ' % (name, name))
- return result
- return func