X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=sfa%2Fnitos%2Fnitosshell.py;h=cf543f29d176bc207866709c88d345be530c3f1c;hb=06768bd605e5d47fadfc90a35c74e30f267226a5;hp=4b5fce62b23b658e86de5fe6e8ca81c7b25f50b0;hpb=f389b65789446d40a976cfd01b0fe1d0cf1487c9;p=sfa.git diff --git a/sfa/nitos/nitosshell.py b/sfa/nitos/nitosshell.py index 4b5fce62..cf543f29 100644 --- a/sfa/nitos/nitosshell.py +++ b/sfa/nitos/nitosshell.py @@ -1,73 +1,39 @@ import sys -import xmlrpclib import socket from urlparse import urlparse from sfa.util.sfalogging import logger +from sfa.util.py23 import xmlrpc_client class NitosShell: """ - A simple xmlrpc shell to a myplc instance + A simple xmlrpc shell to a NITOS Scheduler instance This class can receive all NITOS API calls to the underlying testbed For safety this is limited to a set of hard-coded calls """ direct_calls = ['getNodes','getChannels','getSlices','getUsers','getReservedNodes', - 'getReservedChannels','getTestbedInfo' + 'getReservedChannels','getTestbedInfo', + 'reserveNodes','reserveChannels','addSlice','addUser','addUserToSlice', + 'addUserKey','addNode', 'addChannel', + 'updateReservedNodes','updateReservedChannels','updateSlice','updateUser', + 'updateNode', 'updateChannel', + 'deleteNode','deleteChannel','deleteSlice','deleteUser', 'deleteUserFromSLice', + 'deleteKey', 'releaseNodes', 'releaseChannels' ] # use the 'capability' auth mechanism for higher performance when the PLC db is local def __init__ ( self, config ) : url = config.SFA_NITOS_URL -# url = "http://195.251.17.239:8080/RPC2" - # try to figure if the url is local - hostname=urlparse(url).hostname - is_local=False - if hostname == 'localhost': is_local=True - # otherwise compare IP addresses; - # this might fail for any number of reasons, so let's harden that - try: - # xxx todo this seems to result in a DNS request for each incoming request to the AM - # should be cached or improved - url_ip=socket.gethostbyname(hostname) - local_ip=socket.gethostbyname(socket.gethostname()) - if url_ip==local_ip: is_local=True - except: - pass - - if is_local: - try: - # too bad this is not installed properly - plcapi_path="/usr/share/plc_api" - if plcapi_path not in sys.path: sys.path.append(plcapi_path) - import PLC.Shell - plc_direct_access=True - except: - plc_direct_access=False - if is_local and plc_direct_access: - logger.debug('plshell access - capability') - #self.plauth = { 'AuthMethod': 'capability', - # 'Username': config.SFA_PLC_USER, - # 'AuthString': config.SFA_PLC_PASSWORD, - # } - self.proxy = PLC.Shell.Shell () - - else: - logger.debug('nitosshell access - xmlrpc') - #self.plauth = { 'AuthMethod': 'password', - # 'Username': config.SFA_PLC_USER, - # 'AuthString': config.SFA_PLC_PASSWORD, - # } - self.proxy = xmlrpclib.Server(url, verbose = False, allow_none = True) + self.proxy = xmlrpc_client.ServerProxy(url, verbose = False, allow_none = True) def __getattr__(self, name): def func(*args, **kwds): actual_name=None if name in NitosShell.direct_calls: actual_name=name -# if name in NitosShell.alias_calls: actual_name=NitosShell.alias_calls[name] if not actual_name: - raise Exception, "Illegal method call %s for NITOS driver"%(name) + raise Exception("Illegal method call %s for NITOS driver"%(name)) actual_name = "scheduler.server." + actual_name result=getattr(self.proxy, actual_name)(*args, **kwds) logger.debug('NitosShell %s (%s) returned ... '%(name,actual_name))