如何使用 go-template 替换 kubectl 输出中的 JSON 值?
How to replace JSON value in kubectl output using go-template?
我有一个 configMap,我想使用其中最后应用的配置创建一个备份 configMap。
我使用以下命令获取最后应用的配置:
kubectl get cm app-map -n app-space \
-o go-template \
--template='{{index .metadata "annotations" "kubectl.kubernetes.io/last-applied-configuration"}}' > backup.json
它returns是这样的[backup.json]的内容:
{"kind":"ConfigMap","apiVersion":"v1","metadata":{"name":"app-map","creationTimestamp":null},"data":{"app.yml":"xxxxxxxxx","config.yml":"yyyyyyyyy"}}
现在,我希望我的备份 configMap 具有不同的名称。所以,我想将 .metadata.name
从 app-map
更改为 app-map-backup
。
有什么方法可以用 kubectl
和 -o go-template
实现吗?我想在将其写入 backup.json
文件之前更改名称。
我知道我可以使用 jq
来做到这一点,但我没有在我使用 kubectl
.
的服务器上安装 jq
的权限
你不能仅使用 kubectl 来做到这一点。但还有其他方法。
您可以从 official jq website 下载静态链接的 jq 二进制文件:
wget https://github.com/stedolan/jq/releases/download/jq-1.6/jq-linux64
chmod +x jq-linux64
然后你可以像下面这样使用这个二进制文件:
kubectl -o go-template [...] | ./jq-linux64 ...
或者您可以使用 sed
:
kubectl -o go-template [...] | sed 's/"name":"app-map"/"name":"app-map-backup"/'
您可以使用 kubectl bulk
插件。以下命令将复制您的配置映射
# get resource(s) and create with field(name) change
kubectl bulk configmap app-map -n app-space create name app-mapp-backup
kubectl bulk使用起来很强大,建议查看samples。
我有一个 configMap,我想使用其中最后应用的配置创建一个备份 configMap。
我使用以下命令获取最后应用的配置:
kubectl get cm app-map -n app-space \
-o go-template \
--template='{{index .metadata "annotations" "kubectl.kubernetes.io/last-applied-configuration"}}' > backup.json
它returns是这样的[backup.json]的内容:
{"kind":"ConfigMap","apiVersion":"v1","metadata":{"name":"app-map","creationTimestamp":null},"data":{"app.yml":"xxxxxxxxx","config.yml":"yyyyyyyyy"}}
现在,我希望我的备份 configMap 具有不同的名称。所以,我想将 .metadata.name
从 app-map
更改为 app-map-backup
。
有什么方法可以用 kubectl
和 -o go-template
实现吗?我想在将其写入 backup.json
文件之前更改名称。
我知道我可以使用 jq
来做到这一点,但我没有在我使用 kubectl
.
jq
的权限
你不能仅使用 kubectl 来做到这一点。但还有其他方法。
您可以从 official jq website 下载静态链接的 jq 二进制文件:
wget https://github.com/stedolan/jq/releases/download/jq-1.6/jq-linux64
chmod +x jq-linux64
然后你可以像下面这样使用这个二进制文件:
kubectl -o go-template [...] | ./jq-linux64 ...
或者您可以使用 sed
:
kubectl -o go-template [...] | sed 's/"name":"app-map"/"name":"app-map-backup"/'
您可以使用 kubectl bulk
插件。以下命令将复制您的配置映射
# get resource(s) and create with field(name) change
kubectl bulk configmap app-map -n app-space create name app-mapp-backup
kubectl bulk使用起来很强大,建议查看samples。