【问题标题】:How do I use a JSON array from a ConfigMap as a parameter in my Argo workflow?如何在我的 Argo 工作流程中使用 ConfigMap 中的 JSON 数组作为参数?
【发布时间】:2022-02-17 06:36:56
【问题描述】:

我正在尝试读取在 ConfigMap 中存储为 Json 的 url 列表,然后将这些作为参数传递给我的 Argo 工作流程的下一步。

我的配置图如下所示:

apiVersion: v1
kind: ConfigMap
metadata:
  name: urls
data:
  urls: |
    [
      {"url": "https://www.google.com/"},
      {"url": "https://stackoverflow.com/"}
    ]

我的工作流程模板如下所示(为简洁起见,省略了元数据):

  templates:
  - name: main
    dag:
      tasks:

      - name: get-urls
        template: urls

      - name: url-thingy
        dependencies: ['get-urls']
        templateRef: 
          name: do-thing-with-the-urls
          template: url-thing
        arguments:
          parameters: 
          - name: url
            value: "{{ item.url }}"
        withParam: "{{tasks['get-urls'].outputs.result}}"

  - name: urls
    resource:
      action: get
      manifest: |
        apiVersion: v1
        kind: ConfigMap
        metadata:
          name: urls
    outputs:
      parameters:
      - name: urls
        valueFrom:
          jsonPath: '{.data.urls}'

这会加载 ConfigMap 文件,我可以在输出下的 get-urls 步骤中看到列出的 url。当它尝试执行url-thingy 步骤时,它会失败并显示以下消息:

withParam value could not be parsed as a JSON list: {{tasks['get-urls'].outputs.result}}: invalid character '{' looking for beginning of object key string

我觉得我已经接近解决方案,但我不确定我哪里出错了? withParam 是访问我的列表的正确方法吗?

【问题讨论】:

  • 我认为方括号索引符号只对表达式模板有效({{= whatever }})。试试这个:{{tasks.get-urls.outputs.result}}

标签: kubernetes argoproj


【解决方案1】:

试试{{=toJson(tasks['get-urls'].outputs.result)}}

【讨论】:

  • 感谢@edward-rosinzonsky 的回答。但是,这给了我“跳过的空参数”,所以它没有按预期工作。
  • withParams 需要一个 JSON 列表,因此您的数据需要采用 JSON 格式。如果你想并行启动多个 pod,你只需要 withParams。如果您只是想将数据传递到下一步,请使用arguments: parameters
  • 我希望并行启动 pod。这就是数据在列表中的原因。 json 列表中的每一项都将传递给下一个进程,因此我使用item.url
猜你喜欢
  • 1970-01-01
  • 2022-01-14
  • 2020-03-03
  • 2022-06-10
  • 1970-01-01
  • 1970-01-01
  • 2023-01-05
  • 1970-01-01
  • 2022-01-04
相关资源
最近更新 更多