Using Argo to execute workflows last week, I met some problems and also find the solutions.
1. Can’t parse “outputs”
By submitting this YAML file:
apiVersion: argoproj.io/v1alpha1 kind: Workflow metadata: generateName: robin-test- spec: entrypoint: firststep templates: - name: firststep steps: - - name: generate template: generate-run - - name: execution template: execution-run arguments: parameters: - name: pair value: "{{item}}" withParam: "{{steps.generate.outputs.result}}" - name: generate-run container: image: gcr.io/robin/feature:latest command: ["bash", "-c"] args: ["cat my.json"] - name: execution-run inputs: parameters: - name: pair container: image: docker/whalesay command: [cowsay] args: ["{{inputs.parameters.pair}}"]
I met the error:
Failed to submit workflow: templates.firststep.steps[1].execution failed to resolve {{steps.generate.outputs.result}}]
Why the Argo could’t recognize the “steps.generate.outputs.result”? Because only “source” could have a default “output”, not “args”. So the template “generate-run” should be
... - name: generate-run container: image: gcr.io/robin/feature:latest command: ["bash", "-c"] source: | cat my.json
2. Can’t parse parameters from JSON
If the Argo report:
withParam value could not be parsed as a JSON list: xxx
it means the “output” of the previous step isn’t in standard JSON format. So make sure you have pretty JSON format output. For python, it should be like:
... - name: generate-run container: image: gcr.io/robin/feature:latest command: ["bash", "-c"] source: | python -c "import json; json.dump([{'id': key, 'name': value} for key, value in dictionary], sys.stdout)"