yq 附加到非常嵌套的 yaml

问题描述 投票:0回答:1

我有这个 yaml :

routes:
  T_NAME:
    paths:
      T_PATH:
        - allowed_methods:
          - GET
          matching_policy: prefix
          auth:
            jwt:
              required: true
              scopes:
                allOf:
                  - scope1

我想在 allOf 中追加元素

for i in ${nemo[@]}; do
  yq ".routes.T_NAME.paths.T_PATH.allowed_methods.auth.jwt.scopes.allOf += \"${i}\"" note.yaml
done

这行不通,请有任何想法

command-line command yq
1个回答
0
投票

使用 mikefarah/yq,您可以传递原始输入数组,即

nemo
作为参数列表,并在
yq
的上下文中将其作为字符串输入接收,然后将其拆分为单个空格,以获得列表元素。

nemo=(a b c) # Sample input
myenv="${nemo[*]}" yq '.routes.T_NAME.paths.T_PATH[0].auth.jwt.scopes.allOf += ( strenv(myenv) | split(" ")  )' yaml

按预期产生所需的输出。

routes:
  T_NAME:
    paths:
      T_PATH:
        - allowed_methods:
            - GET
          matching_policy: prefix
          auth:
            jwt:
              required: true
              scopes:
                allOf:
                  - scope1
                  - a
                  - b
                  - c

使用splitstrenv方法。在 v4.32.2 上测试

© www.soinside.com 2019 - 2024. All rights reserved.