gpt4 book ai didi

json - 如何在 argo 工作流程中的 map 中传递多行 json 字符串

转载 作者:行者123 更新时间:2023-12-03 08:13:28 28 4
gpt4 key购买 nike

我正在努力创建一个带有 map 变量循环withParam的argo工作流程。在此 map 中,我想使用多行 json 字符串。有什么办法可以使用吗?

这是使用policy作为多行字符串的方法,但它不起作用

apiVersion: argoproj.io/v1alpha1
kind: Workflow
metadata:
generateName: loops-param-arg-
spec:
entrypoint: loop-param-arg-example
arguments:
parameters:
- name: os-list
value: |
[
{ "image": "debian", "tag": "9.1", "policy": "{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "BucketAdmin",
"Effect": "Allow",
"Principal": "*",
"Action": "s3:*",
"Resource": "*"
}
]
}" },
{ "image": "ubuntu", "tag": "17.10", "policy": "{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "BucketAdmin",
"Effect": "Allow",
"Principal": "*",
"Action": "s3:*",
"Resource": "*"
}
]
}"}
]
templates:
- name: loop-param-arg-example
inputs:
parameters:
- name: os-list
steps:
- - name: test-linux
template: cat-os-release
arguments:
parameters:
- name: image
value: "{{item.image}}"
- name: tag
value: "{{item.tag}}"
withParam: "{{inputs.parameters.os-list}}"

- name: cat-os-release
inputs:
parameters:
- name: image
- name: tag
container:
image: "{{inputs.parameters.image}}:{{inputs.parameters.tag}} and policy is {{inputs.parameters.policy}}"
command: [cat]
args: [/etc/os-release]

argo 工作流程中有什么方法可以实现这一点吗?如果没有,有什么替代方法可以做到这一点?

最佳答案

存在三个问题:

  1. 政策不是有效的 JSON。星号必须用引号引起来,因为它们是字符串。
      {
    "Sid": "BucketAdmin",
    "Effect": "Allow",
    - "Principal": *,
    + "Principal": "*",
    "Action": "s3:*",
    - "Resource": *
    + "Resource": "*"
    }
  2. (更新:此更改实际上并不是必需的 - Argo Workflows 可以正确处理 policy JSON 对象。)策略应编码为字符串,以便可以传递很容易作为参数。例如:
    "{\"Version\":\"2012-10-17\",\"Statement\":[{\"Sid\":\"BucketAdmin\",\"Effect\":\"Allow\",\"Principal\":\"*\",\"Action\":\"s3:*\",\"Resource\":\"*\"}]}"
  3. 策略值需要作为参数显式传递给 cat-os-release 模板。

最终的工作流程应如下所示:

apiVersion: argoproj.io/v1alpha1
kind: Workflow
metadata:
generateName: loops-param-arg-
spec:
entrypoint: loop-param-arg-example
arguments:
parameters:
- name: os-list
value: |
[
{
"image": "debian",
"tag": "9.1",
"policy": "{\"Version\":\"2012-10-17\",\"Statement\":[{\"Sid\":\"BucketAdmin\",\"Effect\":\"Allow\",\"Principal\":\"*\",\"Action\":\"s3:*\",\"Resource\":\"*\"}]}"
},
{
"image": "ubuntu",
"tag": "17.10",
"policy": "{\"Version\":\"2012-10-17\",\"Statement\":[{\"Sid\":\"BucketAdmin\",\"Effect\":\"Allow\",\"Principal\":\"*\",\"Action\":\"s3:*\",\"Resource\":\"*\"}]}"
}
]
templates:
- name: loop-param-arg-example
inputs:
parameters:
- name: os-list
steps:
- - name: test-linux
template: cat-os-release
arguments:
parameters:
- name: image
value: "{{item.image}}"
- name: tag
value: "{{item.tag}}"
- name: policy
value: "{{item.policy}}"
withParam: "{{inputs.parameters.os-list}}"

- name: cat-os-release
inputs:
parameters:
- name: image
- name: tag
- name: policy
container:
image: "{{inputs.parameters.image}}:{{inputs.parameters.tag}}"
command: [echo]
args: ["{{inputs.parameters.policy}}"]

关于json - 如何在 argo 工作流程中的 map 中传递多行 json 字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70127015/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com