diff --git a/kubernetes/base/dynamic/client.py b/kubernetes/base/dynamic/client.py index e4f2e1487e..352e11a809 100644 --- a/kubernetes/base/dynamic/client.py +++ b/kubernetes/base/dynamic/client.py @@ -195,10 +195,13 @@ def watch(self, resource, namespace=None, name=None, label_selector=None, field_ """ if not watcher: watcher = watch.Watch() + # Use field selector to query for named instance so the watch parameter is handled properly. + if name: + field_selector = f"metadata.name={name}" + for event in watcher.stream( resource.get, namespace=namespace, - name=name, field_selector=field_selector, label_selector=label_selector, resource_version=resource_version, diff --git a/kubernetes/base/dynamic/test_client.py b/kubernetes/base/dynamic/test_client.py index 2c31559416..2043226a5b 100644 --- a/kubernetes/base/dynamic/test_client.py +++ b/kubernetes/base/dynamic/test_client.py @@ -468,6 +468,11 @@ def test_configmap_apis(self): name=name, namespace='default', label_selector="e2e-test=true") self.assertEqual(name, resp.metadata.name) + count = 0 + for _ in client.watch(api, timeout=10, namespace="default", name=name): + count += 1 + self.assertTrue(count > 0, msg="no events received for watch") + test_configmap['data']['config.json'] = "{}" resp = api.patch( name=name, namespace='default', body=test_configmap)