gpt4 book ai didi

kubernetes - 使用 yq 更新 yaml 中的嵌套数组值

转载 作者:行者123 更新时间:2023-12-02 11:38:49 24 4
gpt4 key购买 nike

给定一个 yaml 文件(helmfile),如下所示

releases:
- chart: ../charts/foo
name: foo
namespace: '{{ .Values.stack }}'
values:
- ../config/templates/foo-values.yaml.gotmpl
set:
- name: image.tag
value: 22
- name: replicas
value: 1
- chart: ../charts/bar
name: bar
namespace: '{{ .Values.stack }}'
values:
- ../config/templates/bar-values.yaml.gotmpl
set:
- name: image.bar_proxy.tag
value: 46
- name: image.bar.tag
value: 29
- name: replicas
value: 1

我正在尝试找出一种更新特定图像标签的干净方法。例如,我想更新 image.bar_proxy.tag来自 4651 .

我有以下内容,可以完成这项工作,但它要求您知道数组项的确切索引:
yq -y '.releases[] |= if .name=="bar" then .set[0].value |= 51 else . end' helmfile-example.yaml

因此,如果数组顺序在某个时候发生变化,这将会中断。

首选解决方案是:“将 image.bar_proxy.tag 值从 46 更新为 51 其中 set[].name==image.bar_proxy.tag”。关于如何实现更具体的条件选择的任何想法?

仅供引用我们的 yq 版本:
$ yq --version
yq 2.10.0

最佳答案

您可以使用以下过滤器使其工作。它通过动态选择标签所在对象的索引来工作。在所选对象上 .value=51将根据需要更新值。您也可以使用 -i标志对原始文件进行就地修改。

yq -y '.releases[].set |= map(select(.name == "image.bar_proxy.tag").value=51)' yaml

见底层 jq作用于 jq-playground 处的 JSON 对象的过滤器

关于kubernetes - 使用 yq 更新 yaml 中的嵌套数组值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62087401/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com