zabbix: New module zabbix mediatype (#57488)
Co-Authored-By: Dusan Matejka <D3DeFi@users.noreply.github.com>
This commit is contained in:
parent
7f536630eb
commit
9e225fbb1e
1 changed files with 688 additions and 0 deletions
688
lib/ansible/modules/monitoring/zabbix/zabbix_mediatype.py
Normal file
688
lib/ansible/modules/monitoring/zabbix/zabbix_mediatype.py
Normal file
|
@ -0,0 +1,688 @@
|
||||||
|
#!/usr/bin/python
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
#
|
||||||
|
# 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
|
||||||
|
|
||||||
|
|
||||||
|
ANSIBLE_METADATA = {'metadata_version': '1.1',
|
||||||
|
'status': ['preview'],
|
||||||
|
'supported_by': 'community'}
|
||||||
|
|
||||||
|
|
||||||
|
DOCUMENTATION = '''
|
||||||
|
---
|
||||||
|
module: zabbix_mediatype
|
||||||
|
short_description: Create/Update/Delete Zabbix media types
|
||||||
|
description:
|
||||||
|
- This module allows you to create, modify and delete Zabbix media types.
|
||||||
|
version_added: "2.9"
|
||||||
|
author:
|
||||||
|
- Ruben Tsirunyan (@rubentsirunyan)
|
||||||
|
requirements:
|
||||||
|
- zabbix-api
|
||||||
|
|
||||||
|
options:
|
||||||
|
name:
|
||||||
|
type: 'str'
|
||||||
|
description:
|
||||||
|
- Name of the media type.
|
||||||
|
required: true
|
||||||
|
state:
|
||||||
|
type: 'str'
|
||||||
|
description:
|
||||||
|
- Desired state of the mediatype.
|
||||||
|
- On C(present), it will create a medatype if it does not exist or update the mediatype if the associated data is different.
|
||||||
|
- On C(absent), it will remove the mediatype if it exists.
|
||||||
|
choices:
|
||||||
|
- present
|
||||||
|
- absent
|
||||||
|
default: 'present'
|
||||||
|
required: true
|
||||||
|
type:
|
||||||
|
type: 'str'
|
||||||
|
description:
|
||||||
|
- Type of the media type.
|
||||||
|
choices:
|
||||||
|
- email
|
||||||
|
- script
|
||||||
|
- sms
|
||||||
|
- jabber
|
||||||
|
- ez_texting
|
||||||
|
required: true
|
||||||
|
status:
|
||||||
|
type: 'str'
|
||||||
|
description:
|
||||||
|
- Whether the media type is enabled or no.
|
||||||
|
choices:
|
||||||
|
- enabled
|
||||||
|
- disabled
|
||||||
|
default: 'enabled'
|
||||||
|
max_sessions:
|
||||||
|
type: 'int'
|
||||||
|
description:
|
||||||
|
- The maximum number of alerts that can be processed in parallel.
|
||||||
|
- Possible value is 1 when I(type=sms) and 0-100 otherwise.
|
||||||
|
default: 1
|
||||||
|
max_attempts:
|
||||||
|
type: 'int'
|
||||||
|
description:
|
||||||
|
- The maximum number of attempts to send an alert.
|
||||||
|
- Possible range is 0-10
|
||||||
|
default: 3
|
||||||
|
attempt_interval:
|
||||||
|
type: 'int'
|
||||||
|
description:
|
||||||
|
- The interval between retry attempts.
|
||||||
|
- Possible range is 0-60
|
||||||
|
default: 10
|
||||||
|
script_name:
|
||||||
|
type: 'str'
|
||||||
|
description:
|
||||||
|
- The name of the executed script.
|
||||||
|
- Required when I(type=script).
|
||||||
|
script_params:
|
||||||
|
type: 'list'
|
||||||
|
description:
|
||||||
|
- List of script parameters.
|
||||||
|
- Required when I(type=script).
|
||||||
|
gsm_modem:
|
||||||
|
type: 'str'
|
||||||
|
description:
|
||||||
|
- Serial device name of the gsm modem.
|
||||||
|
- Required when I(type=sms).
|
||||||
|
username:
|
||||||
|
type: 'str'
|
||||||
|
description:
|
||||||
|
- Username or Jabber identifier.
|
||||||
|
- Required when I(type=jabber) or I(type=ez_texting).
|
||||||
|
- Required when I(type=email) and I(smtp_authentication=true).
|
||||||
|
password:
|
||||||
|
type: 'str'
|
||||||
|
description:
|
||||||
|
- Authentication password.
|
||||||
|
- Required when I(type=jabber) or I(type=ez_texting).
|
||||||
|
- Required when I(type=email) and I(smtp_authentication=true).
|
||||||
|
smtp_server:
|
||||||
|
type: 'str'
|
||||||
|
description:
|
||||||
|
- SMTP server host.
|
||||||
|
- Required when I(type=email).
|
||||||
|
default: 'localhost'
|
||||||
|
smtp_server_port:
|
||||||
|
type: 'int'
|
||||||
|
description:
|
||||||
|
- SMTP server port.
|
||||||
|
- Required when I(type=email).
|
||||||
|
default: 25
|
||||||
|
smtp_helo:
|
||||||
|
type: 'str'
|
||||||
|
description:
|
||||||
|
- SMTP HELO.
|
||||||
|
- Required when I(type=email).
|
||||||
|
default: 'localhost'
|
||||||
|
smtp_email:
|
||||||
|
type: 'str'
|
||||||
|
description:
|
||||||
|
- Email address from which notifications will be sent.
|
||||||
|
- Required when I(type=email).
|
||||||
|
smtp_authentication:
|
||||||
|
type: 'bool'
|
||||||
|
description:
|
||||||
|
- Whether SMTP authetication with username and password should be enabled or not.
|
||||||
|
- If set to C(true), C(username) and C(password) should be specified.
|
||||||
|
default: false
|
||||||
|
smtp_security:
|
||||||
|
type: 'str'
|
||||||
|
description:
|
||||||
|
- SMTP connection security level to use.
|
||||||
|
choices:
|
||||||
|
- None
|
||||||
|
- STARTTLS
|
||||||
|
- SSL/TLS
|
||||||
|
smtp_verify_host:
|
||||||
|
type: 'bool'
|
||||||
|
description:
|
||||||
|
- SSL verify host for SMTP.
|
||||||
|
- Can be specified when I(smtp_security=STARTTLS) or I(smtp_security=SSL/TLS)
|
||||||
|
default: false
|
||||||
|
smtp_verify_peer:
|
||||||
|
type: 'bool'
|
||||||
|
description:
|
||||||
|
- SSL verify peer for SMTP.
|
||||||
|
- Can be specified when I(smtp_security=STARTTLS) or I(smtp_security=SSL/TLS)
|
||||||
|
default: false
|
||||||
|
message_text_limit:
|
||||||
|
type: 'str'
|
||||||
|
description:
|
||||||
|
- The message text limit.
|
||||||
|
- Required when I(type=ez_texting).
|
||||||
|
- 160 characters for USA and 136 characters for Canada.
|
||||||
|
choices:
|
||||||
|
- USA
|
||||||
|
- Canada
|
||||||
|
extends_documentation_fragment:
|
||||||
|
- zabbix
|
||||||
|
|
||||||
|
'''
|
||||||
|
|
||||||
|
RETURN = '''
|
||||||
|
'''
|
||||||
|
|
||||||
|
EXAMPLES = '''
|
||||||
|
- name: 'Create an email mediatype with SMTP authentication'
|
||||||
|
zabbix_mediatype:
|
||||||
|
name: "Ops email"
|
||||||
|
server_url: "http://example.com/zabbix/"
|
||||||
|
login_user: Admin
|
||||||
|
login_password: "zabbix"
|
||||||
|
type: 'email'
|
||||||
|
smtp_server: 'example.com'
|
||||||
|
smtp_server_port: 2000
|
||||||
|
smtp_email: 'ops@example.com'
|
||||||
|
smtp_authentication: true
|
||||||
|
username: 'smtp_user'
|
||||||
|
password: 'smtp_pass'
|
||||||
|
|
||||||
|
- name: 'Create a script mediatype'
|
||||||
|
zabbix_mediatype:
|
||||||
|
name: "my script"
|
||||||
|
server_url: "http://example.com/zabbix/"
|
||||||
|
login_user: Admin
|
||||||
|
login_password: "zabbix"
|
||||||
|
type: 'script'
|
||||||
|
script_name: 'my_script.py'
|
||||||
|
script_params:
|
||||||
|
- 'arg1'
|
||||||
|
- 'arg2'
|
||||||
|
|
||||||
|
- name: 'Create a jabber mediatype'
|
||||||
|
zabbix_mediatype:
|
||||||
|
name: "My jabber"
|
||||||
|
server_url: "http://example.com/zabbix/"
|
||||||
|
login_user: Admin
|
||||||
|
login_password: "zabbix"
|
||||||
|
type: 'jabber'
|
||||||
|
username: 'jabber_id'
|
||||||
|
password: 'jabber_pass'
|
||||||
|
|
||||||
|
- name: 'Create an SMS mediatype'
|
||||||
|
zabbix_mediatype:
|
||||||
|
name: "My SMS Mediatype"
|
||||||
|
server_url: "http://example.com/zabbix/"
|
||||||
|
login_user: Admin
|
||||||
|
login_password: "zabbix"
|
||||||
|
type: 'sms'
|
||||||
|
gsm_modem: '/dev/ttyS0'
|
||||||
|
'''
|
||||||
|
|
||||||
|
|
||||||
|
import traceback
|
||||||
|
|
||||||
|
|
||||||
|
from ansible.module_utils.basic import AnsibleModule, missing_required_lib
|
||||||
|
from ansible.module_utils.common.text.converters import container_to_bytes
|
||||||
|
|
||||||
|
|
||||||
|
try:
|
||||||
|
from zabbix_api import ZabbixAPI
|
||||||
|
HAS_ZABBIX_API = True
|
||||||
|
except ImportError:
|
||||||
|
ZBX_IMP_ERR = traceback.format_exc()
|
||||||
|
HAS_ZABBIX_API = False
|
||||||
|
|
||||||
|
|
||||||
|
def to_numeric_value(value, strs):
|
||||||
|
return strs.get(value)
|
||||||
|
|
||||||
|
|
||||||
|
def validate_params(module, params):
|
||||||
|
"""Validates arguments that are required together.
|
||||||
|
|
||||||
|
Fails the module with the message that shows the missing
|
||||||
|
requirements if there are some.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
module: AnsibleModule object.
|
||||||
|
params (list): Each element of this list
|
||||||
|
is a list like
|
||||||
|
['argument_key', 'argument_value', ['required_arg_1',
|
||||||
|
'required_arg_2']].
|
||||||
|
Format is the same as `required_if` parameter of AnsibleModule.
|
||||||
|
"""
|
||||||
|
for param in params:
|
||||||
|
if module.params[param[0]] == param[1]:
|
||||||
|
if None in [module.params[i] for i in param[2]]:
|
||||||
|
module.fail_json(
|
||||||
|
msg="Following arguments are required when {key} is {value}: {arguments}".format(
|
||||||
|
key=param[0],
|
||||||
|
value=param[1],
|
||||||
|
arguments=', '.join(param[2])
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def construct_parameters(**kwargs):
|
||||||
|
"""Translates data to a format suitable for Zabbix API and filters
|
||||||
|
the ones that are related to the specified mediatype type.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
**kwargs: Arguments passed to the module.
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
A dictionary of arguments that are related to kwargs['transport_type'],
|
||||||
|
and are in a format that is understandable by Zabbix API.
|
||||||
|
"""
|
||||||
|
if kwargs['transport_type'] == 'email':
|
||||||
|
return dict(
|
||||||
|
description=kwargs['name'],
|
||||||
|
status=to_numeric_value(kwargs['status'],
|
||||||
|
{'enabled': '0',
|
||||||
|
'disabled': '1'}),
|
||||||
|
type=to_numeric_value(kwargs['transport_type'],
|
||||||
|
{'email': '0',
|
||||||
|
'script': '1',
|
||||||
|
'sms': '2',
|
||||||
|
'jabber': '3',
|
||||||
|
'ez_texting': '100'}),
|
||||||
|
maxsessions=str(kwargs['max_sessions']),
|
||||||
|
maxattempts=str(kwargs['max_attempts']),
|
||||||
|
attempt_interval=str(kwargs['attempt_interval']),
|
||||||
|
smtp_server=kwargs['smtp_server'],
|
||||||
|
smtp_port=str(kwargs['smtp_server_port']),
|
||||||
|
smtp_helo=kwargs['smtp_helo'],
|
||||||
|
smtp_email=kwargs['smtp_email'],
|
||||||
|
smtp_security=to_numeric_value(str(kwargs['smtp_security']),
|
||||||
|
{'None': '0',
|
||||||
|
'STARTTLS': '1',
|
||||||
|
'SSL/TLS': '2'}),
|
||||||
|
smtp_authentication=to_numeric_value(str(kwargs['smtp_authentication']),
|
||||||
|
{'False': '0',
|
||||||
|
'True': '1'}),
|
||||||
|
smtp_verify_host=to_numeric_value(str(kwargs['smtp_verify_host']),
|
||||||
|
{'False': '0',
|
||||||
|
'True': '1'}),
|
||||||
|
smtp_verify_peer=to_numeric_value(str(kwargs['smtp_verify_peer']),
|
||||||
|
{'False': '0',
|
||||||
|
'True': '1'}),
|
||||||
|
username=kwargs['username'],
|
||||||
|
passwd=kwargs['password']
|
||||||
|
)
|
||||||
|
|
||||||
|
elif kwargs['transport_type'] == 'script':
|
||||||
|
if kwargs['script_params'] is None:
|
||||||
|
_script_params = '' # ZBX-15706
|
||||||
|
else:
|
||||||
|
_script_params = '\n'.join(str(i) for i in kwargs['script_params']) + '\n'
|
||||||
|
return dict(
|
||||||
|
description=kwargs['name'],
|
||||||
|
status=to_numeric_value(kwargs['status'],
|
||||||
|
{'enabled': '0',
|
||||||
|
'disabled': '1'}),
|
||||||
|
type=to_numeric_value(kwargs['transport_type'],
|
||||||
|
{'email': '0',
|
||||||
|
'script': '1',
|
||||||
|
'sms': '2',
|
||||||
|
'jabber': '3',
|
||||||
|
'ez_texting': '100'}),
|
||||||
|
maxsessions=str(kwargs['max_sessions']),
|
||||||
|
maxattempts=str(kwargs['max_attempts']),
|
||||||
|
attempt_interval=str(kwargs['attempt_interval']),
|
||||||
|
exec_path=kwargs['script_name'],
|
||||||
|
exec_params=_script_params
|
||||||
|
)
|
||||||
|
elif kwargs['transport_type'] == 'sms':
|
||||||
|
return dict(
|
||||||
|
description=kwargs['name'],
|
||||||
|
status=to_numeric_value(kwargs['status'],
|
||||||
|
{'enabled': '0',
|
||||||
|
'disabled': '1'}),
|
||||||
|
type=to_numeric_value(kwargs['transport_type'],
|
||||||
|
{'email': '0',
|
||||||
|
'script': '1',
|
||||||
|
'sms': '2',
|
||||||
|
'jabber': '3',
|
||||||
|
'ez_texting': '100'}),
|
||||||
|
maxsessions=str(kwargs['max_sessions']),
|
||||||
|
maxattempts=str(kwargs['max_attempts']),
|
||||||
|
attempt_interval=str(kwargs['attempt_interval']),
|
||||||
|
gsm_modem=kwargs['gsm_modem']
|
||||||
|
)
|
||||||
|
elif kwargs['transport_type'] == 'jabber':
|
||||||
|
return dict(
|
||||||
|
description=kwargs['name'],
|
||||||
|
status=to_numeric_value(kwargs['status'],
|
||||||
|
{'enabled': '0',
|
||||||
|
'disabled': '1'}),
|
||||||
|
type=to_numeric_value(kwargs['transport_type'],
|
||||||
|
{'email': '0',
|
||||||
|
'script': '1',
|
||||||
|
'sms': '2',
|
||||||
|
'jabber': '3',
|
||||||
|
'ez_texting': '100'}),
|
||||||
|
maxsessions=str(kwargs['max_sessions']),
|
||||||
|
maxattempts=str(kwargs['max_attempts']),
|
||||||
|
attempt_interval=str(kwargs['attempt_interval']),
|
||||||
|
username=kwargs['username'],
|
||||||
|
passwd=kwargs['password']
|
||||||
|
)
|
||||||
|
elif kwargs['transport_type'] == 'ez_texting':
|
||||||
|
return dict(
|
||||||
|
description=kwargs['name'],
|
||||||
|
status=to_numeric_value(kwargs['status'],
|
||||||
|
{'enabled': '0',
|
||||||
|
'disabled': '1'}),
|
||||||
|
type=to_numeric_value(kwargs['transport_type'],
|
||||||
|
{'email': '0',
|
||||||
|
'script': '1',
|
||||||
|
'sms': '2',
|
||||||
|
'jabber': '3',
|
||||||
|
'ez_texting': '100'}),
|
||||||
|
maxsessions=str(kwargs['max_sessions']),
|
||||||
|
maxattempts=str(kwargs['max_attempts']),
|
||||||
|
attempt_interval=str(kwargs['attempt_interval']),
|
||||||
|
username=kwargs['username'],
|
||||||
|
passwd=kwargs['password'],
|
||||||
|
exec_path=to_numeric_value(kwargs['message_text_limit'],
|
||||||
|
{'USA': '0',
|
||||||
|
'Canada': '1'}),
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def check_if_mediatype_exists(module, zbx, name):
|
||||||
|
"""Checks if mediatype exists.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
module: AnsibleModule object
|
||||||
|
zbx: ZabbixAPI object
|
||||||
|
name: Zabbix mediatype name
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
Tuple of (True, `id of the mediatype`) if mediatype exists, (False, None) otherwise
|
||||||
|
"""
|
||||||
|
try:
|
||||||
|
mediatype_list = zbx.mediatype.get({
|
||||||
|
'output': 'extend',
|
||||||
|
'filter': {'description': [name]}
|
||||||
|
})
|
||||||
|
if len(mediatype_list) < 1:
|
||||||
|
return False, None
|
||||||
|
else:
|
||||||
|
return True, mediatype_list[0]['mediatypeid']
|
||||||
|
except Exception as e:
|
||||||
|
module.fail_json(msg="Failed to get ID of the mediatype '{name}': {e}".format(name=name, e=e))
|
||||||
|
|
||||||
|
|
||||||
|
def diff(existing, new):
|
||||||
|
"""Constructs the diff for Ansible's --diff option.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
existing (dict): Existing mediatype data.
|
||||||
|
new (dict): New mediatype data.
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
A dictionary like {'before': existing, 'after': new}
|
||||||
|
with filtered empty values.
|
||||||
|
"""
|
||||||
|
before = {}
|
||||||
|
after = {}
|
||||||
|
for key in new:
|
||||||
|
before[key] = existing[key]
|
||||||
|
if new[key] is None:
|
||||||
|
after[key] = ''
|
||||||
|
else:
|
||||||
|
after[key] = new[key]
|
||||||
|
return {'before': before, 'after': after}
|
||||||
|
|
||||||
|
|
||||||
|
def get_update_params(module, zbx, mediatype_id, **kwargs):
|
||||||
|
"""Filters only the parameters that are different and need to be updated.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
module: AnsibleModule object.
|
||||||
|
zbx: ZabbixAPI object.
|
||||||
|
mediatype_id (int): ID of the mediatype to be updated.
|
||||||
|
**kwargs: Parameters for the new mediatype.
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
A tuple where the first element is a dictionary of parameters
|
||||||
|
that need to be updated and the second one is a dictionary
|
||||||
|
returned by diff() function with
|
||||||
|
existing mediatype data and new params passed to it.
|
||||||
|
"""
|
||||||
|
existing_mediatype = container_to_bytes(zbx.mediatype.get({
|
||||||
|
'output': 'extend',
|
||||||
|
'mediatypeids': [mediatype_id]
|
||||||
|
})[0])
|
||||||
|
|
||||||
|
if existing_mediatype['type'] != kwargs['type']:
|
||||||
|
return kwargs, diff(existing_mediatype, kwargs)
|
||||||
|
else:
|
||||||
|
params_to_update = {}
|
||||||
|
for key in kwargs:
|
||||||
|
if (not (kwargs[key] is None and existing_mediatype[key] == '')) and kwargs[key] != existing_mediatype[key]:
|
||||||
|
params_to_update[key] = kwargs[key]
|
||||||
|
return params_to_update, diff(existing_mediatype, kwargs)
|
||||||
|
|
||||||
|
|
||||||
|
def delete_mediatype(module, zbx, mediatype_id):
|
||||||
|
try:
|
||||||
|
return zbx.mediatype.delete([mediatype_id])
|
||||||
|
except Exception as e:
|
||||||
|
module.fail_json(msg="Failed to delete mediatype '{_id}': {e}".format(_id=mediatype_id, e=e))
|
||||||
|
|
||||||
|
|
||||||
|
def update_mediatype(module, zbx, **kwargs):
|
||||||
|
try:
|
||||||
|
pass
|
||||||
|
mediatype_id = zbx.mediatype.update(kwargs)
|
||||||
|
except Exception as e:
|
||||||
|
module.fail_json(msg="Failed to update mediatype '{_id}': {e}".format(_id=kwargs['mediatypeid'], e=e))
|
||||||
|
|
||||||
|
|
||||||
|
def create_mediatype(module, zbx, **kwargs):
|
||||||
|
try:
|
||||||
|
mediatype_id = zbx.mediatype.create(kwargs)
|
||||||
|
except Exception as e:
|
||||||
|
module.fail_json(msg="Failed to create mediatype '{name}': {e}".format(name=kwargs['description'], e=e))
|
||||||
|
|
||||||
|
|
||||||
|
def main():
|
||||||
|
argument_spec = dict(
|
||||||
|
server_url=dict(type='str', required=True, aliases=['url']),
|
||||||
|
login_user=dict(type='str', required=True),
|
||||||
|
login_password=dict(type='str', required=True, no_log=True),
|
||||||
|
http_login_user=dict(type='str', required=False, default=None),
|
||||||
|
http_login_password=dict(type='str', required=False, default=None, no_log=True),
|
||||||
|
validate_certs=dict(type='bool', required=False, default=True), timeout=dict(type='int', default=10),
|
||||||
|
name=dict(type='str', required=True),
|
||||||
|
state=dict(type='str', default='present', choices=['present', 'absent']),
|
||||||
|
type=dict(type='str', choices=['email', 'script', 'sms', 'jabber', 'ez_texting'], required=True),
|
||||||
|
status=dict(type='str', default='enabled', choices=['enabled', 'disabled'], required=False),
|
||||||
|
max_sessions=dict(type='int', default=1, required=False),
|
||||||
|
max_attempts=dict(type='int', default=3, required=False),
|
||||||
|
attempt_interval=dict(type='int', default=10, required=False),
|
||||||
|
# Script
|
||||||
|
script_name=dict(type='str', required=False),
|
||||||
|
script_params=dict(type='list', required=False),
|
||||||
|
# SMS
|
||||||
|
gsm_modem=dict(type='str', required=False),
|
||||||
|
# Jabber
|
||||||
|
username=dict(type='str', required=False),
|
||||||
|
password=dict(type='str', required=False, no_log=True),
|
||||||
|
# Email
|
||||||
|
smtp_server=dict(type='str', default='localhost', required=False),
|
||||||
|
smtp_server_port=dict(type='int', default=25, required=False),
|
||||||
|
smtp_helo=dict(type='str', default='localhost', required=False),
|
||||||
|
smtp_email=dict(type='str', required=False),
|
||||||
|
smtp_security=dict(type='str', required=False, choices=['None', 'STARTTLS', 'SSL/TLS']),
|
||||||
|
smtp_authentication=dict(type='bool', default=False, required=False),
|
||||||
|
smtp_verify_host=dict(type='bool', default=False, required=False),
|
||||||
|
smtp_verify_peer=dict(type='bool', default=False, required=False),
|
||||||
|
# EZ Text
|
||||||
|
message_text_limit=dict(type='str', required=False, choices=['USA', 'Canada'])
|
||||||
|
)
|
||||||
|
|
||||||
|
required_params = [
|
||||||
|
['type', 'email', ['smtp_email']],
|
||||||
|
['type', 'script', ['script_name']],
|
||||||
|
['type', 'sms', ['gsm_modem']],
|
||||||
|
['type', 'jabber', ['username', 'password']],
|
||||||
|
['type', 'ez_texting', ['username', 'password', 'message_text_limit']],
|
||||||
|
['smtp_authentication', True, ['username', 'password']]
|
||||||
|
]
|
||||||
|
|
||||||
|
module = AnsibleModule(
|
||||||
|
argument_spec=argument_spec,
|
||||||
|
supports_check_mode=True
|
||||||
|
)
|
||||||
|
|
||||||
|
if module.params['state'] == 'present':
|
||||||
|
validate_params(module, required_params)
|
||||||
|
|
||||||
|
if not HAS_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']
|
||||||
|
login_password = module.params['login_password']
|
||||||
|
http_login_user = module.params['http_login_user']
|
||||||
|
http_login_password = module.params['http_login_password']
|
||||||
|
validate_certs = module.params['validate_certs']
|
||||||
|
state = module.params['state']
|
||||||
|
timeout = module.params['timeout']
|
||||||
|
name = module.params['name']
|
||||||
|
transport_type = module.params['type']
|
||||||
|
status = module.params['status']
|
||||||
|
max_sessions = module.params['max_sessions']
|
||||||
|
max_attempts = module.params['max_attempts']
|
||||||
|
attempt_interval = module.params['attempt_interval']
|
||||||
|
# Script
|
||||||
|
script_name = module.params['script_name']
|
||||||
|
script_params = module.params['script_params']
|
||||||
|
# SMS
|
||||||
|
gsm_modem = module.params['gsm_modem']
|
||||||
|
# Jabber
|
||||||
|
username = module.params['username']
|
||||||
|
password = module.params['password']
|
||||||
|
# Email
|
||||||
|
smtp_server = module.params['smtp_server']
|
||||||
|
smtp_server_port = module.params['smtp_server_port']
|
||||||
|
smtp_helo = module.params['smtp_helo']
|
||||||
|
smtp_email = module.params['smtp_email']
|
||||||
|
smtp_security = module.params['smtp_security']
|
||||||
|
smtp_authentication = module.params['smtp_authentication']
|
||||||
|
smtp_verify_host = module.params['smtp_verify_host']
|
||||||
|
smtp_verify_peer = module.params['smtp_verify_peer']
|
||||||
|
# EZ Text
|
||||||
|
message_text_limit = module.params['message_text_limit']
|
||||||
|
|
||||||
|
zbx = None
|
||||||
|
|
||||||
|
# login to zabbix
|
||||||
|
try:
|
||||||
|
zbx = ZabbixAPI(server_url, timeout=timeout, user=http_login_user, passwd=http_login_password,
|
||||||
|
validate_certs=validate_certs)
|
||||||
|
zbx.login(login_user, login_password)
|
||||||
|
except Exception as e:
|
||||||
|
module.fail_json(msg="Failed to connect to Zabbix server: %s" % e)
|
||||||
|
|
||||||
|
mediatype_exists, mediatype_id = check_if_mediatype_exists(module, zbx, name)
|
||||||
|
|
||||||
|
parameters = construct_parameters(
|
||||||
|
name=name,
|
||||||
|
transport_type=transport_type,
|
||||||
|
status=status,
|
||||||
|
max_sessions=max_sessions,
|
||||||
|
max_attempts=max_attempts,
|
||||||
|
attempt_interval=attempt_interval,
|
||||||
|
script_name=script_name,
|
||||||
|
script_params=script_params,
|
||||||
|
gsm_modem=gsm_modem,
|
||||||
|
username=username,
|
||||||
|
password=password,
|
||||||
|
smtp_server=smtp_server,
|
||||||
|
smtp_server_port=smtp_server_port,
|
||||||
|
smtp_helo=smtp_helo,
|
||||||
|
smtp_email=smtp_email,
|
||||||
|
smtp_security=smtp_security,
|
||||||
|
smtp_authentication=smtp_authentication,
|
||||||
|
smtp_verify_host=smtp_verify_host,
|
||||||
|
smtp_verify_peer=smtp_verify_peer,
|
||||||
|
message_text_limit=message_text_limit
|
||||||
|
)
|
||||||
|
|
||||||
|
if mediatype_exists:
|
||||||
|
if state == 'absent':
|
||||||
|
if module.check_mode:
|
||||||
|
module.exit_json(
|
||||||
|
changed=True,
|
||||||
|
msg="Mediatype would have been deleted. Name: {name}, ID: {_id}".format(
|
||||||
|
name=name,
|
||||||
|
_id=mediatype_id
|
||||||
|
)
|
||||||
|
)
|
||||||
|
mediatype_id = delete_mediatype(module, zbx, mediatype_id)
|
||||||
|
module.exit_json(
|
||||||
|
changed=True,
|
||||||
|
msg="Mediatype deleted. Name: {name}, ID: {_id}".format(
|
||||||
|
name=name,
|
||||||
|
_id=mediatype_id
|
||||||
|
)
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
params_to_update, diff = get_update_params(module, zbx, mediatype_id, **parameters)
|
||||||
|
if params_to_update == {}:
|
||||||
|
module.exit_json(
|
||||||
|
changed=False,
|
||||||
|
msg="Mediatype is up to date: {name}".format(name=name)
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
if module.check_mode:
|
||||||
|
module.exit_json(
|
||||||
|
changed=True,
|
||||||
|
diff=diff,
|
||||||
|
msg="Mediatype would have been updated. Name: {name}, ID: {_id}".format(
|
||||||
|
name=name,
|
||||||
|
_id=mediatype_id
|
||||||
|
)
|
||||||
|
)
|
||||||
|
mediatype_id = update_mediatype(
|
||||||
|
module, zbx,
|
||||||
|
mediatypeid=mediatype_id,
|
||||||
|
**params_to_update
|
||||||
|
)
|
||||||
|
module.exit_json(
|
||||||
|
changed=True,
|
||||||
|
diff=diff,
|
||||||
|
msg="Mediatype updated. Name: {name}, ID: {_id}".format(
|
||||||
|
name=name,
|
||||||
|
_id=mediatype_id
|
||||||
|
)
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
if state == "absent":
|
||||||
|
module.exit_json(changed=False)
|
||||||
|
else:
|
||||||
|
if module.check_mode:
|
||||||
|
module.exit_json(
|
||||||
|
changed=True,
|
||||||
|
msg="Mediatype would have been created. Name: {name}, ID: {_id}".format(
|
||||||
|
name=name,
|
||||||
|
_id=mediatype_id
|
||||||
|
)
|
||||||
|
)
|
||||||
|
mediatype_id = create_mediatype(module, zbx, **parameters)
|
||||||
|
module.exit_json(
|
||||||
|
changed=True,
|
||||||
|
msg="Mediatype created: {name}, ID: {_id}".format(
|
||||||
|
name=name,
|
||||||
|
_id=mediatype_id
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
main()
|
Loading…
Reference in a new issue