blob: 44df0139b0d1b6560954ff91f8082526a6d64e96 [file] [log] [blame]
<?xml version="1.0" encoding="UTF-8"?>
<resource-manager-builder xmlns="http://org.eclipse.ptp/rm" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="resource_manager_type.xsd" name="test-parsers">
<control-data>
<!-- EXAMPLE 1: output is a list of line-separated queue names to be assigned
to the known property "available-queues" -->
<start-up-command name="test01ParseQstat">
<arg/>
<stdout-parser delim="\n">
<target ref="queues">
<match>
<expression>([\w\d]+)</expression>
<add field="value">
<entry valueGroup="1"/>
</add>
</match>
</target>
</stdout-parser>
</start-up-command>
<!-- EXAMPLE 2: output is to be searched for its final line which should
contain a job id of the form "[digits].[chars]" -->
<start-up-command name="test02JobId" waitForId="true">
<arg/>
<stdout-parser delim="\n" all="true" save="1">
<target ref="@jobId">
<match>
<expression>([\d]+)([.])(.+)[\s]+.*</expression>
<append field="name">
<entry valueGroup="1"/>
<entry valueGroup="2"/>
<entry valueGroup="3"/>
</append>
<set field="default">
<entry valueGroup="1"/>
</set>
<set field="value">
<entry value="SUBMITTED"/>
</set>
</match>
<match>
<expression>([\d]+)[.].+</expression>
<set field="name">
<entry valueGroup="0"/>
</set>
<set field="default">
<entry valueGroup="1"/>
</set>
<set field="value">
<entry value="SUBMITTED"/>
</set>
</match>
</target>
<target ref="@jobId">
<match>
<expression flags="DOTALL">.*Job not submitted.*</expression>
<set field="value">
<entry value="FAILED"/>
</set>
</match>
</target>
</stdout-parser>
<stderr-parser delim="\n">
<target ref="@jobId">
<match>
<expression>.*Job not submitted.*</expression>
<throw message="Job Submit Failed"/>
</match>
</target>
</stderr-parser>
</start-up-command>
<!-- EXAMPLE 3: indeterminate number and order of lines containing parts
of attribute definitions, but each line bearing a distinct
id (e.g., openMPI attribute discovery) -->
<start-up-command name="test03OpenMPI">
<arg/>
<stdout-parser delim="\n">
<target type="attribute">
<match>
<expression>mca:.*:param:([^:]*):value:(.*)</expression>
<set field="name">
<entry valueGroup="1"/>
</set>
<set field="visible">
<entry value="true"/>
</set>
<set field="value">
<entry valueGroup="2"/>
</set>
</match>
<match>
<expression>mca:.*:param:([^:]*):status:(.*)</expression>
<set field="status">
<entry valueGroup="2"/>
</set>
</match>
<match>
<expression>mca:.*:param:([^:]*):help:(.*)</expression>
<set field="tooltip">
<entry valueGroup="2"/>
</set>
</match>
<test op="EQ">
<value>#status</value>
<value>read-only</value>
<set field="readOnly">
<entry value="true"/>
</set>
<else>
<set field="readOnly">
<entry value="false"/>
</set>
</else>
</test>
</target>
<target type="attribute">
<match>
<expression>ompi:version:full:([\d]+)[.]([\d]+).*</expression>
<set field="name">
<entry value="ompi_major_version"/>
</set>
<set field="value">
<entry valueGroup="1"/>
</set>
<set field="visible">
<entry value="true"/>
</set>
<set field="readOnly">
<entry value="true"/>
</set>
<set field="name" forceNewObject="true">
<entry value="ompi_minor_version"/>
</set>
<set field="value">
<entry valueGroup="2"/>
</set>
<set field="visible">
<entry value="true"/>
</set>
<set field="readOnly">
<entry value="true"/>
</set>
</match>
<test op="AND">
<test op="EQ">
<value>#name</value>
<value>ompi_minor_version</value>
</test>
<test op="LT">
<value>#value</value>
<value>7</value>
</test>
<throw message="Only supports Open MPI 1.7 and later"/>
</test>
</target>
<target type="attribute">
<match>
<expression>(.*):([^:]*)</expression>
<set field="name">
<entry valueGroup="1"/>
</set>
<set field="value">
<entry valueGroup="2"/>
</set>
<set field="visible">
<entry value="false"/>
</set>
<set field="readOnly">
<entry value="true"/>
</set>
</match>
</target>
</stdout-parser>
</start-up-command>
<!-- EXAMPLE 4: indeterminate number of definitions, but grouped
by caption; use of moveToTop to promote the target to the top of the list
when the caption appears -->
<start-up-command name="test04ImplicitWithTags">
<arg/>
<stdout-parser delim="\n">
<target type="property">
<match moveToTop="true">
<expression>PROPERTY</expression>
</match>
<match>
<expression>name:(.*)</expression>
<set field="name">
<entry valueGroup="1"/>
</set>
</match>
<match>
<expression>value:(.*)</expression>
<set field="value">
<entry valueGroup="1"/>
</set>
</match>
</target>
<target type="attribute">
<match moveToTop="true">
<expression>ATTRIBUTE</expression>
</match>
<match>
<expression>name:(.*)</expression>
<set field="name">
<entry valueGroup="1"/>
</set>
</match>
<match>
<expression>value:(.*)</expression>
<set field="value">
<entry valueGroup="1"/>
</set>
</match>
</target>
</stdout-parser>
</start-up-command>
<!-- EXAMPLE 5: similar to 4, but without delimiter (implicit ordering) -->
<start-up-command name="test05ImplicitOrdering">
<arg/>
<stdout-parser delim="\n">
<target type="attribute" matchAll="true">
<match>
<expression>.+</expression>
<set field="name">
<entry valueGroup="0"/>
</set>
</match>
<match>
<expression>.*</expression>
<set field="type">
<entry valueGroup="0"/>
</set>
</match>
<match>
<expression>.*</expression>
<set field="description">
<entry valueGroup="0"/>
</set>
</match>
<match>
<expression>.*</expression>
<set field="tooltip">
<entry valueGroup="0"/>
</set>
</match>
<match>
<expression>.*</expression>
<set field="value">
<entry valueGroup="0"/>
</set>
</match>
</target>
</stdout-parser>
</start-up-command>
<!-- EXAMPLE 6: similar to 4, but with indeterminate type order and using buffer + DOTALL | UNIX_LINES -->
<start-up-command name="test06ImplicitWithTagsDotall">
<arg/>
<stdout-parser maxMatchLen="32" applyToAll="true">
<target type="property">
<match>
<expression flags="DOTALL | UNIX_LINES">.*PROPERTY[\n]name:(\w*)[\n]value:([\d.-]*).*</expression>
<set field="name">
<entry valueGroup="1"/>
</set>
<set field="value">
<entry valueGroup="2"/>
</set>
</match>
</target>
<target type="property">
<match>
<expression flags="DOTALL | UNIX_LINES">.*PROPERTY[\n]value:([\d.-]*)[\n]name:(\w*).*</expression>
<set field="name">
<entry valueGroup="2"/>
</set>
<set field="value">
<entry valueGroup="1"/>
</set>
</match>
</target>
<target type="attribute">
<match>
<expression flags="DOTALL | UNIX_LINES">.*ATTRIBUTE[\n]name:(\w*)[\n]value:([\d.-]*).*</expression>
<set field="name">
<entry valueGroup="1"/>
</set>
<set field="value">
<entry valueGroup="2"/>
</set>
</match>
</target>
<target type="attribute">
<match>
<expression flags="DOTALL | UNIX_LINES">.*ATTRIBUTE[\n]value:([\d.-]*)[\n]name:(\w*).*</expression>
<set field="name">
<entry valueGroup="2"/>
</set>
<set field="value">
<entry valueGroup="1"/>
</set>
</match>
</target>
</stdout-parser>
</start-up-command>
<!-- EXAMPLE 7: indeterminate number of property definitions, but on single line -->
<start-up-command name="test07PropertyDefsSingleLine">
<arg/>
<stdout-parser delim="\n">
<target type="property">
<match>
<expression expression="&lt;name&gt;(.*)&lt;/name&gt;&lt;value&gt;(.*)&lt;/value&gt;"/>
<set field="name">
<entry valueGroup="1"/>
</set>
<set field="value">
<entry valueGroup="2"/>
</set>
</match>
</target>
</stdout-parser>
</start-up-command>
<!-- EXAMPLE 8: looking for values interspersed in the stream but which will
not exceed 32 chars -->
<start-up-command name="test08JobStates">
<arg/>
<stdout-parser maxMatchLen="32">
<target ref="jobStates">
<match>
<expression flags="DOTALL | UNIX_LINES">.*&lt;job&gt;([\d]*):([\w]*)&lt;/job&gt;.*</expression>
<put field="value">
<entry keyGroup="1" valueGroup="2"/>
</put>
</match>
</target>
</stdout-parser>
</start-up-command>
<!-- EXAMPLE 9: successive names/values, in order, but staggered -->
<start-up-command name="test09Staggered">
<arg/>
<stdout-parser delim="\n">
<target type="property">
<match>
<expression>name:(.*)</expression>
<set field="name">
<entry valueGroup="1"/>
</set>
</match>
<match>
<expression>value:(.*)</expression>
<set field="value">
<entry valueGroup="1"/>
</set>
</match>
</target>
</stdout-parser>
</start-up-command>
<!-- EXAMPLE 10: forced merge -->
<start-up-command name="test10Merged">
<arg/>
<stdout-parser delim="\n">
<target type="property">
<match>
<expression>name:(.+);value:(.+)</expression>
<set field="name">
<entry valueGroup="1"/>
</set>
<set field="value">
<entry valueGroup="2"/>
</set>
</match>
<match>
<expression>name:(.+);default:(.+)</expression>
<set field="name">
<entry valueGroup="1"/>
</set>
<set field="default">
<entry valueGroup="2"/>
</set>
</match>
</target>
</stdout-parser>
</start-up-command>
<!-- EXAMPLE 11: exit-on -->
<start-up-command name="test11ExitOn">
<arg/>
<stdout-parser maxMatchLen="32">
<target ref="jobStates">
<match>
<expression flags="DOTALL | UNIX_LINES">.*&lt;job&gt;([\d]*):([\w]*)&lt;/job&gt;.*</expression>
<put field="value">
<entry keyGroup="1" valueGroup="2"/>
</put>
</match>
</target>
<exit-on flags="DOTALL | UNIX_LINES">.*EXIT.*</exit-on>
</stdout-parser>
</start-up-command>
<!-- EXAMPLE 12: exit-after -->
<start-up-command name="test12ExitAfter">
<arg/>
<stdout-parser maxMatchLen="32">
<target ref="jobStates">
<match>
<expression flags="DOTALL | UNIX_LINES">.*&lt;job&gt;([\d]*):([\w]*)&lt;/job&gt;.*</expression>
<put field="value">
<entry keyGroup="1" valueGroup="2"/>
</put>
</match>
</target>
<exit-after flags="DOTALL | UNIX_LINES">.*EXIT.*</exit-after>
</stdout-parser>
</start-up-command>
<submit-interactive name="empty">
<arg/>
</submit-interactive>
<!-- EXAMPLE 13: get-status (use of tests) -->
<get-job-status name="get-job-status" ignoreExitStatus="true">
<arg>qstat</arg>
<arg>${ptp_rm:@jobId#name}</arg>
<stdout-parser delim="\n">
<target ref="@jobId">
<match>
<expression>[\d]+[.].+[\s]+.+[\s]+.+[\s]+.+[\s]+([A-Z])[\s]+.+</expression>
<set field="value">
<entry valueGroup="1"/>
</set>
</match>
<test op="EQ">
<value>#value</value>
<value>Q</value>
<set field="value">
<entry value="QUEUED_ACTIVE"/>
</set>
</test>
<test op="EQ">
<value>#value</value>
<value>R</value>
<set field="value">
<entry value="RUNNING"/>
</set>
</test>
<test op="EQ">
<value>#value</value>
<value>S</value>
<set field="value">
<entry value="SUSPENDED"/>
</set>
</test>
<test op="EQ">
<value>#value</value>
<value>H</value>
<set field="value">
<entry value="SYSTEM_ON_HOLD"/>
</set>
</test>
<else>
<set field="value">
<entry value="COMPLETED"/>
</set>
</else>
</target>
</stdout-parser>
<stderr-parser delim="\n">
<target ref="@jobId">
<match>
<expression>.+</expression>
<set field="value">
<entry value="COMPLETED"/>
</set>
</match>
</target>
</stderr-parser>
</get-job-status>
</control-data>
<monitor-data schedulerType="test">
<driver>
<name></name>
</driver>
</monitor-data>
</resource-manager-builder>