Skip to content
  • Leigh B. Stoller's avatar
    Here is a fun little change. Lacking native perl SSL XMLRPC tools, I · a7482569
    Leigh B. Stoller authored
    put together a little library that provides the illusion of nativeness.
    
    sslxmlrpc_client.py.in: New "rawmode" (-r) option. Instead of the
    usual command line operation, input raw XMLRPC goo and send that over
    to the server. The raw XMLRPC reply goo is spit out on stdout. In
    other words, it is up to the caller to generate the XML stuff, and
    convert back from XML to a reply structure.
    
    libxmlrpc.pm.in: A new perl library that exports one real method
    called, interestingly enough, CallMethod($$$). The first and second
    arguments are the module and method to invoke in the RPC server. The
    third argument is an arbitrary perl data structure to convert into XML
    and pass to the server. For example:
    
    	libxmlrpc::CallMethod("experiment", "state",
    	                      {"proj" => "testbed", "exp" => "myemulab"});
    
    The return value of CallMethod is whatever data structure the server
    returned, or undef if there is an internal error or if the RPC fails
    with a transport error (one of the errors in emulabclient.py).
    
    In case it is not obvious, CallMethod converts the argument to XML
    using the RPC:XML perl module, forks off a child to run
    sslxmlrpc_client.py.in in rawmode, sends it the XML on its stdin,
    reads back the XML for the reply from its stdout, and converts that to
    a perl data structure to return to the caller.
    
    The more interesting use of this new goo is to invoke the new
    "elabinelab" module in the RPC server, which exports some new methods
    to support elabinelab. The idea is that the inner boss will invoke
    routines (like setup/destroy vlans, or power cycle) using the RPC
    server, and the SSL key of the creator of the inner emulab. This will
    be described in more detail when I check in those changes.
    
    There is also a Config() method that is used to set the SSL cert path,
    debugging, verbosity, etc. You can take a look if you are interested.
    
    This can be arbitrarily fancy, but I don't need this for many things.
    a7482569