我有以下yaml文件
apiVersion: apps/v1
kind: Deployment
metadata:
name: app-backend
labels:
app: app-backend
spec:
replicas: 1
selector:
matchLabels:
app: app-backend
template:
metadata:
labels:
app: app-backend
spec:
serviceAccountName: app
# securityContext:
# fsGroup: 1001090001
containers:
- name: app-backend
image: registry/import-proj/app_backend:dc47096c66513dc252b21398e0307efd021c7c8e
ports:
- containerPort: 8080
envFrom:
- configMapRef:
name: app-backend
- secretRef:
name: dbsecret
strategy:
type: Recreate
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: app-frontend
labels:
app: app-frontend
spec:
replicas: 1
selector:
matchLabels:
app: app-frontend
template:
metadata:
labels:
app: app-frontend
spec:
serviceAccountName: app
# securityContext:
# fsGroup: 1001090002
containers:
- name: app-frontend
image: registry/import-proj/app_frontend:c6e525b71e5c9480330431e55418ff15dcbe4f36
ports:
- containerPort: 3000
我正在尝试使用 yq 来替换 app_frontend 的标签
c6e525b71e5c9480330431e55418ff15dcbe4f36
。
我的命令如下-
yq eval-all -i 'select(.kind == "Deployment" and .metadata.name == "app-frontend") | .spec.template.spec.containers[] |= (select(.name == "app-frontend") | .image |= sub(":.*", ":new-tag"))' try.yaml
问题是,更换后后端部分完全消失了。 我尝试过使用
yq eval-all -i [] .|select(..
我不明白问题出在哪里。
使用
select(…) | .spec.template.spec.containers[]
中的管道会更改主要上下文。不用用,选择后继续遍历即可:
select(.kind == "Deployment" and .metadata.name == "app-frontend")
.spec.template.spec.containers[] |= (…)
使用 mikefarah/yq 版本 v4.35.1 进行测试
请注意,至少对于此示例输入,您不需要
ea
命令。 e
也可以完成这项工作(从 4.18.1 版本开始甚至可以省略)。