如何使用Argo工作流将前一步输出作为输入



我正试图按照以下说明格式化我的工作流程(https://argoproj.github.io/argo-workflows/workflow-inputs/#using-前一步输出作为输入(,但似乎无法正确执行。具体地说,我试图模仿";使用前一步输出作为输入";

我在下面包含了我的工作流程。在这个版本中,我添加了一个inputs.artifacts的路径,因为错误请求一个路径。我现在收到的错误是:

ATA[2022-02-28T14:14:45.933Z] Failed to submit workflow: templates.entrypoint.tasks.print1 templates.print1.inputs.artifacts.result.from not valid in inputs

有人能告诉我如何更正此工作流以使其正常工作吗?

---
{
"apiVersion": "argoproj.io/v1alpha1",
"kind": "Workflow",
"metadata": {
"annotations": {
"workflows.argoproj.io/description": "Building from the ground up",
"workflows.argoproj.io/version": ">= 3.1.0"
},
"labels": {
"workflows.argoproj.io/archive-strategy": "false"
},
"name": "data-passing",
"namespace": "sandbox"
},
"spec": {
"artifactRepositoryRef": {
"configMap": "my-config",
"key": "data"
},
"entrypoint": "entrypoint",
"nodeSelector": {
"kubernetes.io/os": "linux"
},
"parallelism": 3,
"securityContext": {
"fsGroup": 2000,
"fsGroupChangePolicy": "OnRootMismatch",
"runAsGroup": 3000,
"runAsNonRoot": true,
"runAsUser": 1000
},
"templates": [
{
"container": {
"args": [
"Hello World"
],
"command": [
"cowsay"
],
"image": "docker/whalesay:latest",
"imagePullPolicy": "IfNotPresent"
},
"name": "whalesay",
"outputs": {
"artifacts": [
{
"name": "msg",
"path": "/tmp/raw"
}
]
},
"securityContext": {
"fsGroup": 2000,
"fsGroupChangePolicy": "OnRootMismatch",
"runAsGroup": 3000,
"runAsNonRoot": true,
"runAsUser": 1000
}
},
{
"inputs": {
"artifacts": [
{
"from": "{{tasks.whalesay.outputs.artifacts.msg}}",
"name": "result",
"path": "/tmp/raw"
}
]
},
"name": "print1",
"script": {
"command": [
"python"
],
"image": "python:alpine3.6",
"imagePullPolicy": "IfNotPresent",
"source": "cat {{inputs.artifacts.result}}n"
},
"securityContext": {
"fsGroup": 2000,
"fsGroupChangePolicy": "OnRootMismatch",
"runAsGroup": 3000,
"runAsNonRoot": true,
"runAsUser": 1000
}
},
{
"dag": {
"tasks": [
{
"name": "whalesay",
"template": "whalesay"
},
{
"arguments": {
"artifacts": [
{
"from": "{{tasks.whalesay.outputs.artifacts.msg}}",
"name": "result",
"path": "/tmp/raw"
}
]
},
"dependencies": [
"whalesay"
],
"name": "print1",
"template": "print1"
}
]
},
"name": "entrypoint"
}
]
}
}
...

print1的工件参数中,应该只放置namefrom参数

例如:

- name: print1
arguments:
artifacts: [{name: results, from: "{{tasks.whalesay.outputs.artifacts.msg}}"}]

然后在模板声明中,应该将namepath放在工件输入中,如下所示:

- name: input1
inputs:
artifacts:
- name: result
path: /tmp/raw
...

这是因为在任务的参数中(在dag声明中(,你告诉程序你希望如何调用输入以及从哪里提取输入,在模板声明中,你从name接收输入,并告诉程序临时将其放置在哪里。(这是我自己的理解(

我看到的另一个问题是,在print1中,不是打印到stdout或使用sys运行cat命令,而是直接运行cat,这(我认为(是不可能的。

你应该做一些类似的事情

import sys
sys.stdout.write("{{inputs.artifacts.result}}n")

import os
os.system("cat {{inputs.artifacts.result}}n")

Argo开发人员/维护人员的工作流程非常相似,可以在这里找到:

https://github.com/argoproj/argo-workflows/blob/master/examples/README.md#artifacts

相关内容

最新更新