是否有一种方法可以在yaml文件中搜索任何键的实例



我目前正试图解决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,因为它已成为默认操作。

最新更新