Interaction with Custom Resource Objects failing
What happened (please include outputs or screenshots):
I have create a CRD and a Custom Object. When I try to pull the Custom Resource Status or try to patch the Custom Resource status, the request fails with unable to find the resource.
What you expected to happen:
The request should find the Custom Requests and patch it.
How to reproduce it (as minimally and precisely as possible):
import kubernetes
import os
def main():
print("Loading kube config...")
kubernetes.config.load_kube_config()
proxy_url = os.environ.get("HTTP_PROXY", os.environ.get("http_proxy", None))
kubernetes.client.Configuration._default.proxy = proxy_url
api_instance = kubernetes.client.CustomObjectsApi()
namespace = "default"
# Works
custom_api_response = api_instance.get_namespaced_custom_object(
group="example.com",
version="v1alpha1",
namespace=namespace,
plural="podrequests",
name="test-req",
)
print("Custom resource found: %s", custom_api_response)
# Fails
custom_api_response = api_instance.get_namespaced_custom_object_status(
group="example.com",
version="v1alpha1",
namespace=namespace,
plural="podrequests",
name="test-req",
)
patch = {"status": {"status": "complete"}}
# Fails
response = api_instance.patch_namespaced_custom_object_status(
group="example.com",
version="v1alpha1",
namespace=namespace,
plural="podrequests",
name="test-req",
body=patch
)
if __name__ == "__main__":
main()
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
name: podrequests.example.com
spec:
group: example.com
names:
kind: PodRequest
plural: podrequests
singular: podrequest
shortNames:
- podr
scope: Namespaced
versions:
- name: v1alpha1
served: true
storage: true
schema:
openAPIV3Schema:
type: object
properties:
spec:
type: object
properties:
podSpec:
type: object
x-kubernetes-preserve-unknown-fields: true
description: "Full Kubernetes pod specification for machine creation"
count:
type: integer
description: "Number of machines to provision"
status:
type: object
properties:
status:
type: string
enum: [running, complete, complete_with_error]
description: "Overall request status"
message:
type: string
description: "Additional status information"
apiVersion: example.com/v1alpha1
kind: PodRequest
metadata:
name: "test-req"
spec:
podSpec:
apiVersion: v1
kind: Pod
metadata:
spec:
containers:
- name: hello
image: xxxxxxxxxxxx:2025-02-01-02-04
command: ['sh', '-c', 'echo "Hello, Kubernetes!" && sleep infinity']
count: 1
status:
status: running
message: "Request is being processed"
Loading kube config...
Custom resource found: %s {'apiVersion': 'example.com/v1alpha1', 'kind': 'PodRequest', 'metadata': {'annotations': {'kubectl.kubernetes.io/last-applied-configuration': '{"apiVersion":"example.com/v1alpha1","kind":"PodRequest","metadata":{"annotations":{},"name":"test-req","namespace":"default"},"spec":{"count":1,"podSpec":{"apiVersion":"v1","kind":"Pod","metadata":null,"spec":{"containers":[{"command":["sh","-c","echo \\"Hello, Kubernetes!\\" \\u0026\\u0026 sleep infinity"],"image":"xxxxxxxxxxxx:2025-02-01-02-04","name":"hello"}]}}},"status":{"message":"Request is being processed","status":"running"}}\n'}, 'creationTimestamp': '2025-04-05T11:33:53Z', 'generation': 1, 'managedFields': [{'apiVersion': 'example.com/v1alpha1', 'fieldsType': 'FieldsV1', 'fieldsV1': {'f:metadata': {'f:annotations': {'.': {}, 'f:kubectl.kubernetes.io/last-applied-configuration': {}}}, 'f:spec': {'.': {}, 'f:count': {}, 'f:podSpec': {'.': {}, 'f:apiVersion': {}, 'f:kind': {}, 'f:spec': {'.': {}, 'f:containers': {}}}}, 'f:status': {'.': {}, 'f:message': {}, 'f:status': {}}}, 'manager': 'kubectl-client-side-apply', 'operation': 'Update', 'time': '2025-04-05T11:33:53Z'}], 'name': 'test-req', 'namespace': 'default', 'resourceVersion': '4505753', 'uid': 'fc01f9f7-a216-4378-9364-7af71423cbf7'}, 'spec': {'count': 1, 'podSpec': {'apiVersion': 'v1', 'kind': 'Pod', 'spec': {'containers': [{'command': ['sh', '-c', 'echo "Hello, Kubernetes!" && sleep infinity'], 'image': 'xxxxxxxxxxxx:2025-02-01-02-04', 'name': 'hello'}]}}}, 'status': {'message': 'Request is being processed', 'status': 'running'}}
Traceback (most recent call last):
File "xxxxxxxxxxxxxxxxxxxxxxxxx/test_crd.py", line 36, in <module>
main()
File "xxxxxxxxxxxxxxxxxxxxxxxxx/test_crd.py", line 25, in main
response = api_instance.patch_namespaced_custom_object_status(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/venv/lib/python3.12/site-packages/kubernetes/client/api/custom_objects_api.py", line 3530, in patch_namespaced_custom_object_status
return self.patch_namespaced_custom_object_status_with_http_info(group, version, namespace, plural, name, body, **kwargs) # noqa: E501
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/venv/lib/python3.12/site-packages/kubernetes/client/api/custom_objects_api.py", line 3665, in patch_namespaced_custom_object_status_with_http_info
return self.api_client.call_api(
^^^^^^^^^^^^^^^^^^^^^^^^^
File "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/venv/lib/python3.12/site-packages/kubernetes/client/api_client.py", line 348, in call_api
return self.__call_api(resource_path, method,
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/venv/lib/python3.12/site-packages/kubernetes/client/api_client.py", line 180, in __call_api
response_data = self.request(
^^^^^^^^^^^^^
File "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/venv/lib/python3.12/site-packages/kubernetes/client/api_client.py", line 407, in request
return self.rest_client.PATCH(url,
^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/venv/lib/python3.12/site-packages/kubernetes/client/rest.py", line 299, in PATCH
return self.request("PATCH", url,
^^^^^^^^^^^^^^^^^^^^^^^^^^
File "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/venv/lib/python3.12/site-packages/kubernetes/client/rest.py", line 238, in request
raise ApiException(http_resp=r)
kubernetes.client.exceptions.ApiException: (404)
Reason: Not Found
HTTP response headers: HTTPHeaderDict({'Audit-Id': '22068da1-ed18-498b-9a72-07847f0b2318', 'Cache-Control': 'no-cache, private', 'Content-Type': 'application/json', 'X-Kubernetes-Pf-Flowschema-Uid': 'c813a998-781a-4491-81e4-b4efd3dfb7dc', 'X-Kubernetes-Pf-Prioritylevel-Uid': '660d6ee5-e61e-4378-b46a-30a880e6213b', 'Date': 'Sat, 05 Apr 2025 11:43:10 GMT', 'Content-Length': '232'})
HTTP response body: {"kind":"Status","apiVersion":"v1","metadata":{},"status":"Failure","message":"podrequests.example.com \"test-req\" not found","reason":"NotFound","details":{"name":"test-req","group":"example.com","kind":"podrequests"},"code":404}
Anything else we need to know?:
Environment:
- Kubernetes version (
kubectl version):
Client Version: v1.31.2
Kustomize Version: v5.4.2
Server Version: v1.31.6-eks-bc803b4
-
OS (e.g., MacOS 10.13.6): Red Hat Enterprise Linux release 8.10
-
Python version (
python --version) Python 3.12.7 -
Python client version (
pip list | grep kubernetes) kubernetes 32.0.1
/help
@yliaog: This request has been marked as needing help from a contributor.
Guidelines
Please ensure that the issue body includes answers to the following questions:
- Why are we solving this issue?
- To address this issue, are there any code changes? If there are code changes, what needs to be done in the code and what places can the assignee treat as reference points?
- Does this issue have zero to low barrier of entry?
- How can the assignee reach out to you for help?
For more details on the requirements of such an issue, please see here and ensure that they are met.
If this request no longer meets these requirements, the label can be removed
by commenting with the /remove-help command.
In response to this:
/help
Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the kubernetes-sigs/prow repository.
I would like to proceed with the work to resolve this issue.