Skip to content

Commit

Permalink
Add new zabbix_service_info module
Browse files Browse the repository at this point in the history
  • Loading branch information
us3241 authored May 5, 2024
1 parent e215196 commit 23a7ae3
Show file tree
Hide file tree
Showing 4 changed files with 211 additions and 0 deletions.
2 changes: 2 additions & 0 deletions changelogs/fragments/1210-add_zabbix_service_info.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
minor_changes:
- zabbix_service_info module added
149 changes: 149 additions & 0 deletions plugins/modules/zabbix_service_info.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,149 @@
#!/usr/bin/python
# -*- coding: utf-8 -*-

# Copyright: (c) 2021, D3DeFi
# 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


DOCUMENTATION = """
module: zabbix_service_info
short_description: Gather information about Zabbix service
author:
- Kanstantsin Maksimau (@us3241)
description:
- This module allows you to obtain detailed information about configured zabbix service.
requirements:
- "python >= 3.9"
options:
service_name:
description:
- Name of the Zabbix service.
required: true
type: str
extends_documentation_fragment:
- community.zabbix.zabbix
"""

EXAMPLES = """
# If you want to use Username and Password to be authenticated by Zabbix Server
- name: Set credentials to access Zabbix Server API
ansible.builtin.set_fact:
ansible_user: Admin
ansible_httpapi_pass: zabbix
# If you want to use API token to be authenticated by Zabbix Server
# https://www.zabbix.com/documentation/current/en/manual/web_interface/frontend_sections/administration/general#api-tokens
- name: Set API token
ansible.builtin.set_fact:
ansible_zabbix_auth_key: 8ec0d52432c15c91fcafe9888500cf9a607f44091ab554dbee860f6b44fac895
- name: Get zabbix service info
# set task level variables as we change ansible_connection plugin here
vars:
ansible_network_os: community.zabbix.zabbix
ansible_connection: httpapi
ansible_httpapi_port: 443
ansible_httpapi_use_ssl: true
ansible_httpapi_validate_certs: false
ansible_zabbix_url_path: "zabbixeu" # If Zabbix WebUI runs on non-default (zabbix) path ,e.g. http://<FQDN>/zabbixeu
ansible_host: zabbix-example-fqdn.org
community.zabbix.zabbix_service_info:
service_name: zbx01.example.com
"""

RETURN = """
zabbix_service:
description: example
returned: always
type: dict
sample: {
"algorithm": "2",
"children": [
{
"algorithm": "0",
"created_at": "1712743194",
"description": "",
"name": "example children",
"propagation_rule": "0",
"propagation_value": "0",
"readonly": false,
"serviceid": "81",
"sortorder": "0",
"status": "-1",
"uuid": "ce6e1a3784a547b48ee6707f6e061102",
"weight": "0"
}
],
"created_at": "1709717864",
"description": "",
"name": "example service",
"parents": [],
"problem_tags": [],
"propagation_rule": "0",
"propagation_value": "0",
"readonly": false,
"serviceid": "51",
"sortorder": "0",
"status": "-1",
"status_rules": [],
"tags": [],
"uuid": "420e48b363fe473c95288c817031447f",
"weight": "0"
}
"""


from ansible.module_utils.basic import AnsibleModule

from ansible_collections.community.zabbix.plugins.module_utils.base import ZabbixBase
import ansible_collections.community.zabbix.plugins.module_utils.helpers as zabbix_utils


class Service(ZabbixBase):

def get_service(self, name):
result = {}
params = {
"filter": {
"name": name
},
"output": "extend",
"selectParents": "extend",
"selectTags": "extend",
"selectProblemTags": "extend",
"selectChildren": "extend",
"selectStatusRules": "extend"
}

try:
result = self._zapi.service.get(params)
except Exception as e:
self._module.fail_json(msg="Failed to get service information: %s" % e)

return result[0] if result else {}


def main():
argument_spec = zabbix_utils.zabbix_common_argument_spec()
argument_spec.update(dict(
service_name=dict(type="str", required=True),
))

module = AnsibleModule(
argument_spec=argument_spec,
supports_check_mode=True
)

name = module.params["service_name"]

service = Service(module)
result = service.get_service(name)
module.exit_json(changed=False, zabbix_service=result)


if __name__ == "__main__":
main()
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
---
dependencies:
- setup_zabbix
57 changes: 57 additions & 0 deletions tests/integration/targets/test_zabbix_service_info/tasks/main.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
---
- name: test - Create new Zabbix service
community.zabbix.zabbix_service:
name: ExampleService
description: ExampleService
sortorder: 0
propagation_rule: as_is
propagation_value: not_classified
algorithm: most_crit_of_child_serv
register: create_service_result

- ansible.builtin.assert:
that:
- create_service_result.changed is sameas true

- name: test - Create new Zabbix child service
community.zabbix.zabbix_service:
name: ExampleChildService
description: ExampleChildService
sortorder: 0
propagation_rule: as_is
propagation_value: not_classified
parents: ExampleService
problem_tags:
- tag: testtag
value: test
register: create_child_result

- ansible.builtin.assert:
that:
- create_child_result.changed is sameas true

- name: test - Get zabbix service information
community.zabbix.zabbix_service_info:
service_name: ExampleService
register: get_service_info_result

- ansible.builtin.assert:
that:
- get_service_info_result["zabbix_service"].name == "ExampleService"
- get_service_info_result["zabbix_service"].children | length > 0
- get_service_info_result["zabbix_service"].children[0].name == "ExampleChildService"
- get_service_info_result["zabbix_service"].propagation_rule == "0"
- get_service_info_result["zabbix_service"].propagation_value == "0"
- get_service_info_result["zabbix_service"].sortorder == "0"

- name: test - cleanup test Zabbix child service
community.zabbix.zabbix_service:
state: absent
sortorder: 0
name: ExampleChildService

- name: test - cleanup test Zabbix service
community.zabbix.zabbix_service:
state: absent
sortorder: 0
name: ExampleService

0 comments on commit 23a7ae3

Please sign in to comment.