如何获得子工作流 steps/tasks 输出?

How can I get sub workflow steps/tasks output?

我创建了一个集群工作流模板,它将执行一些任务。我将使用最后一步输出作为当前工作流参数。当我引用此模板时,我不知道如何从集群工作流 task/step.

中获取 output

集群工作流模板

apiVersion: argoproj.io/v1alpha1
kind: ClusterWorkflowTemplate
metadata:
  name: gen-params
spec:
  templates:
  - name: tasks
    steps:
    - - name: prepare
        template: prepare
    - - name: gen-params
        template: gen-params
...     

工作流

apiVersion: argoproj.io/v1alpha1
kind: Workflow
metadata:
  name: demo
spec:
  entrypoint: main
  templates:
  - name: main
    steps:
    - - name: gen-params
        templateRef:
          name: gen-params
          template: tasks
          clusterScope: true
    - - name: calculate
        template: calculate
        arguments:
          parameters:
          - name: params
            value: "{{steps.gen-params.steps.gen-params.outputs.result}}"  # not work
...

templateRef 只是一个 link,用于填充 Workflow 步骤的 YAML。您应该与 gen-params 步骤交互,就像您只是 copy/pasted 来自 gen-params ClusterWorkflowTemplate 的 YAML 直接进入您的新工作流一样。

在这种情况下,您应该访问 gen-params 步骤的结果:{{steps.gen-params.outputs.result}}.

您的问题可能与 WorkflowTemplate/ClusterWorkflowTemplate 的使用无关,而更多与您试图从“嵌套”工作流步骤访问输出这一事实有关。

您可以通过在 ClusterWorkflowTemplate 中定义顶级 tasks 模板的输出参数来实现此目的,该参数的值取自该 tasks 模板中最后一步的输出结果。

您的 WorkflowTemplate 将如下所示:

apiVersion: argoproj.io/v1alpha1
kind: ClusterWorkflowTemplate
metadata:
  name: gen-params
spec:
  templates:
  - name: tasks
    steps:
    - - name: prepare
        template: prepare
    - - name: gen-params
        template: gen-params
    outputs:
        parameters:
          - name: "nested-gen-params-result"
            valueFrom:
              parameter: "{{steps.gen-params.outputs.result}}"

进行更改后,您将能够使用 {{steps.gen-params.outputs.parameters.nested-gen-params-result}}

引用顶级工作流的 ClusterWorkflowTemplate 定义步骤的输出

Argo 的 nested-workflow example 显示了其他一些类似的模式。