微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何参数化工作流TempateRef?

如何解决如何参数化工作流TempateRef?

我有一个 WorkflowTemplate“nyc-test-template”,我通过 Argo Events 和 PubSub 触发它。因此,如果我将消息 {} 发布到 PubSub 主题“argo-events-nyc”,则会启动通过 workflowTempateRef 指定的模板。那确实工作得很好。现在我想参数化要启动的模板。

我的无效草稿如下:

apiVersion: argoproj.io/v1alpha1
kind: EventSource
Metadata:
  name: pubsub-event-source-nyc
spec:
  template:
    serviceAccountName: argo-events
  pubSub:
    examplex:
      jsonBody: true
      topic: argo-events-nyc
      subscriptionID: argo-events-nyc-sub

---

apiVersion: argoproj.io/v1alpha1
kind: Sensor
Metadata:
  name: pubsub-sensor-nyc
spec:
  template:
    serviceAccountName: argo-events-sa
  dependencies:
    - name: pubsub-event-source-dep
      eventSourceName: pubsub-event-source-nyc
      eventName: examplex
  triggers:
    - template:
        name: argo-workflow-trigger
        argoWorkflow:
          group: argoproj.io
          version: v1alpha1
          resource: workflows
          operation: submit
          source:
            resource:
              apiVersion: argoproj.io/v1alpha1
              kind: Workflow
              Metadata:
                generateName: nyc-test-template-
                namespace: argo
              spec:
                arguments:
                  parameters:
                    - name: wft
                      value: nyc-test-template
                workflowTemplateRef:
                  # I'm pretty sure this inputs block is useless. But leaving it out 
                  # and instead referencing arguments.parameters.wft won't work either.
                  inputs:
                    parameters:
                      - name: wft
                  name: "{{inputs.parameters.wft}}"
          parameters:
            - src:
                dependencyName: pubsub-event-source-dep
                dataKey: body.wft
              dest: spec.arguments.parameters.0.value

我希望发生的是:

  • 空消息 {} 会触发“nyc-test-template”
  • 消息 {"wft": "my-template"} 会触发“我的模板”

相反,发布一条空消息会导致 Sensor 抛出错误

2021-03-29T15:31:16.386441528Z2021/03/29 15:31:16 Failed to parse workflow: error unmarshaling JSON: while decoding JSON: json: unkNown field "inputs"

坦率地说 - 上面的 yaml 从 this example 中获得了粗略的灵感。这并不是真正有根据的猜测的结果,因为我仍然不了解参数、参数和输入如何相互作用的机制。

解决方法

您可以使用 SlideIn 根据参数切换要使用的模板。

假设我有两个像这样的简单工作流模板:

SimpleForm

我可以根据传递给工作流的参数(手动或从 argo 事件设置)选择从 WorkflowTemplates 执行一个或另一个模板。

when

对于工作流的顶级参数,您可以使用 apiVersion: argoproj.io/v1alpha1 kind: WorkflowTemplate metadata: name: t1 spec: templates: - name: whalesay-template container: image: docker/whalesay command: [cowsay] args: [t1] --- apiVersion: argoproj.io/v1alpha1 kind: WorkflowTemplate metadata: name: t2 spec: templates: - name: whalesay-template container: image: docker/whalesay command: [cowsay] args: [t2]

在上述基础上,您可以使用像 apiVersion: argoproj.io/v1alpha1 kind: Workflow metadata: generateName: switch- spec: entrypoint: pick arguments: parameters: - name: which templates: - name: pick steps: - - name: t1 when: "{{workflow.parameters.which}} == t1" templateRef: name: t1 template: whalesay-template - name: t2 when: "{{workflow.parameters.which}} == t2" templateRef: name: t2 template: whalesay-template 这样的 JSON 解析工具来检索切换值,然后根据该值选择您的模板。

workflow.parameters.SOMETHING

我应该提到使用 jq 有点笨手笨脚。在 Argo (3.1+) 的未来版本中,将会有更直接地检查 JSON 的工具。但是这个解决方案很好地反向兼容。

,

学分转到 Derek Wang

apiVersion: argoproj.io/v1alpha1
kind: Sensor
metadata:
  name: pubsub-sensor-nyc
spec:
  template:
    serviceAccountName: argo-events-sa
  dependencies:
    - name: pubsub-event-source-dep
      eventSourceName: pubsub-event-source-nyc
      eventName: examplex
  triggers:
    - template:
        name: argo-workflow-trigger
        argoWorkflow:
          group: argoproj.io
          version: v1alpha1
          resource: workflows
          operation: submit
          source:
            resource:
              apiVersion: argoproj.io/v1alpha1
              kind: Workflow
              metadata:
                generateName: nyc-test-template-
                namespace: argo
              spec:
                workflowTemplateRef:
                  name: nyc-test-template
          parameters:
            - src:
                dependencyName: pubsub-event-source-dep
                dataKey: body.wft
                value: nyc-test-template # default value
              dest: spec.workflowTemplateRef.name # <- this

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。