From c2ab6219fa9d89fe2823a25091f8665fa89d531b Mon Sep 17 00:00:00 2001 From: Abhijeet Kasurde Date: Thu, 15 Apr 2021 14:53:53 +0530 Subject: [PATCH] k8s: handle ``fail_json`` API from inventory plugin * inventory plugin does not have module object so fail_json will not work. Use AnsibleError instead of ``fail_json`` Fixes: #57 Signed-off-by: Abhijeet Kasurde --- changelogs/fragments/fail_json.yml | 2 ++ plugins/inventory/k8s.py | 9 ++++----- plugins/module_utils/common.py | 6 ++++-- plugins/module_utils/exceptions.py | 11 +++++++++++ 4 files changed, 21 insertions(+), 7 deletions(-) create mode 100644 changelogs/fragments/fail_json.yml create mode 100644 plugins/module_utils/exceptions.py diff --git a/changelogs/fragments/fail_json.yml b/changelogs/fragments/fail_json.yml new file mode 100644 index 00000000000..f95b34e2611 --- /dev/null +++ b/changelogs/fragments/fail_json.yml @@ -0,0 +1,2 @@ +bugfixes: +- k8s - handle ``fail_json`` API from inventory plugin (https://github.com/ansible-collections/kubernetes.core/issues/57). diff --git a/plugins/inventory/k8s.py b/plugins/inventory/k8s.py index ede54375531..a4b6e88030d 100644 --- a/plugins/inventory/k8s.py +++ b/plugins/inventory/k8s.py @@ -117,7 +117,10 @@ import json from ansible.errors import AnsibleError -from ansible_collections.community.kubernetes.plugins.module_utils.common import K8sAnsibleMixin, HAS_K8S_MODULE_HELPER, k8s_import_exception +from ansible_collections.kubernetes.core.plugins.module_utils.common import ( + K8sAnsibleMixin, HAS_K8S_MODULE_HELPER, k8s_import_exception +) +from ansible_collections.kubernetes.core.plugins.module_utils.exceptions import K8sInventoryException from ansible.plugins.inventory import BaseInventoryPlugin, Constructable, Cacheable try: @@ -137,10 +140,6 @@ def format_dynamic_api_exc(exc): return '%s Reason: %s' % (exc.status, exc.reason) -class K8sInventoryException(Exception): - pass - - class InventoryModule(BaseInventoryPlugin, Constructable, Cacheable, K8sAnsibleMixin): NAME = 'community.kubernetes.k8s' diff --git a/plugins/module_utils/common.py b/plugins/module_utils/common.py index 3c44f5c9996..b5486c704e9 100644 --- a/plugins/module_utils/common.py +++ b/plugins/module_utils/common.py @@ -26,12 +26,12 @@ from datetime import datetime from distutils.version import LooseVersion - from ansible.module_utils.basic import AnsibleModule, missing_required_lib from ansible.module_utils.six import iteritems, string_types from ansible.module_utils._text import to_native, to_bytes, to_text from ansible.module_utils.common.dict_transformations import dict_merge from ansible.module_utils.parsing.convert_bool import boolean +from ansible_collections.kubernetes.core.plugins.module_utils.exceptions import K8sInventoryException K8S_IMP_ERR = None @@ -425,7 +425,9 @@ def diff_objects(self, existing, new): return True, result def fail(self, msg=None): - self.fail_json(msg=msg) + if hasattr(self, 'fail_json'): + self.fail_json(msg=msg) + raise K8sInventoryException(msg) def _wait_for(self, resource, name, namespace, predicate, sleep, timeout, state): start = datetime.now() diff --git a/plugins/module_utils/exceptions.py b/plugins/module_utils/exceptions.py new file mode 100644 index 00000000000..4d1878a5927 --- /dev/null +++ b/plugins/module_utils/exceptions.py @@ -0,0 +1,11 @@ +# -*- coding: utf-8 -*- +# Copyright: (c) 2021, Ansible Project +# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) + +from __future__ import absolute_import, division, print_function + +__metaclass__ = type + + +class K8sInventoryException(Exception): + pass