Ignore:
Timestamp:
Oct 20, 2008 5:17:31 PM (16 years ago)
Author:
Ted Faber <faber@…>
Branches:
axis_example, compt_changes, info-ops, master, version-1.30, version-2.00, version-3.01, version-3.02
Children:
fa19281
Parents:
72ed6e4
Message:

add remote splitter interface

File:
1 edited

Legend:

Unmodified
Added
Removed
  • fedd/fedd_experiment_control.py

    r72ed6e4 rf4f4117  
    192192            self.scripts_dir = config.get("experiment_control",
    193193                    "federation_script_dir")
     194            self.splitter_url = config.get("experiment_control", "splitter_url")
    194195        else:
    195196            self.debug = False
    196197            self.state_filename = None
    197198            self.scripts_dir = "/users/faber/testbed/federation"
     199            self.splitter_url = None
    198200
    199201        # XXX
     
    908910                if key:
    909911                    tbparam[tb][key]= a['value']
     912
     913    def remote_splitter(self, uri, desc, master):
     914
     915        req = {
     916                'description' : { 'ns2description': desc },
     917                'master': master,
     918            }
     919
     920        # No retry loop here.  Proxy servers must correctly authenticate
     921        # themselves without help
     922        try:
     923            ctx = fedd_ssl_context(self.cert_file,
     924                    self.trusted_certs, password=self.cert_pwd)
     925        except SSL.SSLError:
     926            raise service_error(service_error.server_config,
     927                    "Server certificates misconfigured")
     928
     929        loc = feddInternalServiceLocator();
     930        port = loc.getfeddInternalPortType(uri,
     931                transport=M2Crypto.httpslib.HTTPSConnection,
     932                transdict={ 'ssl_context' : ctx })
     933
     934        # Reconstruct the full request message
     935        msg = Ns2SplitRequestMessage()
     936        msg.set_element_Ns2SplitRequestBody(
     937                pack_soap(msg, "Ns2SplitRequestBody", req))
     938
     939        try:
     940            resp = port.Ns2Split(msg)
     941        except ZSI.ParseException, e:
     942            raise service_error(service_error.req,
     943                    "Bad format message (XMLRPC??): %s" %
     944                    str(e))
     945        r = unpack_soap(resp)
     946        if r.has_key('Ns2SplitResponseBody'):
     947            r = r['Ns2SplitResponseBody']
     948            if r.has_key('output'):
     949                return r['output'].splitlines()
     950            else:
     951                raise service_error(service_error.proxy,
     952                        "Bad splitter response (no output)")
     953        else:
     954            raise service_error(service_error.proxy, "Bad splitter response")
    910955       
    911956    class current_testbed:
     
    14081453            raise service_error(service_error.req, "No master testbed label")
    14091454       
    1410        
    1411         tclcmd = [self.tclsh, self.tcl_splitter, '-s', '-x',
    1412             str(self.muxmax), '-m', master, pid, gid, eid, tclfile]
    1413         tclparser = Popen(tclcmd, stdout=PIPE)
     1455        if self.splitter_url:
     1456            split_data = self.remote_splitter(self.splitter_url, file_content,
     1457                    master)
     1458        else:
     1459            tclcmd = [self.tclsh, self.tcl_splitter, '-s', '-x',
     1460                str(self.muxmax), '-m', master, pid, gid, eid, tclfile]
     1461            tclparser = Popen(tclcmd, stdout=PIPE)
     1462            split_data = tclparser.stdout
    14141463
    14151464        allocated = { }     # Testbeds we can access
     
    14321481
    14331482        # Worling on the split data
    1434         for line in tclparser.stdout:
     1483        for line in split_data:
    14351484            line = line.rstrip()
    14361485            if parse_current_testbed(line, master, allocated, tbparams):
Note: See TracChangeset for help on using the changeset viewer.