[英]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.