3

input.yaml 中存储了一个动态属性,我想将其插入到现有的 yaml 文件中(命名为 original.yaml)。该属性有多行。

这两个文件看起来像:input.yaml:

- name: bob
  spec: {}

原始.yaml:

spec:
    names:
      - name: alice
        spec: {}

我的目标是将 input.yaml 内容放在 original.yaml 下spec.names。我尝试使用 yq 版本 4:

env=$(cat input.yaml)
yq eval '.spec.names + strenv(env)' original.yaml > result.yaml

我得到了什么:</p>

spec:
  names:
    - name: alice
      spec: {}
    - |-
      - name: bob
        spec: {}

第 5 行有一个不需要- |-的内容,我希望得到以下输出:

spec:
  names:
    - name: alice
      spec: {}
    - name: bob
      spec: {}

任何建议将不胜感激。

4

1 回答 1

2

这个想法是对的,但你不应该使用strenv()函数,它将你的输入格式化为 YAML 字符串类型。您的names记录是一组地图,因此您需要保留原始类型,只需使用env

所以,有了这个并避免cat和使用 shell 输入重定向(应该在 bash/zsh/ksh 上工作),你可以做

item="$(< input.yaml)" yq e '.spec.names += env(item)' original.yaml
于 2021-07-09T19:18:04.060 回答