Search code examples
rundeck

Referencing json list value created in Rundeck Data Workflow step


Rundeck job: When I create data in data workflow step as json list

{
"repo": ["repo1","repo2","repo3"],
"myrepo": "repo4"
}

how can I access the elements in the list from inline script in next step?

@stub.repo[1]@

doesn't work

@stub.myrepo@

works fine

Data Workflow step executed

Script:

echo "value: @stub.repo[1]]@"
echo "value2: @stub.myrepo@"

Result:

value: 
value2: repo4

Solution

  • The easiest way to catch that array is to use the jq-JSON mapper log filter plugin in any step like the command step or script step (here are the releases, here is how to install the plugin, and here how Log filters works).

    Using this plugin you can use the array positions directly, e.g: ${data.data.0}, ${data.data.1}, etc.

    Job definition example with your JSON output for testing.

    - defaultTab: summary
      description: ''
      executionEnabled: true
      group: JSON
      id: f0d2843f-8de3-4984-a9ae-2fd7ab3963ae
      loglevel: INFO
      name: test-json-array
      nodeFilterEditable: false
      plugins:
        ExecutionLifecycle: null
      scheduleEnabled: true
      sequence:
        commands:
        - plugins:
            LogFilter:
            - config:
                filter: .[]
                logData: 'true'
                prefix: data
              type: json-mapper
          script: |-
            cat <<-END
            {
            "repo": ["repo1","repo2","repo3"],
            "myrepo": "repo4"
            }
            END
        - exec: echo ${data.data.0}
        keepgoing: false
        strategy: node-first
      uuid: f0d2843f-8de3-4984-a9ae-2fd7ab3963ae
    
    

    Result.

    More info about the plugin here.