【问题标题】:How can I get sub workflow steps/tasks output?如何获得子工作流程步骤/任务输出?
【发布时间】:2020-11-23 02:22:48
【问题描述】:

我创建了一个集群工作流模板,它将执行一些任务。我将使用最后一步的输出作为当前工作流参数。当我引用此模板时,我不知道如何从集群工作流任务/步骤中获取 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
...

【问题讨论】:

    标签: argo-workflows


    【解决方案1】:

    您的问题可能与 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 显示了一些其他类似的模式。

    【讨论】:

    【解决方案2】:

    templateRef 只是一个链接,用于填充工作流程步骤的 YAML。您应该与 gen-params 步骤进行交互,就像您将 YAML 从 gen-params ClusterWorkflowTemplate 直接复制/粘贴到新工作流中一样。

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

    【讨论】:

    • 感谢您的回复。所以你的意思是我可以只使用模板{{steps.???.outputs.result}} 其中??? 来自ClusterWorkflowTemplate 步骤?
    • 有点,但不完全是。您可以使用模板{{steps.AAA.outputs.result}},其中AAA 是工作流程中的步骤名称。可以以任何您想要的方式定义该步骤,包括通过引用 ClusterWorkflowTemplate 中的步骤。如果 ClusterWorkflowTemplate 步骤称为 BBB,但它在您的工作流中的一个称为 AAA 的步骤中被引用,您将在工作流中使用 steps.AAA 引用输出。
    • 将您的工作流程视为拥有自己的命名空间。在该命名空间中,steps.XYZ 指的是 在工作流的命名空间中 名称为 XYZ 的步骤。工作流可以从其他命名空间(模板)导入 步骤,但它只导入步骤,而不是名称。工作流确定在工作流上下文中将调用什么步骤。
    猜你喜欢
    • 1970-01-01
    • 2021-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多