我有一个这样的 YAML 文件:
keys:
- &node0001 ageXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- &node0002 ageYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY
creation_rules:
- path_regex: secrets.yaml$
key_groups:
- age:
- *node0001
- *node0002
现在我想向 keys 数组和 creation_rules 数组添加一个新条目。我不知道yq
该使用什么语法来实现这一点。因此它变成:
keys:
- &node0001 ageXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- &node0002 ageYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY
- &node0003 ageZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ
creation_rules:
- path_regex: secrets.yaml$
key_groups:
- age:
- *node0001
- *node0002
- *node0003
我尝试过:
yq '.keys += "ageZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ"' .sops.yaml
这会在键数组中添加一个新条目,但我不知道如何设置锚点。并且:
yq '.creation_rules[0].key_groups[0].age += "node0003"' .sops.yaml
此外,这会向列表中添加一个条目,但该条目应该是一个别名。
有什么想法可以实现这一点吗?如果只需一个yq
电话就能实现一切,那就更好了。
使用mikefarah/yq,查看手册中的锚点和别名运算符。对于您的示例,
+=
使用管道运算符一次性执行两个操作|
,然后还为相应的最后一项设置anchor
和。alias
.[-1]
或者,为了使其更简单一些,先将 和 一起处理
.keys
,anchor
然后在移动到 时依赖于alias
,以类似的方式将其组合起来。两者都产生: