为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
牧羊人nacy 2022-12-19 20:20:00
我有一个资源传感器来触发一个工作流,该工作流报告导致事件的原始工作流 - 一种记录器。在传感器的参数中,我想获取原始工作流的主体以便从中提取某些值——目前我打算简单地将整个 JSON 作为输入字符串传递。当工作流很重要并且包含变量文件时,就会出现问题,例如:apiVersion: argoproj.io/v1alpha1kind: Workflowmetadata:  generateName: test-es-workflow-  labels:    class: dummy-inspec:  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/v1alpha1kind: Sensormetadata:  name: demo-sensorspec:  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}}如果工作流不包含任何变量({{}} 中没有包含任何变量),则触发的工作流将按预期执行。我很乐意弄清楚如何获得以下任何或所有解决方案:警告变量无法解析并替换为 null不要解析事件主体内的变量,即将其呈现为纯字符串在创建事件时解析变量,以便可以解析正文
查看完整描述

1 回答

?
神不在的星期二

TA贡献1963条经验 获得超6个赞

我开发了类型 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 )'


查看完整回答
反对 回复 2022-12-19
  • 1 回答
  • 0 关注
  • 133 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号