【发布时间】:2021-05-07 11:28:59
【问题描述】:
我有大约 200-300 个 yaml 文件,我想要实现的是仅更改图像:我的几个 yaml 文件中的选项,我有一个 shell 脚本可以获取所需的 yaml 文件,我只想实现换图:key only。
已尝试的解决方案:
使用了一个工具yqv4:
for i in ${deployment[@]}
do
yq eval '( select(.spec.template.spec.containers[0].image |= "gcr.io/myrepo/mynginx:1.2.3"' deployment-$i.yaml
done
此命令的作用是实现更改映像的预期结果,但它还将更改附加到部署文件的所有部分,例如在文件中每个规范的末尾:
apiVersion: apps/v1
kind: Deployment
metadata:
name: portal-1
spec:
selector:
matchLabels:
component: portal-1
role: ui
replicas: 1
template:
metadata:
labels:
component: reactportal
role: ui
spec:
containers:
- name: portal
image: gcr.io/myrepo/mynginx:4.52 <<< Desired CHange Happens Here >>>
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /$1
nginx.ingress.kubernetes.io/enable-cors: "false"
nginx.ingress.kubernetes.io/cors-allow-origin: "https://example.com"
name: portal-ingress
spec:
rules:
- host: mydomain.com
http:
paths:
- backend:
serviceName: portal-svc
servicePort: 80
path: /(.*)
template: <<<< THIS IS ALSO GETTING APPENDED >>>
spec:
containers:
- image: gcr.io/myrepo/mynginx:1.2.3
如何在不将图像附加到部署文件的每个部分的情况下达到预期的效果?
【问题讨论】:
-
请提供minmal, reproducible example。在这种情况下,您不显示输入 YAML,而且如果每个 YAML 文件都出现问题,您处理多个 YAML 文件似乎也没有关系,因此最好只显示一个精简的 YAML 输入文件问题发生的地方,实际和期望的输出。关于这个问题,关闭两个左括号可能会有所帮助。
标签: bash shell kubernetes yaml yq