如何使用go-template替换kubectl输出中的JSON值?

问题描述

我有一个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

它返回如下内容[backup.json的内容]:

{"kind":"ConfigMap","apiVersion":"v1","metadata":{"name":"app-map","creationTimestamp":null},"data":{"app.yml":"xxxxxxxxx","config.yml":"yyyyyyyyy"}}

现在,我希望备份configMap具有不同的名称。因此,我想将.metadata.nameapp-map更改为app-map-backup

有没有一种方法可以通过kubectl-o go-template实现?我想先更改名称,然后再将其写入backup.json文件。

我知道我可以使用jq来做到这一点,但是我没有权限在正在使用jq的服务器上安装kubectl

解决方法

您不能仅使用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大量使用非常强大,我建议检查samples

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...