kubectl返回无法将字符串解组为类型为map[string]接口{}的Go值



我正试图使用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"}}"

相关内容

  • 没有找到相关文章

最新更新