如何引用在 DAG 外部创建的 sys.stdout,以便在带有 withParam 的 DAG 内部使用?
How to reference sys.stdout created outside of a DAG to be used inside of a DAG with withParam?
我正在使用 Argo 工作流程。
我的 entrypoint
中有一个 DAG 步骤,它遵循几个正常步骤。这些步骤之一执行 sys.stdout
。一旦进入 DAG 步骤,我希望一些任务引用 sys.stdout
.
的结果
我知道如果我们想在工作流从一个步骤转到下一个步骤(没有 DAG)时引用 sys.stdout
,我们可以这样做 {{steps.step-name.outputs.result}}
。但是,在 DAG 任务中却不起作用。
如何在 DAG 任务中引用 sys.stdout 以便将其与 withParam
一起使用?
编辑:
工作流程如下所示:
templates:
- name: the-entrypoint
steps:
- - name: step01
template: first-step
- - name: step02
template: second-step
- - name: step03
template: third-step
- - name: step04-the-dag-step
template: fourth-step
一般来说,如果third-step
做一个sys.stdout
,我们可以在fourth-step
中引用{{steps.step03.outputs.result}}
。但是,在这种情况下 fourth-step
是一个 DAG,如果其中一个 DAG 任务想要使用 sys.stdout
,那么在 DAG 任务内部调用 {{steps.step03.outputs.result}}
作为 argument/parameter 会抛出一个错误。
问题是如何在 fourth-step
DAG 任务中正确引用 third-step
生成的 sys.stdout
?
关于模板输出的一些背景知识
Argo Workflows 支持多种不同的types of templates。
每种类型的模板在模板中支持不同类型的引用。
在 steps
模板 中,您可以使用 steps.step-name.outputs.parameters.param-name
(对于命名参数)或 steps.step-name.outputs.result
访问其他步骤的输出参数(对于 script
或 container
模板的标准输出)。
示例 (see full Workflow):
- name: output-parameter
steps:
- - name: generate-parameter
template: whalesay
- - name: consume-parameter
template: print-message
arguments:
parameters:
- name: message
value: "{{steps.generate-parameter.outputs.parameters.hello-param}}"
在 dag
模板 中,您可以使用类似的语法访问各种任务的输出,只需使用 tasks.
而不是 steps.
.
示例 (see full Workflow):
- name: main
dag:
tasks:
- name: flip-coin
template: flip-coin
- name: heads
depends: flip-coin
template: heads
when: "{{tasks.flip-coin.outputs.result}} == heads"
- name: tails
depends: flip-coin
template: tails
when: "{{tasks.flip-coin.outputs.result}} == tails"
在container
或script
模板中,您可以仅访问该模板的输入* .您不能直接从容器或脚本模板的步骤或任务模板访问步骤或任务的输出。
引用 DAG 的步骤输出
如上所述,DAG 模板不能直接引用 steps
模板的步骤输出。但是 steps
模板中的步骤可以 将步骤输出传递给 DAG 模板。
在您的示例中,它看起来像这样:
templates:
- name: the-entrypoint
steps:
- - name: step01
template: first-step
- - name: step02
template: second-step
- - name: step03
template: third-step
- - name: step04-the-dag-step
template: fourth-step
arguments:
parameters:
- name: some-param
value: "{{steps.step03.outputs.result}}"
- name: fourth-step
inputs:
parameters:
- name: some-param
dag:
tasks:
# use the input parameter in the fourth-step template with "{{inputs.parameters.some-param}}"
tl;博士
steps.
和 tasks.
变量旨在 在单个步骤或任务模板中引用 ,但它们可以显式 在模板之间传递。如果您需要使用 DAG 中某个步骤的输出,请直接将该输出作为调用 DAG 的参数传递。
在您的例子中,DAG 模板作为四个步骤的最后一步被调用,因此您将在此处传递参数。
* 好的,您还可以从 script
或 container
模板中访问 various other variables,但您无权访问以下变量作用域为另一个模板中的内部变量。
我正在使用 Argo 工作流程。
我的 entrypoint
中有一个 DAG 步骤,它遵循几个正常步骤。这些步骤之一执行 sys.stdout
。一旦进入 DAG 步骤,我希望一些任务引用 sys.stdout
.
我知道如果我们想在工作流从一个步骤转到下一个步骤(没有 DAG)时引用 sys.stdout
,我们可以这样做 {{steps.step-name.outputs.result}}
。但是,在 DAG 任务中却不起作用。
如何在 DAG 任务中引用 sys.stdout 以便将其与 withParam
一起使用?
编辑:
工作流程如下所示:
templates:
- name: the-entrypoint
steps:
- - name: step01
template: first-step
- - name: step02
template: second-step
- - name: step03
template: third-step
- - name: step04-the-dag-step
template: fourth-step
一般来说,如果third-step
做一个sys.stdout
,我们可以在fourth-step
中引用{{steps.step03.outputs.result}}
。但是,在这种情况下 fourth-step
是一个 DAG,如果其中一个 DAG 任务想要使用 sys.stdout
,那么在 DAG 任务内部调用 {{steps.step03.outputs.result}}
作为 argument/parameter 会抛出一个错误。
问题是如何在 fourth-step
DAG 任务中正确引用 third-step
生成的 sys.stdout
?
关于模板输出的一些背景知识
Argo Workflows 支持多种不同的types of templates。
每种类型的模板在模板中支持不同类型的引用。
在 steps
模板 中,您可以使用 steps.step-name.outputs.parameters.param-name
(对于命名参数)或 steps.step-name.outputs.result
访问其他步骤的输出参数(对于 script
或 container
模板的标准输出)。
示例 (see full Workflow):
- name: output-parameter
steps:
- - name: generate-parameter
template: whalesay
- - name: consume-parameter
template: print-message
arguments:
parameters:
- name: message
value: "{{steps.generate-parameter.outputs.parameters.hello-param}}"
在 dag
模板 中,您可以使用类似的语法访问各种任务的输出,只需使用 tasks.
而不是 steps.
.
示例 (see full Workflow):
- name: main
dag:
tasks:
- name: flip-coin
template: flip-coin
- name: heads
depends: flip-coin
template: heads
when: "{{tasks.flip-coin.outputs.result}} == heads"
- name: tails
depends: flip-coin
template: tails
when: "{{tasks.flip-coin.outputs.result}} == tails"
在container
或script
模板中,您可以仅访问该模板的输入* .您不能直接从容器或脚本模板的步骤或任务模板访问步骤或任务的输出。
引用 DAG 的步骤输出
如上所述,DAG 模板不能直接引用 steps
模板的步骤输出。但是 steps
模板中的步骤可以 将步骤输出传递给 DAG 模板。
在您的示例中,它看起来像这样:
templates:
- name: the-entrypoint
steps:
- - name: step01
template: first-step
- - name: step02
template: second-step
- - name: step03
template: third-step
- - name: step04-the-dag-step
template: fourth-step
arguments:
parameters:
- name: some-param
value: "{{steps.step03.outputs.result}}"
- name: fourth-step
inputs:
parameters:
- name: some-param
dag:
tasks:
# use the input parameter in the fourth-step template with "{{inputs.parameters.some-param}}"
tl;博士
steps.
和 tasks.
变量旨在 在单个步骤或任务模板中引用 ,但它们可以显式 在模板之间传递。如果您需要使用 DAG 中某个步骤的输出,请直接将该输出作为调用 DAG 的参数传递。
在您的例子中,DAG 模板作为四个步骤的最后一步被调用,因此您将在此处传递参数。
* 好的,您还可以从 script
或 container
模板中访问 various other variables,但您无权访问以下变量作用域为另一个模板中的内部变量。