From 9babd16942444218ebfa8a81aa26538ff2acf8d0 Mon Sep 17 00:00:00 2001 From: Will Thames Date: Tue, 12 Feb 2019 06:43:42 +1000 Subject: [PATCH] k8s handle absent resources when waiting (#51682) * k8s wait - don't try to call to_dict on None Need to ensure that the resource dict is correctly returned for absent resources * Cope with resources without a namespace Some resources (e.g. ClusterRoleBinding) do not have a Namespace. Handle the lack of a namespace key. --- lib/ansible/module_utils/k8s/raw.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/lib/ansible/module_utils/k8s/raw.py b/lib/ansible/module_utils/k8s/raw.py index 58909c9294e..c7a8cf1bfcf 100644 --- a/lib/ansible/module_utils/k8s/raw.py +++ b/lib/ansible/module_utils/k8s/raw.py @@ -375,11 +375,14 @@ class KubernetesRawModule(KubernetesAnsibleModule): try: response = resource.get(name=name, namespace=namespace) if predicate(response): - return True, response.to_dict(), _wait_for_elapsed() + if response: + return True, response.to_dict(), _wait_for_elapsed() + else: + return True, {}, _wait_for_elapsed() time.sleep(timeout // 20) except NotFoundError: if state == 'absent': - return True, response.to_dict(), _wait_for_elapsed() + return True, {}, _wait_for_elapsed() if response: response = response.to_dict() return False, response, _wait_for_elapsed() @@ -415,4 +418,4 @@ class KubernetesRawModule(KubernetesAnsibleModule): predicate = waiter.get(kind, lambda x: True) else: predicate = _resource_absent - return self._wait_for(resource, definition['metadata']['name'], definition['metadata']['namespace'], predicate, timeout, state) + return self._wait_for(resource, definition['metadata']['name'], definition['metadata'].get('namespace'), predicate, timeout, state)