无法通过另一个工作流模板将输出参数从一个工作流模板传递到工作流

编程入门 行业动态 更新时间:2024-10-27 10:20:43
本文介绍了无法通过另一个工作流模板将输出参数从一个工作流模板传递到工作流的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

我有两个工作流模板generate-output、lib-read-outputs和一个工作流output-paramter,如下

  • generate-output.yaml
  • apiVersion: argoproj.io/v1alpha1 kind: WorkflowTemplate metadata: name: generate-output spec: entrypoint: main templates: - name: main dag: tasks: # Generate Json for Outputs - name: read-outputs arguments: parameters: - name: outdata value: | { "version": 4, "terraform_version": "0.14.11", "serial": 0, "lineage": "732322df-5bd43-6e92-8f46-56c0dddwe83cb4", "outputs": { "key_alias_arn": { "value": "arn:aws:kms:us-west-2:123456789:alias/tetsing-key", "type": "string", "sensitive": true }, "key_arn": { "value": "arn:aws:kms:us-west-2:123456789:alias/tetsing-key", "type": "string", "sensitive": true } } } template: retrieve-outputs # Create Json - name: retrieve-outputs inputs: parameters: - name: outdata script: image: python command: [python] env: - name: OUTDATA value: "{{inputs.parameters.outdata}}" source: | import json import os OUTDATA = json.loads(os.environ["OUTDATA"]) with open('/tmp/templates_lst.json', 'w') as outfile: outfile.write(str(json.dumps(OUTDATA['outputs']))) volumeMounts: - name: out mountPath: /tmp volumes: - name: out emptyDir: { } outputs: parameters: - name: message valueFrom: path: /tmp/templates_lst.json
  • lib-read-outputs.yaml
  • apiVersion: argoproj.io/v1alpha1 kind: WorkflowTemplate metadata: name: lib-read-outputs spec: entrypoint: main templates: - name: main dag: tasks: # Read Outputs - name: lib-wft templateRef: name: generate-output template: main
  • output-paramter.yaml
  • apiVersion: argoproj.io/v1alpha1 kind: Workflow metadata: generateName: output-paramter- spec: entrypoint: main templates: - name: main dag: tasks: # Json Output data task1 - name: wf templateRef: name: lib-read-outputs template: main - name: lib-wf2 dependencies: [wf] arguments: parameters: - name: outputResult value: "{{tasks.wf.outputs.parameters.message}}" template: whalesay - name: whalesay inputs: parameters: - name: outputResult container: image: docker/whalesay:latest command: [cowsay] args: ["{{inputs.parameters.outputResult}}"]

    我正在尝试通过lib-read-outputs将在工作流模板generate-output中生成的输出参数传递给工作流output-paramter

    当我执行它们时,它给出以下错误-Failed: invalid spec: templates.main.tasks.lib-wf2 failed to resolve {{tasks.wf.outputs.parameters.message}}

    推荐答案默认情况下,DAG和STEP模板不生成输出

    DAG和STEP模板不会自动生成子模板的输出,即使只有一个子模板也是如此。

    例如,此处的no-parameters模板不生成输出,即使它调用的模板具有输出。

    apiVersion: argoproj.io/v1alpha1 kind: WorkflowTemplate spec: templates: - name: no-parameters dag: tasks: - name: get-a-parameter template: get-a-parameter

    如果您考虑具有多个任务的DAG模板,则这种输出缺失是有意义的:

    apiVersion: argoproj.io/v1alpha1 kind: WorkflowTemplate spec: templates: - name: no-parameters dag: tasks: - name: get-a-parameter template: get-a-parameter - name: get-another-parameter depends: get-a-parameter template: get-another-parameter no-parameters应生成哪些任务的输出?由于不清楚,默认情况下,DAG和STEP模板不会生成输出。

    您可以将模板视为类似于函数。您不希望函数隐式返回它所调用的函数的输出。

    def get_a_string(): return "Hello, world!" def call_get_a_string(): get_a_string() print(call_get_a_string()) # This prints nothing. 但DAG或STEP模板可以转发输出

    您可以通过设置DAG或步骤模板Forward的outputs字段使其成为输出。

    apiVersion: argoproj.io/v1alpha1 kind: WorkflowTemplate metadata: name: get-parameters-wftmpl spec: templates: - name: get-parameters dag: tasks: - name: get-a-parameter template: get-a-parameter - name: get-another-parameter depends: get-a-parameter template: get-another-parameter # This is the critical part! outputs: parameters: - name: parameter-1 valueFrom: expression: "tasks['get-a-parameter'].outputs.parameters['parameter-name']" - name: parameter-2 valueFrom: expression: "tasks['get-another-parameter'].outputs.parameters['parameter-name']" --- apiVersion: argoproj.io/v1alpha1 kind: Workflow spec: templates: - name: print-parameter dag: tasks: - name: get-parameters templateRef: name: get-parameters-wftmpl template: get-parameters - name: print-parameter depends: get-parameters template: print-parameter arguments: parameters: - name: parameter value: "{{tasks.get-parameters.outputs.parameters.parameter-1}}"

    继续进行Python类比:

    def get_a_string(): return "Hello, world!" def call_get_a_string(): return get_a_string() # Add 'return'. print(call_get_a_string()) # This prints "Hello, world!". 因此,在您的特定案例中...
  • 将outputs节添加到generate-parameter工作流模板中的main模板,以转发retrieve-parameters模板的输出参数。

    apiVersion: argoproj.io/v1alpha1 kind: WorkflowTemplate metadata: name: generate-parameter spec: entrypoint: main templates: - name: main outputs: parameters: - name: message valueFrom: expression: "tasks['read-parameters'].outputs.parameters.message" dag: tasks: # ... the rest of the file ...
  • 将outputs节添加到lib-read-parameters工作流模板中的main模板以转发generate-parameter的参数。

    apiVersion: argoproj.io/v1alpha1 kind: WorkflowTemplate metadata: name: lib-read-parameters spec: entrypoint: main templates: - name: main outputs: parameters: - name: message valueFrom: expression: "tasks['lib-wft'].outputs.parameters.message" dag: tasks: # ... the rest of the file ...
  • 更多推荐

    无法通过另一个工作流模板将输出参数从一个工作流模板传递到工作流

    本文发布于:2023-11-24 09:23:22,感谢您对本站的认可!
    本文链接:https://www.elefans.com/category/jswz/34/1624647.html
    版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
    本文标签:工作流   模板   参数

    发布评论

    评论列表 (有 0 条评论)
    草根站长

    >www.elefans.com

    编程频道|电子爱好者 - 技术资讯及电子产品介绍!