我目前正试图解决yq的问题,我们正在更新一个自动过程的舵轮图表的值文件。大多数值文件都有以下格式的图像标签:
image:
repository: repo-name
tag: 0.0.1
,我们更新为:
yq -i e '.image.tag = env(TAG)' chart-name/values.yaml
然而,并非所有的图表都遵循相同的格式,例如:
controller:
image:
repository: repo-name
tag: 0.0.1
我希望能够更新标签的值,无论它是嵌套在yaml文件中,如果这是可能的yq或替代,如果它是可能的。
假设您正在使用mikefarah/yq,您可以使用递归下降运算符更新任何与名称tag
匹配的键
yq '( .. | select(has("tag")).tag ) |= env(TAG)' yaml
不幸的是,path
运算符不够高效(不像jq),无法获取所有根路径到叶路径的路径并更新其值。
注意:如果您使用的是yq 4.18.1或更高版本,则不再需要eval标志e
,因为它已成为默认操作。