1

尝试修补我的自定义资源以将额外元素添加到数组中。

使用 kubectl 可以正常工作:

kubectl patch my-resource default --type=json -p '[ { "op":"add", "path": "/spec/data/-", "value": "3342, 43243.343, 434343" } ]' -v 9

但无法使用 Python 使其工作:

body = '[ { "op":"add", "path":"/spec/data/-", "value": "3342, 43243.343, 434343" } ]'

api_response = api_instance.patch_namespaced_custom_object(group, version, namespace, plural, name, json.loads(body) )

得到回应

"status":"Failure","message":"json: cannot unmarshal array into Go value of type map[string]interface {}","code":500

奇怪的是,当我放下 [ ] 并通过 {}

api_response = api_instance.patch_namespaced_custom_object(group, version, namespace, plural, name, json.loads('{ "spec": { "data": [ "3342, 43243.343, 434343" ] } } ') )

它有效,但效果不是我想要的——它完全覆盖了“数据”数组,而我想追加。

我错过了什么?

4

1 回答 1

0

可能为时已晚,但无论如何……

Kubernetes Python API 仅支持 JSON-merge 补丁策略:https ://github.com/kubernetes-client/python/blob/96dade6021dc2e9ee1430172e1b65d9e9e232b10/kubernetes/client/api/custom_objects_api.py#L2943

该策略意味着您不能扩展数组:https ://kubernetes.io/docs/tasks/manage-kubernetes-objects/update-api-object-kubectl-patch/#use-a-json-merge-patch-to -更新部署

于 2021-09-30T11:59:20.000 回答