我正试图使用kubectl 修补一个秘密
kubectl patch secret operator-secrets --namespace kube-system --context=cluster1 --patch "'{"data": {"FOOBAR": "$FOOBAR"}}'"
但是我收到错误
服务器错误(BadRequest(:json:无法将字符串解组为类型map[string]接口{}的Go值
如果我使用echo运行命令,它似乎是一个有效的JSON
$ echo "'{"data": {"FOOBAR": "$FOOBAR"}}'"
'{"data": {"FOOBAR": "value that I want"}}'
可以是什么?
如果我使用echo运行命令,它似乎是一个有效的JSON
事实上,它不是。仔细查看输出的第一个字符:
'{"data": {"FOOBAR": "value that I want"}}'
您的";JSON";字符串以一个无效字符的单引号开头。要获得有效的JSON,您需要将命令重写为如下所示:
echo "{"data": {"FOOBAR": "$FOOBAR"}}"
我们可以使用类似jq
的东西来确认这是有效的JSON命令:
$ echo "{"data": {"FOOBAR": "$FOOBAR"}}" | jq .
{
"data": {
"FOOBAR": "value that i want"
}
}
使您的补丁命令看起来像:
kubectl patch secret operator-secrets
--namespace kube-system
--context=cluster1
--patch "{"data": {"FOOBAR": "$FOOBAR"}}"
但是,尽管该补丁现在是有效的JSON,但它仍然会失败一个新错误:
The request is invalid: patch: Invalid value: "map[data:map[FOOBAR:value that i want]]": error decoding from json: illegal base64 data at input byte 5
data
映射中项目的值必须是base64编码值。您可以自己对值进行base64编码:
kubectl patch secret operator-secrets
--namespace kube-system
--context=cluster1
--patch "{"data": {"FOOBAR": "$(base64 <<<"$FOOBAR")"}}"
或者使用stringData
代替:
kubectl patch secret operator-secrets
--namespace kube-system
--context=cluster1
--patch "{"stringData": {"FOOBAR": "$FOOBAR"}}"
发现错误
kubectl patch secret operator-secrets --namespace kube-system --context=standard-cluster-1 --patch "{"data": {"FOOBAR": "$FOOBAR"}}"