| <?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="<name>(.*)</name><value>(.*)</value>"/> |
| <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">.*<job>([\d]*):([\w]*)</job>.*</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">.*<job>([\d]*):([\w]*)</job>.*</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">.*<job>([\d]*):([\w]*)</job>.*</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> |