Argo Workflow throwing '/bin/sh: arithmetic syntax error'

Viewed 65

I am new to using Argo Workflows. I have written down a sample workflow for demo purposes. Below is the attached workflow YAML in which I am facing this issue in the last step. The last step sayHello is erroring out with exit status 2 and the logs show up the error to be :

'/bin/sh: arithmetic syntax error'

apiVersion: argoproj.io/v1alpha1
kind: Workflow
metadata:
  name: program-1-prints
spec:
  entrypoint: main
  templates:
    - name: main
      steps:
        - - name: addTwoNos
            template: addTwoNosTemplate
            arguments:
              parameters:
                - name: a
                  value: '2'
                - name: b
                  value: '4'
        - - name: addTenToResult
            template: addTwoNosTemplate
            arguments:
              parameters:
                - name: a
                  value: '{{steps.addTwoNos.outputs.result}}'
                - name: b
                  value: '10'
        - - name: sayHello
            template: sayHello
            when: '{{steps.addTenToResult.outputs.result}} > 10'
    - name: addTwoNosTemplate
      inputs:
        parameters:
          - name: a
          - name: b
      container:
        image: 'alpine:latest'
        command:
          - sh
          - '-c'
        args:
          - 'echo $(( {{inputs.parameters.a}} + {{inputs.parameters.b}} ))'
    - name: sayHello
      inputs:
        parameters:
          - name: result
            value: '{{steps.addTenToResult.outputs.result}}'
      container:
        image: 'alpine:latest'
        command:
          - sh
          - '-c'
        args:
          - 'echo $(( {{inputs.parameters.result}} ))'
1 Answers

The result input to the sayHello template must be passed explicitly from the third step of the main template.

steps.addTenToResult.outputs.result has no meaning in the sayHello template definition. Variables starting with steps. only have meaning in steps templates (i.e. templates with the steps field populated, like in main).

apiVersion: argoproj.io/v1alpha1
kind: Workflow
metadata:
  name: program-1-prints
spec:
  entrypoint: main
  templates:
    - name: main
      steps:
        - - name: addTwoNos
            template: addTwoNosTemplate
            arguments:
              parameters:
                - name: a
                  value: '2'
                - name: b
                  value: '4'
        - - name: addTenToResult
            template: addTwoNosTemplate
            arguments:
              parameters:
                - name: a
                  value: '{{steps.addTwoNos.outputs.result}}'
                - name: b
                  value: '10'
        - - name: sayHello
            template: sayHello
            when: '{{steps.addTenToResult.outputs.result}} > 10'
            arguments:
              parameters:
                - name: result
                  value: '{{steps.addTenToResult.outputs.result}}'
    - name: addTwoNosTemplate
      inputs:
        parameters:
          - name: a
          - name: b
      container:
        image: 'alpine:latest'
        command:
          - sh
          - '-c'
        args:
          - 'echo $(( {{inputs.parameters.a}} + {{inputs.parameters.b}} ))'
    - name: sayHello
      inputs:
        parameters:
          - name: result
      container:
        image: 'alpine:latest'
        command:
          - sh
          - '-c'
        args:
          - 'echo $(( {{inputs.parameters.result}} ))'
Related