简体   繁体   English

Argo 工作流中的动态“扇入”

[英]Dynamic "Fan In" in Argo Workflows

Argo permits the dynamic generation of parallel workflow steps based on outputs from previous steps. Argo 允许根据先前步骤的输出动态生成并行工作流步骤。

An example of this dynamic workflow generation is provided here: https://github.com/argoproj/argo/blob/master/examples/loops-param-result.yaml此处提供了此动态工作流生成的示例: https : //github.com/argoproj/argo/blob/master/examples/loops-param-result.yaml

I'm trying to create a similar workflow with a final 'fan-in' step that will read outputs from the dynamically created parallel steps.我正在尝试使用最终的“扇入”步骤创建一个类似的工作流程,该步骤将从动态创建的并行步骤中读取输出。 Here's a stab at it:这是一个尝试:

apiVersion: argoproj.io/v1alpha1
kind: Workflow
metadata:
  generateName: loops-param-result-
spec:
  entrypoint: loop-param-result-example
  templates:
  - name: loop-param-result-example
    steps:
    - - name: generate
        template: gen-number-list
    - - name: write
        template: output-number
        arguments:
          parameters:
          - name: number
            value: "{{item}}"
        withParam: "{{steps.generate.outputs.result}}"
    - - name: fan-in
        template: fan-in
        arguments:
          parameters:
          - name: numbers
            value: "{{steps.write.outputs.parameters.number}}"

  - name: gen-number-list
    script:
      image: python:alpine3.6
      command: [python]
      source: |
        import json
        import sys
        json.dump([i for i in range(20, 31)], sys.stdout)

  - name: output-number
    inputs:
      parameters:
      - name: number
    container:
      image: alpine:latest
      command: [sh, -c]
      args: ["echo {{inputs.parameters.number}} > /tmp/number.txt"]
    outputs:
      parameters:
        - name: number
          valueFrom:
            path: /tmp/number.txt

  - name: fan-in
    inputs:
      parameters:
        - name: numbers
    container:
      image: alpine:latest
      command: [sh, -c]
      args: ["echo received {{inputs.parameters.numbers}}"]

I'm able to submit this workflow, and it runs successfully.我能够提交此工作流程,并且它运行成功。 Unfortunately, the output of the final fan-in step looks like this:不幸的是,最终fan-in步骤的输出如下所示:

fan-in: received {{steps.write.outputs.parameters.number}}

The value for the input numbers parameter is not being interpolated.未插入输入numbers参数的值。 Any ideas about how to get this working?关于如何让这个工作的任何想法?

Aggregated step output parameters are accessible via steps.STEP-NAME.outputs.parameters .聚合步骤输出参数可通过steps.STEP-NAME.outputs.parameters访问。 It's not possible to access an aggregated set of outputs for one parameter by name.无法按名称访问一个参数的一组聚合输出。

This slight change to your workflow should get you what you need:对您的工作流程的这种轻微更改应该可以满足您的需求:

apiVersion: argoproj.io/v1alpha1
kind: Workflow
metadata:
  generateName: loops-param-result-
spec:
  entrypoint: loop-param-result-example
  templates:
  - name: loop-param-result-example
    steps:
    - - name: generate
        template: gen-number-list
    - - name: write
        template: output-number
        arguments:
          parameters:
          - name: number
            value: "{{item}}"
        withParam: "{{steps.generate.outputs.result}}"
    - - name: fan-in
        template: fan-in
        arguments:
          parameters:
          - name: numbers
            value: "{{steps.write.outputs.parameters}}"

  - name: gen-number-list
    script:
      image: python:alpine3.6
      command: [python]
      source: |
        import json
        import sys
        json.dump([i for i in range(20, 31)], sys.stdout)

  - name: output-number
    inputs:
      parameters:
      - name: number
    container:
      image: alpine:latest
      command: [sh, -c]
      args: ["echo {{inputs.parameters.number}} > /tmp/number.txt"]
    outputs:
      parameters:
        - name: number
          valueFrom:
            path: /tmp/number.txt

  - name: fan-in
    inputs:
      parameters:
        - name: numbers
    container:
      image: alpine:latest
      command: [sh, -c]
      args: ["echo received {{inputs.parameters.numbers}}"]

The only change was to remove .number from {{steps.write.outputs.parameters.number}} .唯一的变化是从{{steps.write.outputs.parameters.number}}删除.number

This is the new output:这是新的输出:

received [{number:20},{number:21},{number:22},{number:23},{number:24},{number:25},{number:26},{number:27},{number:28},{number:29},{number:30}]

Here is the GitHub issue where output parameter aggregation was discussed/created .这是讨论/创建输出参数聚合GitHub 问题

I've put in an enhancement proposal for accessing aggregated output parameters by name.我提出了一个按名称访问聚合输出参数的增强建议

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM