如何获取子工作流程步骤/任务输出?

zen*_*-xu 4 argo-workflows

我创建了一个集群工作流模板,它将执行一些任务。我将使用最后一步输出作为当前工作流程参数。当我引用此模板时,我不知道如何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
...     
Run Code Online (Sandbox Code Playgroud)

工作流程

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
...
Run Code Online (Sandbox Code Playgroud)

小智 6

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

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

您的工作流程模板将如下所示:

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}}"
Run Code Online (Sandbox Code Playgroud)

进行更改后,您将能够使用以下命令引用顶级工作流的 ClusterWorkflowTemplate 定义步骤的输出{{steps.gen-params.outputs.parameters.nested-gen-params-result}}

Argo 的嵌套工作流示例显示了其他一些类似的模式。