我正在嘗試使用 kubectl 修補一個秘密
kubectl patch secret operator-secrets --namespace kube-system --context=cluster1 --patch "'{\"data\": {\"FOOBAR\": \"$FOOBAR\"}}'"
但我收到錯誤
來自服務器的錯誤(BadRequest):json:無法將字串解組為 map[string]interface {} 型別的 Go 值
如果我使用 echo 運行命令,它似乎是一個有效的 JSON
$ echo "'{\"data\": {\"FOOBAR\": \"$FOOBAR\"}}'"
'{"data": {"FOOBAR": "value that I want"}}'
可以是什么?
uj5u.com熱心網友回復:
如果我使用 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\"}}"
uj5u.com熱心網友回復:
發現錯誤
kubectl patch secret operator-secrets --namespace kube-system --context=standard-cluster-1 --patch "{\"data\": {\"FOOBAR\": \"$FOOBAR\"}}"
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/456896.html
