使用YQ更新DigitalOcean应用YAML配置时丢失内容求助
解决yq修改DigitalOcean应用配置文件时丢失非目标内容的问题
你遇到的问题是当前yq命令仅输出被修改的envs项,导致原文件其他配置被覆盖。要保留完整文件结构并修改目标值,需调整命令写法,确保在整个文档上下文内执行修改:
正确命令(适用于yq v4+)
写法一:用括号限定修改范围
yq e '( .services[0].envs[] | select(.key == "NUXT_PUBLIC_VERSION").value ) = "v0.5.0"' current-app-spec.yaml -i
写法二:使用|=更新操作符
yq e '.services[0].envs[] |= (select(.key == "NUXT_PUBLIC_VERSION").value = "v0.5.0")' current-app-spec.yaml -i
原理说明
原命令中的|管道符会将筛选后的单个envs条目作为输出结果,执行-i(原地修改)时会用该结果覆盖整个文件。而上述两种写法:
- 括号包裹修改逻辑,让yq明确要在整个文档基础上修改指定字段,而非仅输出修改部分
|=操作符表示对选中的数组元素执行更新操作,修改后仍保留完整文档结构
执行命令后,NUXT_PUBLIC_VERSION的value会被更新为v0.5.0,同时文件中的alerts、domains、ingress等其他配置将完整保留。
内容的提问来源于stack exchange,提问作者Inb4cookies
相关产品推荐
相关产品推荐

