diff --git a/lib/ansible/modules/monitoring/zabbix/zabbix_action.py b/lib/ansible/modules/monitoring/zabbix/zabbix_action.py index 8ebd877c789db1..79f0520d821329 100644 --- a/lib/ansible/modules/monitoring/zabbix/zabbix_action.py +++ b/lib/ansible/modules/monitoring/zabbix/zabbix_action.py @@ -439,13 +439,17 @@ sample: 'Action Deleted: Register webservers, ID: 0001' ''' + +import traceback + try: from zabbix_api import ZabbixAPI HAS_ZABBIX_API = True except ImportError: + ZBX_IMP_ERR = traceback.format_exc() HAS_ZABBIX_API = False -from ansible.module_utils.basic import AnsibleModule +from ansible.module_utils.basic import AnsibleModule, missing_required_lib class Zapi(object): @@ -1966,7 +1970,7 @@ def main(): ) if not HAS_ZABBIX_API: - module.fail_json(msg="Missing required zabbix-api module (check docs or install with: pip install zabbix-api)") + module.fail_json(msg=missing_required_lib('zabbix-api', url='https://pypi.org/project/zabbix-api/'), exception=ZBX_IMP_ERR) server_url = module.params['server_url'] login_user = module.params['login_user'] diff --git a/lib/ansible/modules/monitoring/zabbix/zabbix_group.py b/lib/ansible/modules/monitoring/zabbix/zabbix_group.py index bcf58fa51b7a08..29a3cd852f3956 100644 --- a/lib/ansible/modules/monitoring/zabbix/zabbix_group.py +++ b/lib/ansible/modules/monitoring/zabbix/zabbix_group.py @@ -75,15 +75,19 @@ when: inventory_hostname==groups['group_name'][0] ''' + +import traceback + try: from zabbix_api import ZabbixAPI, ZabbixAPISubClass from zabbix_api import Already_Exists HAS_ZABBIX_API = True except ImportError: + ZBX_IMP_ERR = traceback.format_exc() HAS_ZABBIX_API = False -from ansible.module_utils.basic import AnsibleModule +from ansible.module_utils.basic import AnsibleModule, missing_required_lib class HostGroup(object): @@ -146,7 +150,7 @@ def main(): ) if not HAS_ZABBIX_API: - module.fail_json(msg="Missing required zabbix-api module (check docs or install with: pip install zabbix-api)") + module.fail_json(msg=missing_required_lib('zabbix-api', url='https://pypi.org/project/zabbix-api/'), exception=ZBX_IMP_ERR) server_url = module.params['server_url'] login_user = module.params['login_user'] diff --git a/lib/ansible/modules/monitoring/zabbix/zabbix_group_info.py b/lib/ansible/modules/monitoring/zabbix/zabbix_group_info.py index 579051122ad1a1..6665f6098e2299 100644 --- a/lib/ansible/modules/monitoring/zabbix/zabbix_group_info.py +++ b/lib/ansible/modules/monitoring/zabbix/zabbix_group_info.py @@ -56,7 +56,10 @@ timeout: 10 ''' -from ansible.module_utils.basic import AnsibleModule + +import traceback + +from ansible.module_utils.basic import AnsibleModule, missing_required_lib try: from zabbix_api import ZabbixAPI, ZabbixAPISubClass @@ -74,6 +77,7 @@ def __init__(self, server, timeout, user, passwd, validate_certs, **kwargs): HAS_ZABBIX_API = True except ImportError: + ZBX_IMP_ERR = traceback.format_exc() HAS_ZABBIX_API = False @@ -107,7 +111,7 @@ def main(): module.deprecate("The 'zabbix_group_facts' module has been renamed to 'zabbix_group_info'", version='2.13') if not HAS_ZABBIX_API: - module.fail_json(msg="Missing required zabbix-api module (check docs or install with: pip install zabbix-api)") + module.fail_json(msg=missing_required_lib('zabbix-api', url='https://pypi.org/project/zabbix-api/'), exception=ZBX_IMP_ERR) server_url = module.params['server_url'] login_user = module.params['login_user'] diff --git a/lib/ansible/modules/monitoring/zabbix/zabbix_host.py b/lib/ansible/modules/monitoring/zabbix/zabbix_host.py index 493919b3488dd1..ca7a46bc682be3 100644 --- a/lib/ansible/modules/monitoring/zabbix/zabbix_host.py +++ b/lib/ansible/modules/monitoring/zabbix/zabbix_host.py @@ -223,7 +223,9 @@ tls_psk: 123456789abcdef123456789abcdef12 ''' + import copy +import traceback try: from zabbix_api import ZabbixAPI, ZabbixAPISubClass @@ -241,9 +243,10 @@ def __init__(self, server, timeout, user, passwd, validate_certs, **kwargs): HAS_ZABBIX_API = True except ImportError: + ZBX_IMP_ERR = traceback.format_exc() HAS_ZABBIX_API = False -from ansible.module_utils.basic import AnsibleModule +from ansible.module_utils.basic import AnsibleModule, missing_required_lib class Host(object): @@ -657,7 +660,7 @@ def main(): ) if not HAS_ZABBIX_API: - module.fail_json(msg="Missing required zabbix-api module (check docs or install with: pip install zabbix-api)") + module.fail_json(msg=missing_required_lib('zabbix-api', url='https://pypi.org/project/zabbix-api/'), exception=ZBX_IMP_ERR) server_url = module.params['server_url'] login_user = module.params['login_user'] diff --git a/lib/ansible/modules/monitoring/zabbix/zabbix_host_info.py b/lib/ansible/modules/monitoring/zabbix/zabbix_host_info.py index 0104311177cc8d..b384340f004b26 100644 --- a/lib/ansible/modules/monitoring/zabbix/zabbix_host_info.py +++ b/lib/ansible/modules/monitoring/zabbix/zabbix_host_info.py @@ -95,7 +95,10 @@ remove_duplicate: yes ''' -from ansible.module_utils.basic import AnsibleModule + +import traceback + +from ansible.module_utils.basic import AnsibleModule, missing_required_lib try: from zabbix_api import ZabbixAPI, ZabbixAPISubClass @@ -113,6 +116,7 @@ def __init__(self, server, timeout, user, passwd, validate_certs, **kwargs): HAS_ZABBIX_API = True except ImportError: + ZBX_IMP_ERR = traceback.format_exc() HAS_ZABBIX_API = False @@ -190,7 +194,7 @@ def main(): module.deprecate("The 'zabbix_host_facts' module has been renamed to 'zabbix_host_info'", version='2.13') if not HAS_ZABBIX_API: - module.fail_json(msg="Missing required zabbix-api module (check docs or install with: pip install zabbix-api)") + module.fail_json(msg=missing_required_lib('zabbix-api', url='https://pypi.org/project/zabbix-api/'), exception=ZBX_IMP_ERR) server_url = module.params['server_url'] login_user = module.params['login_user'] diff --git a/lib/ansible/modules/monitoring/zabbix/zabbix_hostmacro.py b/lib/ansible/modules/monitoring/zabbix/zabbix_hostmacro.py index 06d5752140f49b..0af3ff104a373d 100644 --- a/lib/ansible/modules/monitoring/zabbix/zabbix_hostmacro.py +++ b/lib/ansible/modules/monitoring/zabbix/zabbix_hostmacro.py @@ -71,6 +71,9 @@ state: present ''' + +import traceback + try: from zabbix_api import ZabbixAPI, ZabbixAPISubClass @@ -82,9 +85,10 @@ def __init__(self, server, timeout, user, passwd, validate_certs, **kwargs): HAS_ZABBIX_API = True except ImportError: + ZBX_IMP_ERR = traceback.format_exc() HAS_ZABBIX_API = False -from ansible.module_utils.basic import AnsibleModule +from ansible.module_utils.basic import AnsibleModule, missing_required_lib class HostMacro(object): @@ -170,7 +174,7 @@ def main(): ) if not HAS_ZABBIX_API: - module.fail_json(msg="Missing required zabbix-api module (check docs or install with: pip install zabbix-api)") + module.fail_json(msg=missing_required_lib('zabbix-api', url='https://pypi.org/project/zabbix-api/'), exception=ZBX_IMP_ERR) server_url = module.params['server_url'] login_user = module.params['login_user'] diff --git a/lib/ansible/modules/monitoring/zabbix/zabbix_maintenance.py b/lib/ansible/modules/monitoring/zabbix/zabbix_maintenance.py index 1d7472bb61c032..15c58a0de9cb20 100644 --- a/lib/ansible/modules/monitoring/zabbix/zabbix_maintenance.py +++ b/lib/ansible/modules/monitoring/zabbix/zabbix_maintenance.py @@ -121,16 +121,19 @@ login_password: pAsSwOrD ''' + import datetime import time +import traceback try: from zabbix_api import ZabbixAPI HAS_ZABBIX_API = True except ImportError: + ZBX_IMP_ERR = traceback.format_exc() HAS_ZABBIX_API = False -from ansible.module_utils.basic import AnsibleModule +from ansible.module_utils.basic import AnsibleModule, missing_required_lib def create_maintenance(zbx, group_ids, host_ids, start_time, maintenance_type, period, name, desc): @@ -288,7 +291,7 @@ def main(): ) if not HAS_ZABBIX_API: - module.fail_json(msg="Missing required zabbix-api module (check docs or install with: pip install zabbix-api)") + module.fail_json(msg=missing_required_lib('zabbix-api', url='https://pypi.org/project/zabbix-api/'), exception=ZBX_IMP_ERR) host_names = module.params['host_names'] host_groups = module.params['host_groups'] diff --git a/lib/ansible/modules/monitoring/zabbix/zabbix_map.py b/lib/ansible/modules/monitoring/zabbix/zabbix_map.py index d6b0fa7266f5e7..6acfda1450e26c 100644 --- a/lib/ansible/modules/monitoring/zabbix/zabbix_map.py +++ b/lib/ansible/modules/monitoring/zabbix/zabbix_map.py @@ -172,34 +172,41 @@ 'status': ['preview'] } + import base64 +import traceback + from io import BytesIO from operator import itemgetter from distutils.version import StrictVersion -from ansible.module_utils.basic import AnsibleModule +from ansible.module_utils.basic import AnsibleModule, missing_required_lib try: import pydotplus HAS_PYDOTPLUS = True except ImportError: + PYDOT_IMP_ERR = traceback.format_exc() HAS_PYDOTPLUS = False try: import webcolors HAS_WEBCOLORS = True except ImportError: + WEBCOLORS_IMP_ERR = traceback.format_exc() HAS_WEBCOLORS = False try: from zabbix_api import ZabbixAPI, ZabbixAPISubClass HAS_ZABBIX_API = True except ImportError: + ZBX_IMP_ERR = traceback.format_exc() HAS_ZABBIX_API = False try: from PIL import Image HAS_PIL = True except ImportError: + PIL_IMP_ERR = traceback.format_exc() HAS_PIL = False @@ -761,13 +768,13 @@ def main(): ) if not HAS_ZABBIX_API: - module.fail_json(msg="Missing required zabbix-api module (check docs or install with: pip install zabbix-api)") + module.fail_json(msg=missing_required_lib('zabbix-api', url='https://pypi.org/project/zabbix-api/'), exception=ZBX_IMP_ERR) if not HAS_PYDOTPLUS: - module.fail_json(msg="Missing required pydotplus module (check docs or install with: pip install pydotplus)") + module.fail_json(msg=missing_required_lib('pydotplus', url='https://pypi.org/project/pydotplus/'), exception=PYDOT_IMP_ERR) if not HAS_WEBCOLORS: - module.fail_json(msg="Missing required webcolors module (check docs or install with: pip install webcolors)") + module.fail_json(msg=missing_required_lib('webcolors', url='https://pypi.org/project/webcolors/'), exception=WEBCOLORS_IMP_ERR) if not HAS_PIL: - module.fail_json(msg="Missing required Pillow module (check docs or install with: pip install Pillow)") + module.fail_json(msg=missing_required_lib('Pillow', url='https://pypi.org/project/Pillow/'), exception=PIL_IMP_ERR) server_url = module.params['server_url'] login_user = module.params['login_user'] diff --git a/lib/ansible/modules/monitoring/zabbix/zabbix_proxy.py b/lib/ansible/modules/monitoring/zabbix/zabbix_proxy.py index da15750e8f9b82..8f987784358ea0 100644 --- a/lib/ansible/modules/monitoring/zabbix/zabbix_proxy.py +++ b/lib/ansible/modules/monitoring/zabbix/zabbix_proxy.py @@ -125,12 +125,15 @@ RETURN = ''' # ''' -from ansible.module_utils.basic import AnsibleModule +import traceback + +from ansible.module_utils.basic import AnsibleModule, missing_required_lib try: from zabbix_api import ZabbixAPI HAS_ZABBIX_API = True except ImportError: + ZBX_IMP_ERR = traceback.format_exc() HAS_ZABBIX_API = False @@ -260,9 +263,7 @@ def main(): ) if not HAS_ZABBIX_API: - module.fail_json(msg="Missing required zabbix-api module" + - " (check docs or install with:" + - " pip install zabbix-api)") + module.fail_json(msg=missing_required_lib('zabbix-api', url='https://pypi.org/project/zabbix-api/'), exception=ZBX_IMP_ERR) server_url = module.params['server_url'] login_user = module.params['login_user'] diff --git a/lib/ansible/modules/monitoring/zabbix/zabbix_screen.py b/lib/ansible/modules/monitoring/zabbix/zabbix_screen.py index 8a5c734eaa5062..f3d3ae9071f743 100644 --- a/lib/ansible/modules/monitoring/zabbix/zabbix_screen.py +++ b/lib/ansible/modules/monitoring/zabbix/zabbix_screen.py @@ -153,6 +153,9 @@ when: inventory_hostname==groups['group_name'][0] ''' + +import traceback + try: from zabbix_api import ZabbixAPI, ZabbixAPISubClass from zabbix_api import ZabbixAPIException @@ -170,9 +173,10 @@ def __init__(self, server, timeout, user, passwd, validate_certs, **kwargs): HAS_ZABBIX_API = True except ImportError: + ZBX_IMP_ERR = traceback.format_exc() HAS_ZABBIX_API = False -from ansible.module_utils.basic import AnsibleModule +from ansible.module_utils.basic import AnsibleModule, missing_required_lib class Screen(object): @@ -372,7 +376,7 @@ def main(): ) if not HAS_ZABBIX_API: - module.fail_json(msg="Missing required zabbix-api module (check docs or install with: pip install zabbix-api)") + module.fail_json(msg=missing_required_lib('zabbix-api', url='https://pypi.org/project/zabbix-api/'), exception=ZBX_IMP_ERR) server_url = module.params['server_url'] login_user = module.params['login_user'] diff --git a/lib/ansible/modules/monitoring/zabbix/zabbix_template.py b/lib/ansible/modules/monitoring/zabbix/zabbix_template.py index 96d918d776e49a..790a38a686647e 100644 --- a/lib/ansible/modules/monitoring/zabbix/zabbix_template.py +++ b/lib/ansible/modules/monitoring/zabbix/zabbix_template.py @@ -194,7 +194,7 @@ ''' from distutils.version import LooseVersion -from ansible.module_utils.basic import AnsibleModule +from ansible.module_utils.basic import AnsibleModule, missing_required_lib from ansible.module_utils._text import to_native import json import traceback @@ -205,6 +205,7 @@ HAS_ZABBIX_API = True except ImportError: + ZBX_IMP_ERR = traceback.format_exc() HAS_ZABBIX_API = False @@ -467,9 +468,7 @@ def main(): ) if not HAS_ZABBIX_API: - module.fail_json(msg="Missing required zabbix-api module " + - "(check docs or install with: " + - "pip install zabbix-api)") + module.fail_json(msg=missing_required_lib('zabbix-api', url='https://pypi.org/project/zabbix-api/'), exception=ZBX_IMP_ERR) server_url = module.params['server_url'] login_user = module.params['login_user']