如何使用go模板替换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做到这一点,但我没有在使用kubectl的服务器上安装jq的权限。

您可以使用kubectl bulk插件。下面的命令将复制您的配置映射

# get resource(s) and create with field(name) change 
kubectl bulk configmap app-map -n app-space create name app-mapp-backup

Kuectl散装使用非常强大,我建议检查样品。

您不能仅使用kubectl来完成此操作。但还有其他方法。

您可以从jq官方网站下载静态链接的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"/'

相关内容

  • 没有找到相关文章

最新更新