X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=api.py;h=0491dc28e75ea1911e4fa2b1b12dc7c5be935e76;hb=a7f54b07b8599d2d2c32d1ab729471f8fc8b769a;hp=8da28efa90f598dc7070069f5346cb9e3c4bb1fb;hpb=106d33a2055836ce373a3cc5c69c41728a97ceb5;p=nodemanager.git diff --git a/api.py b/api.py index 8da28ef..0491dc2 100644 --- a/api.py +++ b/api.py @@ -31,96 +31,7 @@ UNIX_ADDR = '/tmp/sliver_mgr.api' deliver_ticket = None # set in sm.py:start() -api_method_dict = {} -nargs_dict = {} - -def export_to_api(nargs): - def export(method): - nargs_dict[method.__name__] = nargs - api_method_dict[method.__name__] = method - return method - return export - - -@export_to_api(0) -def Help(): - """Help(): get help""" - return ''.join([method.__doc__ + '\n' for method in api_method_dict.itervalues()]) - -@export_to_api(1) -def Ticket(tkt): - """Ticket(tkt): deliver a ticket""" - try: - data = ticket.verify(tkt) - name = data['slivers'][0]['name'] - if data != None: - deliver_ticket(data) - logger.log('Ticket delivered for %s' % name) - Create(database.db.get(name)) - except Exception, err: - raise xmlrpclib.Fault(102, 'Ticket error: ' + str(err)) - -@export_to_api(0) -def GetXIDs(): - """GetXIDs(): return an dictionary mapping slice names to XIDs""" - return dict([(pwent[0], pwent[2]) for pwent in pwd.getpwall() if pwent[6] == sliver_vs.Sliver_VS.SHELL]) - -@export_to_api(0) -def GetSSHKeys(): - """GetSSHKeys(): return an dictionary mapping slice names to SSH keys""" - keydict = {} - for rec in database.db.itervalues(): - if 'keys' in rec: - keydict[rec['name']] = rec['keys'] - return keydict - -@export_to_api(1) -def Create(rec): - """Create(sliver_name): create a non-PLC-instantiated sliver""" - if rec['instantiation'] == 'delegated': accounts.get(rec['name']).ensure_created(rec) - -@export_to_api(1) -def Destroy(rec): - """Destroy(sliver_name): destroy a non-PLC-instantiated sliver""" - if rec['instantiation'] == 'delegated': accounts.get(rec['name']).ensure_destroyed() - -@export_to_api(1) -def Start(rec): - """Start(sliver_name): run start scripts belonging to the specified sliver""" - accounts.get(rec['name']).start() - -@export_to_api(1) -def Stop(rec): - """Stop(sliver_name): kill all processes belonging to the specified sliver""" - accounts.get(rec['name']).stop() - -@export_to_api(1) -def GetEffectiveRSpec(rec): - """GetEffectiveRSpec(sliver_name): return the RSpec allocated to the specified sliver, including loans""" - return rec.get('_rspec', {}).copy() - -@export_to_api(1) -def GetRSpec(rec): - """GetRSpec(sliver_name): return the RSpec allocated to the specified sliver, excluding loans""" - return rec.get('rspec', {}).copy() - -@export_to_api(1) -def GetLoans(rec): - """GetLoans(sliver_name): return the list of loans made by the specified sliver""" - return rec.get('_loans', [])[:] - -def validate_loans(obj): - """Check that is a valid loan specification.""" - def validate_loan(obj): return (type(obj)==list or type(obj)==tuple) and len(obj)==3 and type(obj[0])==str and type(obj[1])==str and obj[1] in database.LOANABLE_RESOURCES and type(obj[2])==int and obj[2]>=0 - return type(obj)==list and False not in map(validate_loan, obj) - -@export_to_api(2) -def SetLoans(rec, loans): - """SetLoans(sliver_name, loans): overwrite the list of loans made by the specified sliver""" - if not validate_loans(loans): raise xmlrpclib.Fault(102, 'Invalid argument: the second argument must be a well-formed loan specification') - rec['_loans'] = loans - database.db.sync() - +from api_calls import * class APIRequestHandler(SimpleXMLRPCServer.SimpleXMLRPCRequestHandler): # overriding _dispatch to achieve this effect is officially deprecated,