如何传递或解析从 argo 工作流生成的资源事件源体?

我有一个资源传感器来触发一个工作流,该工作流报告导致事件的原始工作流 - 一种记录器。在传感器的参数中,我想获取原始工作流的主体以便从中提取某些值——目前我打算简单地将整个 JSON 作为输入字符串传递。


当工作流很重要并且包含变量文件时,就会出现问题,例如:


apiVersion: argoproj.io/v1alpha1

kind: Workflow

metadata:

  generateName: test-es-workflow-

  labels:

    class: dummy-in

spec:

  entrypoint: whalesay

  arguments:

    parameters:

      - name: message

        value: hello world

  templates:

    - name: whalesay

      inputs:

        parameters:

          - name: message

      container:

        image: docker/whalesay:latest

        command: [cowsay]

        args: ["{{inputs.parameters.message}}"]

发生这种情况时触发的工作流程:


apiVersion: argoproj.io/v1alpha1

kind: Sensor

metadata:

  name: demo-sensor

spec:

  template:

    serviceAccountName: operate-workflow-sa

  dependencies:

    - name: test-dep-sensor

      eventSourceName: demo-wf-submit

      eventName: demo-log

  triggers:

    - template:

        name: argo-workflow

        k8s:

          operation: create

          source:

            resource:

              apiVersion: argoproj.io/v1alpha1

              kind: Workflow

              metadata:

                generateName: demo-log-

              spec:

                entrypoint: demolog

                arguments:

                  parameters:

                    - name: body

                      value: hello world

                templates:

                - name: demolog

                  inputs:

                    parameters:

                      - name: body

                  container:

                    image: demolog:latest

                    imagePullPolicy: "Always"

                    command: [/app/demoapp.py]

                    args: ["-j", "{{inputs.parameters.body}}"]

          

消息失败Message: invalid spec: templates.demolog: failed to resolve 

{{inputs.parameters.message}}

如果工作流不包含任何变量({{}} 中没有包含任何变量),则触发的工作流将按预期执行。

我很乐意弄清楚如何获得以下任何或所有解决方案:

  1. 警告变量无法解析并替换为 null

  2. 不要解析事件主体内的变量,即将其呈现为纯字符串

  3. 在创建事件时解析变量,以便可以解析正文


牧羊人nacy
浏览 134回答 1
1回答

神不在的星期二

我开发了类型 2 的答案,即渲染包含在双花括号中的变量。它并不优雅,但它似乎有效:使用 jq 修补传感器的依赖项部分,用其他东西替换双花括号(我选择“%%”)  dependencies:    - name: test-dep-sensor      eventSourceName: demo-wf-submit      eventName: demo-log      transform:        jq: 'walk( if type=="string" then gsub("{{";"%%") else . end ) | walk( if type=="string" then gsub("}}";"%%") else . end )'
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go