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 5c6a0a02..47f21690 100644 --- a/plugins/module_utils/common.py +++ b/plugins/module_utils/common.py @@ -286,8 +286,9 @@ def find_resource(self, kind, api_version, fail=False): 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 = [] @@ -315,14 +316,14 @@ def kubernetes_facts(self, kind, api_version, name=None, namespace=None, label_s 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 @@ ''' 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