Search code examples
argo-workflows

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


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}} ))'

Solution

  • 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}} ))'