首页 > 解决方案 > 如果名称:xxx 用 bash 替换 yaml 中的值

问题描述

我想根据以下内容更改 yamlvalue文件name

例子:

spec:
  containers:
    - name: app1
      image: imageurl.com
      command: []
      env:
      - name: MONGO_HOST
        value: localhost

在这里你可以看到我们为 mongo 主机添加了一个环境。现在使用BASH我想MONGO_HOST value根据条件进行更改,例如if - name: MONGO_HOST set value: 172.16.87.98

标签: bashyamlyq

解决方案


kislyuk/yq是一个 YAML 语法感知解析器,jq用作其 JSON 处理器。yq接受 YAML 输入,将其转换为 JSON,并将其提供给jq

过滤器,下面的部分'..'应用于 JSON 对象,并形成更新 IP 的结果 JSON,并将其转换回 YAML 格式,因为-y参数。

yq -y '(.spec.containers[].env[]|select(.name == "MONGO_HOST").value)|="172.16.87.98"' yaml  

安装和使用非常简单,可以在yq 中找到:命令行 YAML/XML 处理器

您可以使用就地编辑选项-i,就像sed -i避免重定向到临时文件一样yq -yi '...'


迈克法拉/yq

mikefarah/yq是 YAML 解析器的 Go 实现,从 v4 开始,它采用了类似于jq. 所以使用相同的,一个可以做

yq e '(.spec.containers[].env[]|select(.name == "MONGO_HOST").value) |= "172.16.87.98"' yaml

推荐阅读