From 2474ef1b2ca5640cd1ff040ebb2b562457049608 Mon Sep 17 00:00:00 2001 From: Fabian von Feilitzsch Date: Sun, 29 Nov 2020 23:56:54 -0500 Subject: [PATCH] k8s_info now outputs whether the api was found (#308) --- molecule/default/tasks/info.yml | 23 +++++++++++++++++++++++ plugins/module_utils/common.py | 13 +++++++------ plugins/modules/k8s_info.py | 5 +++++ 3 files changed, 35 insertions(+), 6 deletions(-) diff --git a/molecule/default/tasks/info.yml b/molecule/default/tasks/info.yml index 2b7fedaf..891f3dcc 100644 --- a/molecule/default/tasks/info.yml +++ b/molecule/default/tasks/info.yml @@ -159,6 +159,29 @@ - multi_pod_two_remove is successful - multi_pod_two_remove.changed + - name: "Look for existing API" + k8s_info: + api_version: apps/v1 + kind: Deployment + register: existing_api + + - name: Check if we informed the user the api does exist + assert: + that: + - existing_api.api_found + + - name: "Look for non-existent API" + k8s_info: + api_version: pleasedonotcreatethisresource.example.com/v7 + kind: DoesNotExist + register: dne_api + + - name: Check if we informed the user the api does not exist + assert: + that: + - not dne_api.resources + - not dne_api.api_found + always: - name: Remove namespace k8s: diff --git a/plugins/module_utils/common.py b/plugins/module_utils/common.py index 9c7c1f26..5fccdb25 100644 --- a/plugins/module_utils/common.py +++ b/plugins/module_utils/common.py @@ -288,8 +288,9 @@ class K8sAnsibleMixin(object): def kubernetes_facts(self, kind, api_version, name=None, namespace=None, label_selectors=None, field_selectors=None, wait=False, wait_sleep=5, wait_timeout=120, state='present', condition=None): resource = self.find_resource(kind, api_version) - if not resource: - return dict(resources=[]) + api_found = bool(resource) + if not api_found: + return dict(resources=[], msg='Failed to find API for resource with apiVersion "{0}" and kind "{1}"'.format(api_version, kind), api_found=False) if not label_selectors: label_selectors = [] @@ -317,14 +318,14 @@ class K8sAnsibleMixin(object): self.fail(msg="Failed to gather information about %s(s) even" " after waiting for %s seconds" % (res.get('kind'), duration)) satisfied_by.append(res) - return dict(resources=satisfied_by) + return dict(resources=satisfied_by, api_found=True) result = result.to_dict() except (openshift.dynamic.exceptions.BadRequestError, openshift.dynamic.exceptions.NotFoundError): - return dict(resources=[]) + return dict(resources=[], api_found=True) if 'items' in result: - return dict(resources=result['items']) - return dict(resources=[result]) + return dict(resources=result['items'], api_found=True) + return dict(resources=[result], api_found=True) def remove_aliases(self): """ diff --git a/plugins/modules/k8s_info.py b/plugins/modules/k8s_info.py index f7a7a0ca..b043689e 100644 --- a/plugins/modules/k8s_info.py +++ b/plugins/modules/k8s_info.py @@ -112,6 +112,11 @@ EXAMPLES = r''' ''' RETURN = r''' +api_found: + description: + - Whether the specified api_version and kind were successfully mapped to an existing API on the targeted cluster. + returned: always + type: bool resources: description: - The object(s) that exists