我目前正在尝试解决 yq 的问题,我们正在使用自动化流程更新 helm 图表的值文件。大多数值文件都具有以下格式的图像标签:
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
,因为它已成为默认操作。