You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用yq为含锚点、别名的YAML文件添加数组元素?

为SOPS配置文件添加带锚点的密钥及对应别名

原始SOPS配置文件:

keys:
  - &node0001 ageXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
  - &node0002 ageYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY
creation_rules:
  - path_regex: secrets.yaml$
    key_groups:
      - age:
          - *node0001
          - *node0002

需要实现的目标:

  • 在keys数组新增带锚点&node0003的密钥条目
  • 在creation_rules的age列表中添加对应别名*node0003

最终效果:

keys:
  - &node0001 ageXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
  - &node0002 ageYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY  
  - &node0003 ageZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ
creation_rules:
  - path_regex: secrets.yaml$
    key_groups:
      - age:
          - *node0001
          - *node0002
          - *node0003

之前尝试的命令存在两个问题:

  • 添加密钥时无法生成YAML锚点,只能添加普通字符串
  • 添加的是字符串node0003而非YAML别名*node0003

解决方案(单条yq命令)

使用mikefarah/yq(v4及以上版本)的以下命令即可完成需求:

yq '
  .keys += [{ "&node0003": "ageZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ" }] |
  .creation_rules[0].key_groups[0].age += [{"*node0003": null}]
' .sops.yaml

命令说明:

  1. 添加带锚点的密钥:通过对象{ "&node0003": "ageZZZZ..." }的形式添加,yq会自动将其解析为YAML锚点格式的数组条目
  2. 添加对应别名:用{ "*node0003": null }的形式让yq识别为YAML别名,而非普通字符串,添加到目标列表中

如果需要直接原地修改文件,加上-i参数:

yq -i '
  .keys += [{ "&node0003": "ageZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ" }] |
  .creation_rules[0].key_groups[0].age += [{"*node0003": null}]
' .sops.yaml

内容的提问来源于stack exchange,提问作者Martijn de Munnik

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 21:33:12