簡體   English   中英

如何傳遞或解析從 argo 工作流生成的資源事件源主體?

[英]How to pass or parse a resource event source body generated from an argo workflow?

我有一個資源傳感器來觸發一個工作流,該工作流報告導致事件的原始工作流 - 一種記錄器。 在傳感器的參數中,我想獲取原始工作流的主體,以便從中提取某些值——目前我打算簡單地將整個 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}}"]
          parameters:
            - src:
                dependencyName: test-dep-sensor
                dataKey: body
                value: wow! a default value
              dest: spec.arguments.parameters.0.value
      retryStrategy:
        steps: 3

失敗並顯示消息Message: invalid spec: templates.demolog: failed to resolve {{inputs.parameters.message}}

如果工作流不包含任何變量({{}} 中不包含任何變量),則觸發的工作流會按預期執行。

我很樂意弄清楚如何獲得以下任何或所有解決方案:

  1. 警告變量無法解析並替換為 null
  2. 不要解析事件主體中的變量,即將其呈現為純字符串
  3. 在創建事件時解析變量,以便可以解析主體

環境:Kubernetes:v1.20.15; 阿爾戈:v3.2.9; Argo 活動:v1.6.3

我開發了類型 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 )'

附加信息:

傳感器中的 Argo Events 轉換

jq手冊

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM