如何用mikefarah's yq v4向YAML列表添加不存在的IP地址?
使用mikefarah's yq v4 条件性向YAML列表添加IP地址
需求说明
需在YAML文件的指定列表中,仅当目标IP不存在时才执行添加操作:
- 若尝试添加已存在的IP(如向
web列表添加1.1.1.1),文件内容保持不变 - 若添加不存在的IP(如向
web列表添加3.3.3.3),则将IP追加至列表末尾
原始YAML文件内容:
servers: web: - 1.1.1.1 jobs: - 2.2.2.2
添加3.3.3.3后的期望结果:
servers: web: - 1.1.1.1 - 3.3.3.3 jobs: - 2.2.2.2
现有解法
当前采用「追加后去重」的方式实现添加逻辑:
yq '.servers.web = (.servers.web + ["3.3.3.3"] | unique)' test.yml
删除IP的命令:
yq '.servers.web = (.servers.web - ["3.3.3.3"])' test.yml
更直观的条件添加方式
可以利用yq的contains函数做存在性判断,仅当目标IP不在列表中时才执行追加操作,逻辑更清晰:
yq 'if .servers.web | contains(["3.3.3.3"]) then . else .servers.web += ["3.3.3.3"] end' test.yml
该命令会先检查web列表是否包含目标IP:
- 若包含,直接返回原内容,不做修改
- 若不包含,则将IP追加到列表中
如果需要直接原地修改文件,加上-i参数即可:
yq -i 'if .servers.web | contains(["3.3.3.3"]) then . else .servers.web += ["3.3.3.3"] end' test.yml
内容的提问来源于stack exchange,提问作者Cluster
相关产品推荐
相关产品推荐

