X-Git-Url: http://git.onelab.eu/?p=monitor.git;a=blobdiff_plain;f=docs%2FMonitor.xml.in;fp=docs%2FMonitor.xml.in;h=cb29420d7c448f22040c16cf7b9ac1bfc3882994;hp=dd38353eee48f1e2a22f94694ef54e1de08897dd;hb=89ab76b4288ddca8f1127d78f6542be3002605d0;hpb=b873412a93501520059bcaf6fc18ac9050f1cdb5 diff --git a/docs/Monitor.xml.in b/docs/Monitor.xml.in index dd38353..cb29420 100644 --- a/docs/Monitor.xml.in +++ b/docs/Monitor.xml.in @@ -6,146 +6,45 @@ - PlanetLab Node Manager API Documentation + PlanetLab Administrative-Monitor API Documentation Introduction - The PlanetLab Node Manager API (NMAPI) is the interface through + The PlanetLab Administrative-Monitor API (Admin-Mon) is the interface through which the slices access the Node API.
Authentication - Authentication for NM operations is based on the identity of the - connecting slice. For slices whose roles are defined as - 'nm-controller', the target slice must be listed delegated and as - controlled by the calling slice. + Authentication for operations is based on the identity of the + connecting user. The standard PLCAPI authetication is used here. -
-
- Delegation - None
Connection - The NM XMLRPC server listens locally on every PlanetLab node at http://localhost:812. - The NM XMLRPC server can be accessed remotely using an SSH connection through the nm-controller account. Rather than a standard shell, a special command is run that forwards all standard input to the local XMLRPC server, essentially XML-RPC over ssh. + The Admin-Mon XMLRPC server listens at http://monitor.planet-lab.org:8082. + The XMLRPC server can be accessed remotely using a standard Python XMLRPC shell.
- An Example using the PLC and NM API + An Example using the PLC and Admin-Mon API + + Access to the API is via standard XMLRPC. A simple example is below. - The nm-controller slice is given a stub account such that it can - be accessed over ssh. So rather than logging into NM server listens - locally on every PlanetLab node at http://localhost:812. - - -controller_slice_fields = {'name' : 'princeton_mycontroller', - 'instantiation' : 'nm-controller', - 'url' : 'http://www.yourhost.com', - 'description' : 'a brief description of this slice.', } -controller_slice_id = api.AddSlices(plauth, controller_slice_fields) +import xmlrpclib +auth = {'Username' : API_AUTH_USER, + 'AuthMethod' : 'password', + 'AuthString' : API_AUTH_PASSWORD} +api = xmlrpclib.Server(API_SERVER, verbose=False, allow_none=True) + +if api.upAndRunning(): + for i in api.getSiteStatus(auth): + print i - After this, the controller owner, should both add users and nodes to - this slice. As well, the controller slice is created using the standard - PlanetLab and NM mechanism. So, wait at least 15 minutes before attempting - to access the controller slice on any node. - - Subsequently, slices that will be delegated to this controller will - be registered at PLC. An example follows. - - - -delegated_slice_fields = {'name' : 'anothersite_mydelegated', - 'instantiation' : 'delegated', - 'url' : 'http://www.yourhost.com', - 'description' : 'a brief description of this slice.', } -delegated_slice_id = api.AddSlices(plauth, delegated_slice_fields) - -# Get ticket for this slice. -ticket = api.GetSliceTicket(plauth, "princetondsl_solteszdelegated") - - - After the slice is registered with PLC, and your application has the - Ticket, the last step is to redeem the ticket by presenting it to the NM - through the nm-controller account. The following code formats the message - correctly. - - -# generate an XMLRPC request. -print xmlrpclib.dumps((ticket,), 'Ticket') - - - Finally, this message must be sent to the NM using the controller - account. It should be possible to create a program that creates the ssh - connection or to use a library that does this automatically such as: - pyXMLRPCssh - - - - Or, you could use something much simpler. Assuming the output from - dumps() above, is saved to a file called - ticket.txt, you could run a command like: - - - -cat ticket.txt | ssh princeton_mycontroller@mynode.someuniversity.edu - - - Alternately, - - -p = subprocess.Popen(['/usr/bin/ssh', 'princeton_mycontroller@mynode.someuniversity.edu'], - stdin=subprocess.PIPE, stdout=subprocess.PIPE) -print >>p.stdin, xmlrpclib.dumps((ticket,), 'Ticket') -p.stdin.close() -print xmlrpclib.loads(p.stdout.read()) -p.wait() - - - The following is a stub to use as you would use the current - xmlrpclib.Server() object, but redirects the connection of SSH. - - -"""XML-RPC over SSH. - - To use, create an XmlRpcOverSsh object like so: - >>> api = XmlRpcOverSsh('princeton_deisenst@planetlab-1.cs.princeton.edu') - and call methods as with the normal xmlrpclib.ServerProxy interface. -""" - -from subprocess import PIPE, Popen -from xmlrpclib import Fault, dumps, loads - -__all__ = ['XmlRpcOverSsh'] - - -class XmlRpcOverSsh: - def __init__(self, userAtHost): - self.userAtHost = userAtHost - - def __getattr__(self, method): - return _Method(self.userAtHost, method) - - -class _Method: - def __init__(self, userAtHost, method): - self.userAtHost = userAtHost - self.method = method - - def __call__(self, *args): - p = Popen(['ssh', self.userAtHost], stdin=PIPE, stdout=PIPE) - stdout, stderr = p.communicate(dumps(args, self.method)) - if stderr: - raise Fault(1, stderr) - else: - return loads(stdout) - -