gpt4 book ai didi

json - 如何使用脚本更改 Deployment 的 ConfigMap?

转载 作者:数据小太阳 更新时间:2023-10-29 03:24:11 24 4
gpt4 key购买 nike

有些 Deployment 可能会使用名为 cm-myapp-* 的配置映射。如何编写一个脚本来查看所有 Deployment 并将它们从使用它们的一些 cm-myapp-* 重新配置为新的特定 cm-myapp-123

apiVersion: apps/v1beta1
kind: Deployment
metadata:
name: myapp
spec:
template:
metadata:
labels:
app: myapp
spec:
containers:
- name: myapp
image: myapp:2
volumeMounts:
- name: config-volume
mountPath: /etc/myapp/
volumes:
- name: config-volume
configMap:
name: cm-myapp-9375546193
---
apiVersion: v1
kind: ConfigMap
metadata:
name: cm-myapp-123
data:
myapp.conf: |
hi

kubectl patch 接受“JSON 补丁”,还有 kubectl edit 看起来像只交互。一些 kubectl 命令接受 go-templates,但它们不用于编辑。转储整个配置会产生一些多余的字段。

可以提取一些东西:

kubectl get deployment -o go-template --template="{{range .items}}{{\$deploymentName := .metadata.name}}{{range .spec.template.spec.volumes}}{{if .configMap}}{{\$deploymentName}} {{.configMap}}:{{end}}{{end}}{{end}}" | tr ':' '\n'

kubectl get deployment myapp -ojsonpath="{.spec.template.spec.volumes[0].configMap.name}}"

需要修补它(不工作):

kubectl patch deployment myapp -p '{ "op": "replace", "path": ".spec.template.spec.volumes[0].name", "value": "cf" }'

那怎么办呢? kubectl patch 的语法是什么?

最佳答案

使用jq ,用于转换 JSON 文档的“awk for json”。我不确定您要确切更改哪些字段,但是如何调整它应该从 jq 参数中清楚。

$ cat x.json 
{
"apiVersion": "apps/v1beta1",
"kind": "Deployment",
"foo": "myapp"
"metadata": {
"name": "myapp"
},
"spec": {
"template": {
"metadata": {
"labels": {
"app": "myapp"
}
}
}
}
}

$ jq '
.metadata.name = "cm-myapp-123"
| .spec.template.metadata.labels.app = "cm-myapp-123"
| .
' < x.json
{
"apiVersion": "apps/v1beta1",
"kind": "Deployment",
"foo": "myapp"
"metadata": {
"name": "cm-myapp-123"
},
"spec": {
"template": {
"metadata": {
"labels": {
"app": "cm-myapp-123"
}
}
}
}
}

关于json - 如何使用脚本更改 Deployment 的 ConfigMap?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46707697/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com