You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 7 Next »

We assume that we have a job in a job chain, to be executed on a JobScheduler Agent.
This requires a process_class that is assigned to the job.

Please read here to know how you create the process class for a JobScheduler Agent and how you assign it to a job.

Now we assume that we have multiple JobScheduler Agents and we want that a job executes on different JobScheduler Agents depending on parameters.

 *Create a process class (e.g. with the name _agents_) in JOE with {*}empty{*} values for _host_ and _port_.
 The values for host and port are set dynamically.
 So you get the following configuration file _./config/live/agents.process_class.xml_:
 <?xml version="1.0" encoding="ISO-8859-1"?>
 
 <process_class max_processes="30"/>  
  • Assign the process class to the order job in JOE. In this example the job is named shellOnDynamicAgent and calls hostname as shell command.
     So you get the following configuration file _./config/live/shellOnDynamicAgent.job.xml_:
    
     <?xml version="1.0" encoding="ISO-8859-1"?>
     
     <job process_class="agents" order="yes" stop_on_error="no">
         <script language="shell">
             <![CDATA[
     #! /bin/sh
     # returns the hostname of the agent
     hostname
             ]]>
         </script>
         <run_time/>
     </job>  
    
  • Create the following job (e.g. setAgent) and put it into the job chain as the forerunner of the agent job.
     This job change the process_class setting of the successor job in the job chain according the order parameter _agent_host_ and _agent_port_.
    
    <?xml version="1.0" encoding="ISO-8859-1"?>
    
    <job  order="yes" stop_on_error="no">
        <params />
    
        <script  language="javascript">
            <![CDATA[
    function spooler_process()\{
    
    	var curOrder = spooler_task.order;
    	var agentHost = curOrder.params.value('agent_host');
    	var agentPort = curOrder.params.value('agent_port');
    	var nextJob = curOrder.job_chain_node.next_node.job;
    	spooler_log.info("Params agentHost:agentPort = "+agentHost+":"+agentPort);
    	spooler_log.info("before: "+nextJob.process_class.remote_scheduler);
            nextJob.process_class.remote_scheduler = agentHost+":"+agentPort;
    	spooler_log.info("after: "+nextJob.process_class.remote_scheduler);
    	return true;
    \}
            ]]>
        </script>
    
        <run_time />
    </job>
    
  • Put these jobs into a job chain (e.g. jobChainWithAgentJob)
     So you have the configuration file _./config/live/jobChainWithAgentJob.job_chain.xml_:
    
    <?xml version="1.0" encoding="ISO-8859-1"?>
    
    <job_chain  orders_recoverable="yes" visible="yes">
        <job_chain_node  state="setAgent" job="setAgent" next_state="callAgent" error_state="error"/>
        <job_chain_node  state="callAgent" job="shellOnDynamicAgent" next_state="success" error_state="error"/>
        <job_chain_node  state="success"/>
        <job_chain_node  state="error"/>
    </job_chain> 
    
  • Add an order to the job chain jobChainWithAgentJob for each JobScheduler Agent you want.
     For example one agent is on HostA with port 4444 and another agent is on HostB with port 4444.
     The orders must have the parameter _agent_host_ and _agent_port_.
    
     So you have the configuration files _./config/live/jobChainWithAgentJob,hostA-4444.order.xml_ and _./config/live/jobChainWithAgentJob,hostB-4444.order.xml_  :
    
    <?xml version="1.0" encoding="ISO-8859-1"?>
    
    <order>
        <params >
            <param  name="agent_host" value="HostA"/>
            <param  name="agent_port" value="4444"/>
        </params>
        <run_time/>
    </order>
    
    <?xml version="1.0" encoding="ISO-8859-1"?>
    
    <order>
        <params >
            <param  name="agent_host" value="HostB"/>
            <param  name="agent_port" value="4444"/>
        </params>
        <run_time/>
    </order>
    
  • No labels