Description
Actual behaviour
v10.0.0 was released this night. Since then, custom resource patching is broken:
HTTP 415 "Unsupported Media Type" when patching the custom resources.
Traceback (most recent call last):
File "kopf-134.py", line 15, in <module>
rsp = api.patch_namespaced_custom_object(**request_kwargs)
File "/Users/svasilyev/.pyenv/versions/kopf/lib/python3.7/site-packages/kubernetes/client/apis/custom_objects_api.py", line 1951, in patch_namespaced_custom_object
(data) = self.patch_namespaced_custom_object_with_http_info(group, version, namespace, plural, name, body, **kwargs)
File "/Users/svasilyev/.pyenv/versions/kopf/lib/python3.7/site-packages/kubernetes/client/apis/custom_objects_api.py", line 2057, in patch_namespaced_custom_object_with_http_info
collection_formats=collection_formats)
File "/Users/svasilyev/.pyenv/versions/kopf/lib/python3.7/site-packages/kubernetes/client/api_client.py", line 334, in call_api
_return_http_data_only, collection_formats, _preload_content, _request_timeout)
File "/Users/svasilyev/.pyenv/versions/kopf/lib/python3.7/site-packages/kubernetes/client/api_client.py", line 168, in __call_api
_request_timeout=_request_timeout)
File "/Users/svasilyev/.pyenv/versions/kopf/lib/python3.7/site-packages/kubernetes/client/api_client.py", line 393, in request
body=body)
File "/Users/svasilyev/.pyenv/versions/kopf/lib/python3.7/site-packages/kubernetes/client/rest.py", line 286, in PATCH
body=body)
File "/Users/svasilyev/.pyenv/versions/kopf/lib/python3.7/site-packages/kubernetes/client/rest.py", line 222, in request
raise ApiException(http_resp=r)
kubernetes.client.rest.ApiException: (415)
Reason: Unsupported Media Type
HTTP response headers: HTTPHeaderDict({'Content-Type': 'application/json', 'Date': 'Thu, 04 Jul 2019 11:53:38 GMT', 'Content-Length': '263'})
HTTP response body: {"kind":"Status","apiVersion":"v1","metadata":{},"status":"Failure","message":"the body of the request was in an unknown format - accepted media types include: application/json-patch+json, application/merge-patch+json","reason":"UnsupportedMediaType","code":415}
When tracing step by step, the actual Content-Type used is application/json-patch+json
, which should match the supported types from the error message.
There is no way to control Content-Type from the user side, i.e. when calling the patch-method.
Expected behaviour
Patching works smoothly.
It all works fine if installed as
pip install 'kubernetes<10.0.0'
Steps to reproduce:
minikube start --kubernetes-version=v1.15.0
kubectl apply -f https://raw.githubusercontent.com/zalando-incubator/kopf/master/examples/crd.yaml
kubectl apply -f https://raw.githubusercontent.com/zalando-incubator/kopf/master/examples/obj.yaml
Any other CRD should show the same behaviour (probably); this one is just for a quick example.
pip install kubernetes==10.0.0
Then a Python script:
import kubernetes
kubernetes.config.load_kube_config() # developer's config files
request_kwargs = {
'group': 'zalando.org',
'version': 'v1',
'plural': 'kopfexamples',
'name': 'kopf-example-1',
'namespace': 'default',
'body': {},
}
api = kubernetes.client.CustomObjectsApi()
rsp = api.patch_namespaced_custom_object(**request_kwargs)
print(rsp)
Any body
content cause the same error, event the empty body — so, I guess, it is not about the patch-content itself.
Versions
Kubernetes: 1.15.0
kubernetes==10.0.0
Python 3.7
Notes
Might be related: