Search code examples
rundeck

Job Conditional Reports Previous Job "Never Run"


I have a Job that calls other jobs as sort of a main run-file. I execute a preliminary check, which sets some values on a management server that I have to ensure I don't get any erroneous alerts due to the updates being run.

The preliminary job executes fine, but the conditional that comes right after it, ALWAYS outputs the status of:

{{UUID}} is NOT RUNNING AND previously NEVER. Expected NOT RUNNING AND 'Succeeded'

No matter what I do, I can't figure out if either I'm doing something wrong or if I just have something misconfigured, or if the conditionals are just broken. This is a small install for my homelab of about 10 servers, so I'm running with the default database back end, not MySQL or something else, so I don't know if that's an issue.

My Rundeck detail

Rundeck version: Rundeck 3.2.8-20200608
Install type: deb
OS Name/version: Ubuntu 18.04
DB Type/version: H2? (whatever the default is)

Solution

  • Verify the job state conditional expectation, I leave an example on 3.2.8 that works. Basically Job Step Conditional expects another job last execution as successfully, anything different of that makes the condition fails.

    HelloWorld job:

    <joblist>
      <job>
        <defaultTab>nodes</defaultTab>
        <description></description>
        <executionEnabled>true</executionEnabled>
        <group>test1</group>
        <id>0bdd6fe5-addb-4051-b072-bb4430130a80</id>
        <loglevel>INFO</loglevel>
        <name>HelloWorld</name>
        <nodeFilterEditable>false</nodeFilterEditable>
        <plugins />
        <scheduleEnabled>true</scheduleEnabled>
        <sequence keepgoing='false' strategy='node-first'>
          <command>
            <exec>echo "hello world"</exec>
          </command>
        </sequence>
        <uuid>0bdd6fe5-addb-4051-b072-bb4430130a80</uuid>
      </job>
    </joblist>
    

    CheckerJob (With a Job Step Conditional step, expects that HelloWorld job with a successful execution):

    <joblist>
      <job>
        <defaultTab>nodes</defaultTab>
        <description></description>
        <executionEnabled>true</executionEnabled>
        <group>test1</group>
        <id>c6f2be75-81e8-4f8e-ba35-234d5c8a97d6</id>
        <loglevel>INFO</loglevel>
        <name>CheckerJob</name>
        <nodeFilterEditable>false</nodeFilterEditable>
        <plugins />
        <scheduleEnabled>true</scheduleEnabled>
        <sequence keepgoing='false' strategy='node-first'>
          <command>
            <exec>echo "starting..."</exec>
          </command>
          <command>
            <step-plugin type='job-state-conditional'>
              <configuration>
                <entry key='condition' value='Equals' />
                <entry key='executionState' value='Succeeded' />
                <entry key='fail' value='true' />
                <entry key='halt' value='true' />
                <entry key='jobName' value='test1/HelloWorld' />
                <entry key='jobProject' value='${job.project}' />
                <entry key='jobUUID' value='0bdd6fe5-addb-4051-b072-bb4430130a80' />
                <entry key='running' value='false' />
              </configuration>
            </step-plugin>
          </command>
        </sequence>
        <uuid>c6f2be75-81e8-4f8e-ba35-234d5c8a97d6</uuid>
      </job>
    </joblist>
    

    If the job never runs before.

    If the job runs before (Job State Conditional expectation).

    Another way

    If you want to run Job State conditional in the same parent job, you need an individual execution of the "child" job, the way to do that is executing that job "externally" (using RD-CLI or API, I leave an example):

    HelloWord:

    <joblist>
      <job>
        <defaultTab>nodes</defaultTab>
        <description></description>
        <executionEnabled>true</executionEnabled>
        <id>dd33434e-5b6e-40e1-88b0-e9b5b52a3801</id>
        <loglevel>INFO</loglevel>
        <name>HelloWorld</name>
        <nodeFilterEditable>false</nodeFilterEditable>
        <plugins />
        <scheduleEnabled>true</scheduleEnabled>
        <sequence keepgoing='false' strategy='node-first'>
          <command>
            <exec>echo "hello world!"</exec>
          </command>
        </sequence>
        <uuid>dd33434e-5b6e-40e1-88b0-e9b5b52a3801</uuid>
      </job>
    </joblist>
    

    CheckerFakeParentJob (Executes HelloWorld vi RD-CLI and evaluate that execution later):

    <joblist>
      <job>
        <defaultTab>nodes</defaultTab>
        <description></description>
        <executionEnabled>true</executionEnabled>
        <id>a90ec790-b856-4f00-8b66-2f37da1d00cb</id>
        <loglevel>INFO</loglevel>
        <name>CheckerFakeParentJob</name>
        <nodeFilterEditable>false</nodeFilterEditable>
        <plugins />
        <scheduleEnabled>true</scheduleEnabled>
        <sequence keepgoing='false' strategy='node-first'>
          <command>
            <exec>echo "starting"</exec>
          </command>
          <command>
            <fileExtension>.sh</fileExtension>
            <script><![CDATA[# print a message
    echo "running HelloWorld job"
    
    # run the hello world job via RD-CLI to get the individual execution and evaluate later
    rd run -j HelloWorld -p ProjectEXAMPLE
    
    # some time depending of job
    sleep 3
    
    # print a message
    echo "done"]]></script>
            <scriptargs />
            <scriptinterpreter>/bin/bash</scriptinterpreter>
          </command>
          <command>
            <step-plugin type='job-state-conditional'>
              <configuration>
                <entry key='condition' value='Equals' />
                <entry key='executionState' value='Succeeded' />
                <entry key='fail' value='true' />
                <entry key='halt' value='true' />
                <entry key='jobUUID' value='dd33434e-5b6e-40e1-88b0-e9b5b52a3801' />
                <entry key='running' value='false' />
              </configuration>
            </step-plugin>
          </command>
        </sequence>
        <uuid>a90ec790-b856-4f00-8b66-2f37da1d00cb</uuid>
      </job>
    </joblist>
    

    Result here.

    You have more information here.

    EDIT: If you're referencing a Job Reference Step based workflow, you must take the parent job status (even the child job is executed through parent job).