![](/img/trans.png)
[英]Argo Workflow not passing input parameters to WorkflowTemplate
[英]Unable to pass output parameters from one workflowTemplate to a workflow via another workflowTemplate
我有两个工作流模板generate-output
, lib-read-outputs
和一个工作流output-paramter
,如下所示
generate-output.yaml
apiVersion: argoproj.io/v1alpha1
kind: WorkflowTemplate
metadata:
name: generate-output
spec:
entrypoint: main
templates:
- name: main
dag:
tasks:
# Generate Json for Outputs
- name: read-outputs
arguments:
parameters:
- name: outdata
value: |
{
"version": 4,
"terraform_version": "0.14.11",
"serial": 0,
"lineage": "732322df-5bd43-6e92-8f46-56c0dddwe83cb4",
"outputs": {
"key_alias_arn": {
"value": "arn:aws:kms:us-west-2:123456789:alias/tetsing-key",
"type": "string",
"sensitive": true
},
"key_arn": {
"value": "arn:aws:kms:us-west-2:123456789:alias/tetsing-key",
"type": "string",
"sensitive": true
}
}
}
template: retrieve-outputs
# Create Json
- name: retrieve-outputs
inputs:
parameters:
- name: outdata
script:
image: 145565074481.dkr.ecr.us-west-2.amazonaws.com/infssdev-or-infpl-python:v3
command: [python]
env:
- name: OUTDATA
value: "{{inputs.parameters.outdata}}"
source: |
import json
import os
OUTDATA = json.loads(os.environ["OUTDATA"])
with open('/tmp/templates_lst.json', 'w') as outfile:
outfile.write(str(json.dumps(OUTDATA['outputs'])))
volumeMounts:
- name: out
mountPath: /tmp
volumes:
- name: out
emptyDir: { }
outputs:
parameters:
- name: message
valueFrom:
path: /tmp/templates_lst.json
lib-read-outputs.yaml
apiVersion: argoproj.io/v1alpha1
kind: WorkflowTemplate
metadata:
name: lib-read-outputs
spec:
entrypoint: main
templates:
- name: main
dag:
tasks:
# Read Outputs
- name: lib-wft
templateRef:
name: generate-output
template: main
output-paramter.yaml
apiVersion: argoproj.io/v1alpha1
kind: Workflow
metadata:
generateName: output-paramter-
spec:
entrypoint: main
templates:
- name: main
dag:
tasks:
# Json Output data task1
- name: wf
templateRef:
name: lib-read-outputs
template: main
- name: lib-wf2
dependencies: [wf]
arguments:
parameters:
- name: outputResult
value: "{{tasks.wf.outputs.parameters.message}}"
template: whalesay
- name: whalesay
inputs:
parameters:
- name: outputResult
container:
image: docker/whalesay:latest
command: [cowsay]
args: ["{{inputs.parameters.outputResult}}"]
我正在尝试通过lib-read-outputs
将工作流模板生成generate-output
中生成的 output 参数传递给工作流output-paramter
当我执行它们时,它给出以下错误 - Failed: invalid spec: templates.main.tasks.lib-wf2 failed to resolve {{tasks.wf.outputs.parameters.message}}
即使只有一个子模板,DAG 和步骤模板也不会自动生成其子模板的输出。
例如,这里的no-outputs
模板不会生成 output,即使它调用的模板确实具有 output。
apiVersion: argoproj.io/v1alpha1
kind: WorkflowTemplate
spec:
templates:
- name: no-outputs
dag:
tasks:
- name: get-an-artifact
template: get-an-artifact
如果您考虑具有多个任务的 DAG 模板,那么缺少输出是有道理的:
apiVersion: argoproj.io/v1alpha1
kind: WorkflowTemplate
spec:
templates:
- name: no-outputs
dag:
tasks:
- name: get-an-artifact
template: get-an-artifact
- name: get-another-artifact
depends: get-an-artifact
template: get-another-artifact
no-outputs
输出应该产生哪个任务的输出? 由于不清楚,DAG 和步骤模板在默认情况下根本不会产生输出。
您可以将模板视为函数。 您不会期望 function 隐式返回它调用的 function 的 output。
def get_a_string():
return "Hello, world!"
def call_get_a_string():
get_a_string()
print(call_get_a_string()) # This prints nothing.
您可以通过设置其outputs
字段来使 DAG 或步骤模板转发output。
apiVersion: argoproj.io/v1alpha1
kind: WorkflowTemplate
metadata:
name: get-artifacts-wftmpl
spec:
templates:
- name: get-artifacts
dag:
tasks:
- name: get-an-artifact
template: get-an-artifact
- name: get-another-artifact
depends: get-an-artifact
template: get-another-artifact
# This is the critical part!
outputs:
artifacts:
- name: artifact-1
from: "{{tasks.get-an-artifact.outputs.artifacts.artifact-name}}"
- name: artifact-2
from: "{{tasks.get-another-artifact.outputs.artifacts.artifact-name}}"
---
apiVersion: argoproj.io/v1alpha1
kind: Workflow
spec:
templates:
- name: print-artifact
dag:
tasks:
- name: get-artifacts
templateRef:
name: get-artifacts-wftmpl
template: get-artifacts
- name: print-artifact
template: print-artifact
arguments:
outputs:
- name: artifact
from: "{{tasks.get-artifacts.outputs.artifacts.artifact-1}}"
继续 Python 类比:
def get_a_string():
return "Hello, world!"
def call_get_a_string():
return get_a_string() # Add 'return'.
print(call_get_a_string()) # This prints "Hello, world!".
在generate-output
WorkflowTemplate 的main
模板中添加一个outputs
部分,以从retrieve-outputs
模板转发 output 工件。
apiVersion: argoproj.io/v1alpha1 kind: WorkflowTemplate metadata: name: generate-output spec: entrypoint: main templates: - name: main outputs: artifacts: - name: message from: "{{tasks.read-outputs.outputs.artifacts.message}}" dag: tasks: #... the rest of the file...
在lib-read-outputs
WorkflowTemplate 的main
模板中添加一个outputs
部分,以转发generate-output
的工件。
apiVersion: argoproj.io/v1alpha1 kind: WorkflowTemplate metadata: name: lib-read-outputs spec: entrypoint: main templates: - name: main outputs: artifacts: - name: message from: "{{tasks.lib-wft.outputs.artifacts.message}}" dag: tasks: #... the rest of the file...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.