ARGO中循环任务的输出是什么?

根据 Argo DAG template documentation

tasks.<TASKNAME>.outputs.parameters :当先前的任务使用'withItems'或'withParams'时,其中包含每个调用的输出参数映射的JSON数组

尝试以下简单工作流程:

apiVersion: argoproj.io/v1alpha1
kind: Workflow
metadata:
  generateName: test-workflow-
spec:
  entrypoint: start
  templates:
  - name: start
    dag:
      tasks:
        - name: with-items
          template: hello-letter
          arguments:
            parameters:
            - name: input-letter
              value: "{{item}}"
          withItems:
          - A
          - B
          - C
        - name: show-result
          dependencies:
          - with-items
          template: echo-result
          arguments:
            parameters:
            - name: input
              value: "{{tasks.with-items.outputs.parameters}}"

  - name: hello-letter
    inputs:
      parameters:
      - name: input-letter
    outputs:
      parameters:
      - name: output-letter
        value: "{{inputs.parameters.input-letter}}"
    script:
      image: alpine
      command: ["sh"]
      source: |
        echo "{{inputs.parameters.input-letter}}"

  - name: echo-result
    inputs:
      parameters:
      - name: input
    outputs:
      parameters:
      - name: output
        value: "{{inputs.parameters.input}}"
    script:
      image: alpine
      command: ["sh"]
      source: |
        echo {{inputs.parameters.input}}

我会收到以下错误: 无法提交工作流:templates.start.tasks.show-- result无法解决{{tasks.with-items.outputs.parameters}}}

Argo版本(在Minikube群集中运行)

argo: v2.10.0+195c6d8.dirty
  BuildDate: 2020-08-18T23:06:32Z
  GitCommit: 195c6d8310a70b07043b9df5c988d5a62dafe00d
  GitTreeState: dirty
  GitTag: v2.10.0
  GoVersion: go1.13.4
  Compiler: gc
  Platform: darwin/amd64

Argo 2.8.1中的同样错误,尽管使用 .result 而不是 .parameters 中的 [A,B,C] ,在show-result任务中工作正常(结果为 ```

  • name: show-result
    dependencies:
    • with-items
      template: echo-result
      arguments:
      parameters:
      • name: input
        value: "{{tasks.with-items.outputs.result}}"

STEP TEMPLATE PODNAME DURATION MESSAGE
⚠ test-workflow-parallelism-xngg4 start
├-✔ with-items(0:A) hello-letter test-workflow-parallelism-xngg4-3307649634 6s
├-✔ with-items(1:B) hello-letter test-workflow-parallelism-xngg4-768315880 7s
├-✔ with-items(2:C) hello-letter test-workflow-parallelism-xngg4-2631126026 9s
└-⚠ show-result echo-result invalid character 'A' looking for beginning of value


结果:
    - name: show-result
      dependencies:
      - with-items
      template: echo-result
      arguments:
        parameters:
        - name: input
          value: "{{tasks.with-items.outputs.parameters.output-letter}}"

我还试图将表演归因任务更改为:

STEP TEMPLATE PODNAME DURATION MESSAGE
✔ test-workflow-parallelism-qvp72 start
├-✔ with-items(0:A) hello-letter test-workflow-parallelism-qvp72-4221274474 8s
├-✔ with-items(1:B) hello-letter test-workflow-parallelism-qvp72-112866000 9s
├-✔ with-items(2:C) hello-letter test-workflow-parallelism-qvp72-1975676146 6s
└-✔ show-result echo-result test-workflow-parallelism-qvp72-3460867848 3s


没有任何错误执行:

argo logs test-workflow-parallelism-qvp72
test-workflow-parallelism-qvp72-1975676146: 2020-08-25T14:52:50.622496755Z C
test-workflow-parallelism-qvp72-4221274474: 2020-08-25T14:52:52.228602517Z A
test-workflow-parallelism-qvp72-112866000: 2020-08-25T14:52:53.664320195Z B
test-workflow-parallelism-qvp72-3460867848: 2020-08-25T14:52:59.628892135Z {{tasks.with-items.outputs.parameters.output-letter}}



但是参数未被值所取代:

我不明白将是循环输出的期望!我错过了什么?有没有办法找出正在发生的事情?
stack overflow What is the output of loop task in argo?
原文答案

答案:

作者头像

这是我遇到的一个很常见的问题,到目前为止,我还没有在任何错误报告或功能文档中遇到过这个问题,因此尚未确定这是一个功能还是错误。然而,argo 显然无法执行“map-reduce”流 OOB。

我发现的唯一“真正”解决方法是附加一个工件,将 with-items 任务输出写入它,然后将其传递到下一步,您将在代码/脚本中自己“减少”从工件中读取值。

    • 编辑 - - -

正如另一个答案所提到的,这确实是一个 bug 已针对最新版本解决,这解决了您作为选项提到的 parameters 的使用,但 outputs.result 仍然会导致错误修复后的错误。

作者头像

有一个 bug ,该 kubectl apply 在Argo版本3.2.5之前引起了此错误。升级到最新,然后重试。

看来问题仅在CLI中。我用 argo submit 提交了工作流,它运行正常。该错误仅以 argo submit 出现。

当我升级到3.2.6时,解决了 错误。