bash - 如果名称: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
解决方案
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
推荐阅读
- c# - 无法使用 Visual Studio 2017 调试 Azure 函数
- javascript - 将表单提交推送到数组
- react-apollo - 如何通过道具而不是上下文提供 ApolloClient
- php - 当用户离开 Laravel-Echo 中的频道时,有没有办法触发后端事件?
- postgresql - Express PUT 端点函数不断返回 undefined
- ruby-on-rails - rspec / 无需重新加载即可测试 AR 对象
- r - 如何将具有多列的列表转换为R中的数据框
- php - 尝试在 Laravel 5.5 中设置更新用户密码的新通知
- python - Python-如何从 Excel 数据行创建元组
- sql-server - Migrating data from one table to another in SQL Server