diff --git a/changelogs/fragments/exception.yml b/changelogs/fragments/exception.yml new file mode 100644 index 00000000..1f6f1645 --- /dev/null +++ b/changelogs/fragments/exception.yml @@ -0,0 +1,3 @@ +--- +bugfixes: +- import exception from ``kubernetes.client.rest``. diff --git a/plugins/modules/k8s_drain.py b/plugins/modules/k8s_drain.py index ecf0fba7..11b7dbcd 100644 --- a/plugins/modules/k8s_drain.py +++ b/plugins/modules/k8s_drain.py @@ -124,9 +124,12 @@ result: returned: success type: str """ + import copy -from datetime import datetime import time +import traceback + +from datetime import datetime from ansible_collections.kubernetes.core.plugins.module_utils.ansiblemodule import ( AnsibleModule, ) @@ -137,12 +140,26 @@ from ansible.module_utils._text import to_native try: from kubernetes.client.api import core_v1_api - from kubernetes.client.models import V1beta1Eviction, V1DeleteOptions + from kubernetes.client.models import V1DeleteOptions from kubernetes.client.exceptions import ApiException except ImportError: # ImportError are managed by the common module already. pass +HAS_EVICTION_API = True +k8s_import_exception = None +K8S_IMP_ERR = None + +try: + from kubernetes.client.models import V1beta1Eviction as v1_eviction +except ImportError: + try: + from kubernetes.client.models import V1Eviction as v1_eviction + except ImportError as e: + k8s_import_exception = e + K8S_IMP_ERR = traceback.format_exc() + HAS_EVICTION_API = False + def filter_pods(pods, force, ignore_daemonset, delete_emptydir_data): k8s_kind_mirror = "kubernetes.io/config.mirror" @@ -311,7 +328,7 @@ class K8sDrainAnsible(object): name=name, namespace=namespace, body=body ) else: - body = V1beta1Eviction(**definition) + body = v1_eviction(**definition) self._api_instance.create_namespaced_pod_eviction( name=name, namespace=namespace, body=body ) @@ -496,6 +513,13 @@ def argspec(): def main(): module = AnsibleModule(argument_spec=argspec()) + if not HAS_EVICTION_API: + module.fail_json( + msg="The kubernetes Python library missing with V1Eviction API", + exception=K8S_IMP_ERR, + error=to_native(k8s_import_exception), + ) + k8s_drain = K8sDrainAnsible(module) k8s_drain.execute_module() diff --git a/plugins/modules/k8s_exec.py b/plugins/modules/k8s_exec.py index 936fb2c4..f13ec7df 100644 --- a/plugins/modules/k8s_exec.py +++ b/plugins/modules/k8s_exec.py @@ -142,7 +142,7 @@ from ansible_collections.kubernetes.core.plugins.module_utils.common import ( try: from kubernetes.client.apis import core_v1_api from kubernetes.stream import stream - from kubernetes.client.rest import ApiException + from kubernetes.client.exceptions import ApiException except ImportError: # ImportError are managed by the common module already. pass diff --git a/plugins/modules/k8s_taint.py b/plugins/modules/k8s_taint.py index 4234fd6a..aadb6cd5 100644 --- a/plugins/modules/k8s_taint.py +++ b/plugins/modules/k8s_taint.py @@ -139,7 +139,7 @@ from ansible_collections.kubernetes.core.plugins.module_utils.args_common import try: from kubernetes.client.api import core_v1_api - from kubernetes.dynamic.exceptions import ApiException + from kubernetes.client.exceptions import ApiException except ImportError: # ImportError are managed by the common module already. pass