Fix to be support for zabbix 4.4 or more and python3 (#67693)

add fragments file
This commit is contained in:
sky-joker 2020-02-26 21:48:29 +09:00 committed by GitHub
parent 305789144a
commit 829a29ef18
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 28 additions and 9 deletions

View file

@ -0,0 +1,2 @@
bugfixes:
- zabbix_mediatype - Fixed to support zabbix 4.4 or more and python3 (https://github.com/ansible/ansible/pull/67693)

View file

@ -44,6 +44,7 @@ options:
type: 'str' type: 'str'
description: description:
- Type of the media type. - Type of the media type.
- Media types I(jabber) and I(ez_texting) workable only with Zabbix 4.2 or less.
choices: choices:
- email - email
- script - script
@ -223,7 +224,7 @@ import traceback
from ansible.module_utils.basic import AnsibleModule, missing_required_lib from ansible.module_utils.basic import AnsibleModule, missing_required_lib
from ansible.module_utils.common.text.converters import container_to_bytes from distutils.version import LooseVersion
try: try:
@ -350,7 +351,7 @@ def construct_parameters(**kwargs):
attempt_interval=str(kwargs['attempt_interval']), attempt_interval=str(kwargs['attempt_interval']),
gsm_modem=kwargs['gsm_modem'] gsm_modem=kwargs['gsm_modem']
) )
elif kwargs['transport_type'] == 'jabber': elif kwargs['transport_type'] == 'jabber' and LooseVersion(kwargs['zbx_api_version']) <= LooseVersion('4.2'):
return dict( return dict(
description=kwargs['name'], description=kwargs['name'],
status=to_numeric_value(kwargs['status'], status=to_numeric_value(kwargs['status'],
@ -368,7 +369,7 @@ def construct_parameters(**kwargs):
username=kwargs['username'], username=kwargs['username'],
passwd=kwargs['password'] passwd=kwargs['password']
) )
elif kwargs['transport_type'] == 'ez_texting': elif kwargs['transport_type'] == 'ez_texting' and LooseVersion(kwargs['zbx_api_version']) <= LooseVersion('4.2'):
return dict( return dict(
description=kwargs['name'], description=kwargs['name'],
status=to_numeric_value(kwargs['status'], status=to_numeric_value(kwargs['status'],
@ -390,8 +391,10 @@ def construct_parameters(**kwargs):
'Canada': '1'}), 'Canada': '1'}),
) )
return {'unsupported_parameter': kwargs['transport_type'], 'zbx_api_version': kwargs['zbx_api_version']}
def check_if_mediatype_exists(module, zbx, name):
def check_if_mediatype_exists(module, zbx, name, zbx_api_version):
"""Checks if mediatype exists. """Checks if mediatype exists.
Args: Args:
@ -402,10 +405,15 @@ def check_if_mediatype_exists(module, zbx, name):
Returns: Returns:
Tuple of (True, `id of the mediatype`) if mediatype exists, (False, None) otherwise Tuple of (True, `id of the mediatype`) if mediatype exists, (False, None) otherwise
""" """
filter_key_name = 'description'
if LooseVersion(zbx_api_version) >= LooseVersion('4.4'):
# description key changed to name key from zabbix 4.4
filter_key_name = 'name'
try: try:
mediatype_list = zbx.mediatype.get({ mediatype_list = zbx.mediatype.get({
'output': 'extend', 'output': 'extend',
'filter': {'description': [name]} 'filter': {filter_key_name: [name]}
}) })
if len(mediatype_list) < 1: if len(mediatype_list) < 1:
return False, None return False, None
@ -452,10 +460,10 @@ def get_update_params(module, zbx, mediatype_id, **kwargs):
returned by diff() function with returned by diff() function with
existing mediatype data and new params passed to it. existing mediatype data and new params passed to it.
""" """
existing_mediatype = container_to_bytes(zbx.mediatype.get({ existing_mediatype = zbx.mediatype.get({
'output': 'extend', 'output': 'extend',
'mediatypeids': [mediatype_id] 'mediatypeids': [mediatype_id]
})[0]) })[0]
if existing_mediatype['type'] != kwargs['type']: if existing_mediatype['type'] != kwargs['type']:
return kwargs, diff(existing_mediatype, kwargs) return kwargs, diff(existing_mediatype, kwargs)
@ -589,7 +597,8 @@ def main():
except Exception as e: except Exception as e:
module.fail_json(msg="Failed to connect to Zabbix server: %s" % e) module.fail_json(msg="Failed to connect to Zabbix server: %s" % e)
mediatype_exists, mediatype_id = check_if_mediatype_exists(module, zbx, name) zbx_api_version = zbx.api_version()[:3]
mediatype_exists, mediatype_id = check_if_mediatype_exists(module, zbx, name, zbx_api_version)
parameters = construct_parameters( parameters = construct_parameters(
name=name, name=name,
@ -611,9 +620,17 @@ def main():
smtp_authentication=smtp_authentication, smtp_authentication=smtp_authentication,
smtp_verify_host=smtp_verify_host, smtp_verify_host=smtp_verify_host,
smtp_verify_peer=smtp_verify_peer, smtp_verify_peer=smtp_verify_peer,
message_text_limit=message_text_limit message_text_limit=message_text_limit,
zbx_api_version=zbx_api_version
) )
if 'unsupported_parameter' in parameters:
module.fail_json(msg="%s is unsupported for Zabbix version %s" % (parameters['unsupported_parameter'], parameters['zbx_api_version']))
if LooseVersion(zbx_api_version) >= LooseVersion('4.4'):
# description key changed to name key from zabbix 4.4
parameters['name'] = parameters.pop('description')
if mediatype_exists: if mediatype_exists:
if state == 'absent': if state == 'absent':
if module.check_mode: if module.check_mode: