diff options
| author | Wesley Hearn <wesley.s.hearn@gmail.com> | 2015-08-27 11:12:53 -0400 | 
|---|---|---|
| committer | Wesley Hearn <wesley.s.hearn@gmail.com> | 2015-08-27 11:12:53 -0400 | 
| commit | 5c7e1366ad8ae67ef23117d296a65a6ee81ccd29 (patch) | |
| tree | 043628b7a804ad66019129129cc0186289d80a28 /roles/os_zabbix | |
| parent | d228350e4b9cc6b5341985940f12a50ec2847768 (diff) | |
| parent | 91eebb77744753bde5b4b83e7c7634ee47e5b859 (diff) | |
| download | openshift-5c7e1366ad8ae67ef23117d296a65a6ee81ccd29.tar.gz openshift-5c7e1366ad8ae67ef23117d296a65a6ee81ccd29.tar.bz2 openshift-5c7e1366ad8ae67ef23117d296a65a6ee81ccd29.tar.xz openshift-5c7e1366ad8ae67ef23117d296a65a6ee81ccd29.zip | |
Merge pull request #517 from openshift/revert-513-zbxupdates
Revert "Zabbix API updates"
Diffstat (limited to 'roles/os_zabbix')
29 files changed, 2028 insertions, 460 deletions
| diff --git a/roles/os_zabbix/README.md b/roles/os_zabbix/README.md deleted file mode 100644 index ac3dc2833..000000000 --- a/roles/os_zabbix/README.md +++ /dev/null @@ -1,40 +0,0 @@ -os_zabbix -========= - -Automate zabbix tasks. - -Requirements ------------- - -This requires the openshift_tools rpm be installed for the zbxapi.py library.  It can be found here: https://github.com/openshift/openshift-tools under openshift_tools/monitoring/zbxapi.py for now. - -Role Variables --------------- - -zab_server -zab_username -zab_password - -Dependencies ------------- - -This depeonds on the zbxapi.py library located here: https://github.com/openshift/openshift-tools under openshift_tools/monitoring/zbxapi.py for now. - -Example Playbook ----------------- - -  - zbx_host: -      server: zab_server -      user: zab_user -      password: zab_password -      name: 'myhost' - -License -------- - -ASL 2.0 - -Author Information ------------------- - -OpenShift operations, Red Hat, Inc diff --git a/roles/os_zabbix/defaults/main.yml b/roles/os_zabbix/defaults/main.yml deleted file mode 100644 index ed97d539c..000000000 --- a/roles/os_zabbix/defaults/main.yml +++ /dev/null @@ -1 +0,0 @@ ---- diff --git a/roles/os_zabbix/handlers/main.yml b/roles/os_zabbix/handlers/main.yml deleted file mode 100644 index ed97d539c..000000000 --- a/roles/os_zabbix/handlers/main.yml +++ /dev/null @@ -1 +0,0 @@ ---- diff --git a/roles/os_zabbix/library/__init__.py b/roles/os_zabbix/library/__init__.py new file mode 100644 index 000000000..e69de29bb --- /dev/null +++ b/roles/os_zabbix/library/__init__.py diff --git a/roles/os_zabbix/library/get_drule.yml b/roles/os_zabbix/library/get_drule.yml new file mode 100644 index 000000000..a3e39f535 --- /dev/null +++ b/roles/os_zabbix/library/get_drule.yml @@ -0,0 +1,115 @@ +--- +# This is a test playbook to create one of each of the zabbix ansible modules. +# ensure that the zbxapi module is installed +# ansible-playbook test.yml +- name: Test zabbix ansible module +  hosts: localhost +  gather_facts: no +  vars: +#zbx_server: https://localhost/zabbix/api_jsonrpc.php +#zbx_user: Admin +#zbx_password: zabbix + +  pre_tasks: +  - name: Template Discovery rules +    zbx_template: +      server: "{{ zbx_server }}" +      user: "{{ zbx_user }}" +      password: "{{ zbx_password }}" +      name: 'Template App HaProxy' +      state: list +    register: template_output + +  - debug: var=template_output + +  - name: Discovery rules +    zbx_discovery_rule: +      server: "{{ zbx_server }}" +      user: "{{ zbx_user }}" +      password: "{{ zbx_password }}" +      name: 'haproxy.discovery sender' +      state: list +    register: drule + +  - debug: var=drule + +#  - name: Create an application +#    zbx_application: +#      server: "{{ zbx_server }}" +#      user: "{{ zbx_user }}" +#      password: "{{ zbx_password }}" +#      name: 'Test App' +#      template_name: "test template" +#    register: item_output +# +#  - name: Create an item +#    zbx_item: +#      server: "{{ zbx_server }}" +#      user: "{{ zbx_user }}" +#      password: "{{ zbx_password }}" +#      name: 'test item' +#      key: 'kenny.item.1' +#      applications: +#      - 'Test App' +#      template_name: "test template" +#    register: item_output +# +#  - debug: var=item_output +# +#  - name: Create an trigger +#    zbx_trigger: +#      server: "{{ zbx_server }}" +#      user: "{{ zbx_user }}" +#      password: "{{ zbx_password }}" +#      expression: '{test template:kenny.item.1.last()}>2' +#      description: 'Kenny desc' +#    register: trigger_output +# +#  - debug: var=trigger_output +# +#  - name: Create a hostgroup +#    zbx_hostgroup: +#      server: "{{ zbx_server }}" +#      user: "{{ zbx_user }}" +#      password: "{{ zbx_password }}" +#      name: 'kenny hostgroup' +#    register: hostgroup_output +# +#  - debug: var=hostgroup_output +# +#  - name: Create a host +#    zbx_host: +#      server: "{{ zbx_server }}" +#      user: "{{ zbx_user }}" +#      password: "{{ zbx_password }}" +#      name: 'kenny host' +#      template_names: +#      - test template +#      hostgroup_names: +#      - kenny hostgroup +#    register: host_output +# +#  - debug: var=host_output +# +#  - name: Create a usergroup +#    zbx_usergroup: +#      server: "{{ zbx_server }}" +#      user: "{{ zbx_user }}" +#      password: "{{ zbx_password }}" +#      name: kenny usergroup +#      rights: +#      - 'kenny hostgroup': rw +#    register: usergroup_output +# +#  - debug: var=usergroup_output +# +#  - name: Create a user +#    zbx_user: +#      server: "{{ zbx_server }}" +#      user: "{{ zbx_user }}" +#      password: "{{ zbx_password }}" +#      alias: kwoodson +#      state: list +#    register: user_output +# +#  - debug: var=user_output diff --git a/roles/os_zabbix/library/test.yml b/roles/os_zabbix/library/test.yml new file mode 100644 index 000000000..cedace1a0 --- /dev/null +++ b/roles/os_zabbix/library/test.yml @@ -0,0 +1,131 @@ +--- +# This is a test playbook to create one of each of the zabbix ansible modules. +# ensure that the zbxapi module is installed +# ansible-playbook test.yml +- name: Test zabbix ansible module +  hosts: localhost +  gather_facts: no +  vars: +    zbx_server: http://localhost:8080/zabbix/api_jsonrpc.php +    zbx_user: Admin +    zbx_password: zabbix + +  pre_tasks: +  - name: Create a template +    zbx_template: +      server: "{{ zbx_server }}" +      user: "{{ zbx_user }}" +      password: "{{ zbx_password }}" +      name: 'test template' +    register: template_output + +  - debug: var=template_output + +  - name: Create a discoveryrule +    zbx_discoveryrule: +      server: "{{ zbx_server }}" +      user: "{{ zbx_user }}" +      password: "{{ zbx_password }}" +      name: test discoverule +      key: test_listener +      template_name: test template +      lifetime: 14 +    register: discoveryrule + +  - debug: var=discoveryrule + +  - name: Create an itemprototype +    zbx_itemprototype: +      server: "{{ zbx_server }}" +      user: "{{ zbx_user }}" +      password: "{{ zbx_password }}" +      name: 'Test itemprototype on {#TEST_LISTENER}' +      key: 'test[{#TEST_LISTENER}]' +      template_name: test template +      discoveryrule_name: test discoverule +    register: itemproto + +  - debug: var=itemproto + +  - name: Create an application +    zbx_application: +      server: "{{ zbx_server }}" +      user: "{{ zbx_user }}" +      password: "{{ zbx_password }}" +      name: 'Test App' +      template_name: "test template" +    register: item_output + +  - name: Create an item +    zbx_item: +      server: "{{ zbx_server }}" +      user: "{{ zbx_user }}" +      password: "{{ zbx_password }}" +      name: 'test item' +      key: 'kenny.item.1' +      applications: +      - 'Test App' +      template_name: "test template" +    register: item_output + +  - debug: var=item_output + +  - name: Create an trigger +    zbx_trigger: +      server: "{{ zbx_server }}" +      user: "{{ zbx_user }}" +      password: "{{ zbx_password }}" +      expression: '{test template:kenny.item.1.last()}>2' +      description: 'Kenny desc' +    register: trigger_output + +  - debug: var=trigger_output + +  - name: Create a hostgroup +    zbx_hostgroup: +      server: "{{ zbx_server }}" +      user: "{{ zbx_user }}" +      password: "{{ zbx_password }}" +      name: 'kenny hostgroup' +    register: hostgroup_output + +  - debug: var=hostgroup_output + +  - name: Create a host +    zbx_host: +      server: "{{ zbx_server }}" +      user: "{{ zbx_user }}" +      password: "{{ zbx_password }}" +      name: 'kenny host' +      template_names: +      - test template +      hostgroup_names: +      - kenny hostgroup +    register: host_output + +  - debug: var=host_output + +  - name: Create a usergroup +    zbx_usergroup: +      server: "{{ zbx_server }}" +      user: "{{ zbx_user }}" +      password: "{{ zbx_password }}" +      name: kenny usergroup +      rights: +      - 'kenny hostgroup': rw +    register: usergroup_output + +  - debug: var=usergroup_output + +  - name: Create a user +    zbx_user: +      server: "{{ zbx_server }}" +      user: "{{ zbx_user }}" +      password: "{{ zbx_password }}" +      alias: kenny user +      passwd: zabbix +      usergroups: +      - kenny usergroup +    register: user_output + +  - debug: var=user_output diff --git a/roles/os_zabbix/library/zbx_application.py b/roles/os_zabbix/library/zbx_application.py new file mode 100644 index 000000000..5d4acf72d --- /dev/null +++ b/roles/os_zabbix/library/zbx_application.py @@ -0,0 +1,135 @@ +#!/usr/bin/env python +''' +Ansible module for application +''' +# vim: expandtab:tabstop=4:shiftwidth=4 +# +#   Zabbix application ansible module +# +# +#   Copyright 2015 Red Hat Inc. +# +#   Licensed under the Apache License, Version 2.0 (the "License"); +#   you may not use this file except in compliance with the License. +#   You may obtain a copy of the License at +# +#       http://www.apache.org/licenses/LICENSE-2.0 +# +#   Unless required by applicable law or agreed to in writing, software +#   distributed under the License is distributed on an "AS IS" BASIS, +#   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +#   See the License for the specific language governing permissions and +#   limitations under the License. +# + +# This is in place because each module looks similar to each other. +# These need duplicate code as their behavior is very similar +# but different for each zabbix class. +# pylint: disable=duplicate-code + +# pylint: disable=import-error +from openshift_tools.monitoring.zbxapi import ZabbixAPI, ZabbixConnection + +def exists(content, key='result'): +    ''' Check if key exists in content or the size of content[key] > 0 +    ''' +    if not content.has_key(key): +        return False + +    if not content[key]: +        return False + +    return True + +def get_template_ids(zapi, template_names): +    ''' +    get related templates +    ''' +    template_ids = [] +    # Fetch templates by name +    for template_name in template_names: +        content = zapi.get_content('template', 'get', {'search': {'host': template_name}}) +        if content.has_key('result'): +            template_ids.append(content['result'][0]['templateid']) +    return template_ids + +def main(): +    ''' Ansible module for application +    ''' + +    module = AnsibleModule( +        argument_spec=dict( +            server=dict(default='https://localhost/zabbix/api_jsonrpc.php', type='str'), +            user=dict(default=None, type='str'), +            password=dict(default=None, type='str'), +            name=dict(default=None, type='str'), +            template_name=dict(default=None, type='list'), +            debug=dict(default=False, type='bool'), +            state=dict(default='present', type='str'), +        ), +        #supports_check_mode=True +    ) + +    user = module.params.get('user', os.environ['ZABBIX_USER']) +    passwd = module.params.get('password', os.environ['ZABBIX_PASSWORD']) + +    zapi = ZabbixAPI(ZabbixConnection(module.params['server'], user, passwd, module.params['debug'])) + +    #Set the instance and the application for the rest of the calls +    zbx_class_name = 'application' +    idname = 'applicationid' +    aname = module.params['name'] +    state = module.params['state'] +    # get a applicationid, see if it exists +    content = zapi.get_content(zbx_class_name, +                               'get', +                               {'search': {'host': aname}, +                                'selectHost': 'hostid', +                               }) +    if state == 'list': +        module.exit_json(changed=False, results=content['result'], state="list") + +    if state == 'absent': +        if not exists(content): +            module.exit_json(changed=False, state="absent") + +        content = zapi.get_content(zbx_class_name, 'delete', [content['result'][0][idname]]) +        module.exit_json(changed=True, results=content['result'], state="absent") + +    if state == 'present': +        params = {'hostid': get_template_ids(zapi, module.params['template_name'])[0], +                  'name': aname, +                 } +        if not exists(content): +            # if we didn't find it, create it +            content = zapi.get_content(zbx_class_name, 'create', params) +            module.exit_json(changed=True, results=content['result'], state='present') +        # already exists, we need to update it +        # let's compare properties +        differences = {} +        zab_results = content['result'][0] +        for key, value in params.items(): +            if key == 'templates' and zab_results.has_key('parentTemplates'): +                if zab_results['parentTemplates'] != value: +                    differences[key] = value +            elif zab_results[key] != str(value) and zab_results[key] != value: +                differences[key] = value + +        if not differences: +            module.exit_json(changed=False, results=content['result'], state="present") + +        # We have differences and need to update +        differences[idname] = zab_results[idname] +        content = zapi.get_content(zbx_class_name, 'update', differences) +        module.exit_json(changed=True, results=content['result'], state="present") + +    module.exit_json(failed=True, +                     changed=False, +                     results='Unknown state passed. %s' % state, +                     state="unknown") + +# pylint: disable=redefined-builtin, unused-wildcard-import, wildcard-import, locally-disabled +# import module snippets.  This are required +from ansible.module_utils.basic import * + +main() diff --git a/roles/os_zabbix/library/zbx_discoveryrule.py b/roles/os_zabbix/library/zbx_discoveryrule.py new file mode 100644 index 000000000..56b87fecc --- /dev/null +++ b/roles/os_zabbix/library/zbx_discoveryrule.py @@ -0,0 +1,177 @@ +#!/usr/bin/env python +''' +Zabbix discovery rule ansible module +''' +# vim: expandtab:tabstop=4:shiftwidth=4 +# +#   Copyright 2015 Red Hat Inc. +# +#   Licensed under the Apache License, Version 2.0 (the "License"); +#   you may not use this file except in compliance with the License. +#   You may obtain a copy of the License at +# +#       http://www.apache.org/licenses/LICENSE-2.0 +# +#   Unless required by applicable law or agreed to in writing, software +#   distributed under the License is distributed on an "AS IS" BASIS, +#   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +#   See the License for the specific language governing permissions and +#   limitations under the License. +# + +# This is in place because each module looks similar to each other. +# These need duplicate code as their behavior is very similar +# but different for each zabbix class. +# pylint: disable=duplicate-code + +# pylint: disable=import-error +from openshift_tools.monitoring.zbxapi import ZabbixAPI, ZabbixConnection + +def exists(content, key='result'): +    ''' Check if key exists in content or the size of content[key] > 0 +    ''' +    if not content.has_key(key): +        return False + +    if not content[key]: +        return False + +    return True + +def get_template(zapi, template_name): +    '''get a template by name +    ''' +    content = zapi.get_content('template', +                               'get', +                               {'search': {'host': template_name}, +                                'output': 'extend', +                                'selectInterfaces': 'interfaceid', +                               }) +    if not content['result']: +        return None +    return content['result'][0] + +def get_type(vtype): +    ''' +    Determine which type of discoverrule this is +    ''' +    _types = {'agent': 0, +              'SNMPv1': 1, +              'trapper': 2, +              'simple': 3, +              'SNMPv2': 4, +              'internal': 5, +              'SNMPv3': 6, +              'active': 7, +              'external': 10, +              'database monitor': 11, +              'ipmi': 12, +              'ssh': 13, +              'telnet': 14, +              'JMX': 16, +             } + +    for typ in _types.keys(): +        if vtype in typ or vtype == typ: +            _vtype = _types[typ] +            break +    else: +        _vtype = 2 + +    return _vtype + +def main(): +    ''' +    Ansible module for zabbix discovery rules +    ''' + +    module = AnsibleModule( +        argument_spec=dict( +            server=dict(default='https://localhost/zabbix/api_jsonrpc.php', type='str'), +            user=dict(default=os.environ['ZABBIX_USER'], type='str'), +            password=dict(default=os.environ['ZABBIX_PASSWORD'], type='str'), +            name=dict(default=None, type='str'), +            key=dict(default=None, type='str'), +            interfaceid=dict(default=None, type='int'), +            ztype=dict(default='trapper', type='str'), +            delay=dict(default=60, type='int'), +            lifetime=dict(default=30, type='int'), +            template_name=dict(default=[], type='list'), +            debug=dict(default=False, type='bool'), +            state=dict(default='present', type='str'), +        ), +        #supports_check_mode=True +    ) + +    user = module.params['user'] +    passwd = module.params['password'] + +    zapi = ZabbixAPI(ZabbixConnection(module.params['server'], user, passwd, module.params['debug'])) + +    #Set the instance and the template for the rest of the calls +    zbx_class_name = 'discoveryrule' +    idname = "itemid" +    dname = module.params['name'] +    state = module.params['state'] + +    # selectInterfaces doesn't appear to be working but is needed. +    content = zapi.get_content(zbx_class_name, +                               'get', +                               {'search': {'name': dname}, +                                #'selectDServices': 'extend', +                                #'selectDChecks': 'extend', +                                #'selectDhosts': 'dhostid', +                               }) +    if state == 'list': +        module.exit_json(changed=False, results=content['result'], state="list") + +    if state == 'absent': +        if not exists(content): +            module.exit_json(changed=False, state="absent") + +        content = zapi.get_content(zbx_class_name, 'delete', [content['result'][0][idname]]) +        module.exit_json(changed=True, results=content['result'], state="absent") + +    if state == 'present': +        template = get_template(zapi, module.params['template_name']) +        params = {'name': dname, +                  'key_':  module.params['key'], +                  'hostid':  template['templateid'], +                  'interfaceid': module.params['interfaceid'], +                  'lifetime': module.params['lifetime'], +                  'type': get_type(module.params['ztype']), +                 } +        if params['type'] in [2, 5, 7, 11]: +            params.pop('interfaceid') + +        if not exists(content): +            # if we didn't find it, create it +            content = zapi.get_content(zbx_class_name, 'create', params) +            module.exit_json(changed=True, results=content['result'], state='present') +        # already exists, we need to update it +        # let's compare properties +        differences = {} +        zab_results = content['result'][0] +        for key, value in params.items(): + +            if zab_results[key] != value and zab_results[key] != str(value): +                differences[key] = value + +        if not differences: +            module.exit_json(changed=False, results=zab_results, state="present") + +        # We have differences and need to update +        differences[idname] = zab_results[idname] +        content = zapi.get_content(zbx_class_name, 'update', differences) +        module.exit_json(changed=True, results=content['result'], state="present") + +    module.exit_json(failed=True, +                     changed=False, +                     results='Unknown state passed. %s' % state, +                     state="unknown") + +# pylint: disable=redefined-builtin, unused-wildcard-import, wildcard-import, locally-disabled +# import module snippets.  This are required +from ansible.module_utils.basic import * + +main() diff --git a/roles/os_zabbix/library/zbx_host.py b/roles/os_zabbix/library/zbx_host.py new file mode 100644 index 000000000..12c5f3456 --- /dev/null +++ b/roles/os_zabbix/library/zbx_host.py @@ -0,0 +1,163 @@ +#!/usr/bin/env python +''' +Zabbix host ansible module +''' +# vim: expandtab:tabstop=4:shiftwidth=4 +# +#   Copyright 2015 Red Hat Inc. +# +#   Licensed under the Apache License, Version 2.0 (the "License"); +#   you may not use this file except in compliance with the License. +#   You may obtain a copy of the License at +# +#       http://www.apache.org/licenses/LICENSE-2.0 +# +#   Unless required by applicable law or agreed to in writing, software +#   distributed under the License is distributed on an "AS IS" BASIS, +#   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +#   See the License for the specific language governing permissions and +#   limitations under the License. +# + +# This is in place because each module looks similar to each other. +# These need duplicate code as their behavior is very similar +# but different for each zabbix class. +# pylint: disable=duplicate-code + +# pylint: disable=import-error +from openshift_tools.monitoring.zbxapi import ZabbixAPI, ZabbixConnection + +def exists(content, key='result'): +    ''' Check if key exists in content or the size of content[key] > 0 +    ''' +    if not content.has_key(key): +        return False + +    if not content[key]: +        return False + +    return True + +def get_group_ids(zapi, hostgroup_names): +    ''' +    get hostgroups +    ''' +    # Fetch groups by name +    group_ids = [] +    for hgr in hostgroup_names: +        content = zapi.get_content('hostgroup', 'get', {'search': {'name': hgr}}) +        if content.has_key('result'): +            group_ids.append({'groupid': content['result'][0]['groupid']}) + +    return group_ids + +def get_template_ids(zapi, template_names): +    ''' +    get related templates +    ''' +    template_ids = [] +    # Fetch templates by name +    for template_name in template_names: +        content = zapi.get_content('template', 'get', {'search': {'host': template_name}}) +        if content.has_key('result'): +            template_ids.append({'templateid': content['result'][0]['templateid']}) +    return template_ids + +def main(): +    ''' +    Ansible module for zabbix host +    ''' + +    module = AnsibleModule( +        argument_spec=dict( +            server=dict(default='https://localhost/zabbix/api_jsonrpc.php', type='str'), +            user=dict(default=os.environ['ZABBIX_USER'], type='str'), +            password=dict(default=os.environ['ZABBIX_PASSWORD'], type='str'), +            name=dict(default=None, type='str'), +            hostgroup_names=dict(default=[], type='list'), +            template_names=dict(default=[], type='list'), +            debug=dict(default=False, type='bool'), +            state=dict(default='present', type='str'), +            interfaces=dict(default=None, type='list'), +        ), +        #supports_check_mode=True +    ) + +    user = module.params['user'] +    passwd = module.params['password'] + +    zapi = ZabbixAPI(ZabbixConnection(module.params['server'], user, passwd, module.params['debug'])) + +    #Set the instance and the template for the rest of the calls +    zbx_class_name = 'host' +    idname = "hostid" +    hname = module.params['name'] +    state = module.params['state'] + +    # selectInterfaces doesn't appear to be working but is needed. +    content = zapi.get_content(zbx_class_name, +                               'get', +                               {'search': {'host': hname}, +                                'selectGroups': 'groupid', +                                'selectParentTemplates': 'templateid', +                                'selectInterfaces': 'interfaceid', +                               }) +    if state == 'list': +        module.exit_json(changed=False, results=content['result'], state="list") + +    if state == 'absent': +        if not exists(content): +            module.exit_json(changed=False, state="absent") + +        content = zapi.get_content(zbx_class_name, 'delete', [content['result'][0][idname]]) +        module.exit_json(changed=True, results=content['result'], state="absent") + +    if state == 'present': +        ifs = module.params['interfaces'] or [{'type':  1,         # interface type, 1 = agent +                                               'main':  1,         # default interface? 1 = true +                                               'useip':  1,        # default interface? 1 = true +                                               'ip':  '127.0.0.1', # default interface? 1 = true +                                               'dns':  '',         # dns for host +                                               'port':  '10050',   # port for interface? 10050 +                                              }] +        params = {'host': hname, +                  'groups':  get_group_ids(zapi, module.params['hostgroup_names']), +                  'templates':  get_template_ids(zapi, module.params['template_names']), +                  'interfaces': ifs, +                 } + +        if not exists(content): +            # if we didn't find it, create it +            content = zapi.get_content(zbx_class_name, 'create', params) +            module.exit_json(changed=True, results=content['result'], state='present') +        # already exists, we need to update it +        # let's compare properties +        differences = {} +        zab_results = content['result'][0] +        for key, value in params.items(): + +            if key == 'templates' and zab_results.has_key('parentTemplates'): +                if zab_results['parentTemplates'] != value: +                    differences[key] = value + +            elif zab_results[key] != value and zab_results[key] != str(value): +                differences[key] = value + +        if not differences: +            module.exit_json(changed=False, results=zab_results, state="present") + +        # We have differences and need to update +        differences[idname] = zab_results[idname] +        content = zapi.get_content(zbx_class_name, 'update', differences) +        module.exit_json(changed=True, results=content['result'], state="present") + +    module.exit_json(failed=True, +                     changed=False, +                     results='Unknown state passed. %s' % state, +                     state="unknown") + +# pylint: disable=redefined-builtin, unused-wildcard-import, wildcard-import, locally-disabled +# import module snippets.  This are required +from ansible.module_utils.basic import * + +main() diff --git a/roles/os_zabbix/library/zbx_hostgroup.py b/roles/os_zabbix/library/zbx_hostgroup.py new file mode 100644 index 000000000..a1eb875d4 --- /dev/null +++ b/roles/os_zabbix/library/zbx_hostgroup.py @@ -0,0 +1,116 @@ +#!/usr/bin/env python +''' Ansible module for hostgroup +''' +# vim: expandtab:tabstop=4:shiftwidth=4 +# +#   Zabbix hostgroup ansible module +# +# +#   Copyright 2015 Red Hat Inc. +# +#   Licensed under the Apache License, Version 2.0 (the "License"); +#   you may not use this file except in compliance with the License. +#   You may obtain a copy of the License at +# +#       http://www.apache.org/licenses/LICENSE-2.0 +# +#   Unless required by applicable law or agreed to in writing, software +#   distributed under the License is distributed on an "AS IS" BASIS, +#   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +#   See the License for the specific language governing permissions and +#   limitations under the License. +# + +# This is in place because each module looks similar to each other. +# These need duplicate code as their behavior is very similar +# but different for each zabbix class. +# pylint: disable=duplicate-code + +# pylint: disable=import-error +from openshift_tools.monitoring.zbxapi import ZabbixAPI, ZabbixConnection + +def exists(content, key='result'): +    ''' Check if key exists in content or the size of content[key] > 0 +    ''' +    if not content.has_key(key): +        return False + +    if not content[key]: +        return False + +    return True + +def main(): +    ''' ansible module for hostgroup +    ''' + +    module = AnsibleModule( +        argument_spec=dict( +            server=dict(default='https://localhost/zabbix/api_jsonrpc.php', type='str'), +            user=dict(default=None, type='str'), +            password=dict(default=None, type='str'), +            name=dict(default=None, type='str'), +            debug=dict(default=False, type='bool'), +            state=dict(default='present', type='str'), +        ), +        #supports_check_mode=True +    ) + +    user = module.params.get('user', os.environ['ZABBIX_USER']) +    passwd = module.params.get('password', os.environ['ZABBIX_PASSWORD']) + +    zapi = ZabbixAPI(ZabbixConnection(module.params['server'], user, passwd, module.params['debug'])) + +    #Set the instance and the template for the rest of the calls +    zbx_class_name = 'hostgroup' +    idname = "groupid" +    hname = module.params['name'] +    state = module.params['state'] + +    content = zapi.get_content(zbx_class_name, +                               'get', +                               {'search': {'name': hname}, +                               }) +    if state == 'list': +        module.exit_json(changed=False, results=content['result'], state="list") + +    if state == 'absent': +        if not exists(content): +            module.exit_json(changed=False, state="absent") + +        content = zapi.get_content(zbx_class_name, 'delete', [content['result'][0][idname]]) +        module.exit_json(changed=True, results=content['result'], state="absent") + +    if state == 'present': +        params = {'name': hname} + +        if not exists(content): +            # if we didn't find it, create it +            content = zapi.get_content(zbx_class_name, 'create', params) +            module.exit_json(changed=True, results=content['result'], state='present') +        # already exists, we need to update it +        # let's compare properties +        differences = {} +        zab_results = content['result'][0] +        for key, value in params.items(): +            if zab_results[key] != value and zab_results[key] != str(value): +                differences[key] = value + +        if not differences: +            module.exit_json(changed=False, results=zab_results, state="present") + +        # We have differences and need to update +        differences[idname] = zab_results[idname] +        content = zapi.get_content(zbx_class_name, 'update', differences) +        module.exit_json(changed=True, results=content['result'], state="present") + +    module.exit_json(failed=True, +                     changed=False, +                     results='Unknown state passed. %s' % state, +                     state="unknown") + +# pylint: disable=redefined-builtin, unused-wildcard-import, wildcard-import, locally-disabled +# import module snippets.  This are required +from ansible.module_utils.basic import * + +main() diff --git a/roles/os_zabbix/library/zbx_item.py b/roles/os_zabbix/library/zbx_item.py new file mode 100644 index 000000000..45ba6c2b0 --- /dev/null +++ b/roles/os_zabbix/library/zbx_item.py @@ -0,0 +1,170 @@ +#!/usr/bin/env python +''' + Ansible module for zabbix items +''' +# vim: expandtab:tabstop=4:shiftwidth=4 +# +#   Zabbix item ansible module +# +# +#   Copyright 2015 Red Hat Inc. +# +#   Licensed under the Apache License, Version 2.0 (the "License"); +#   you may not use this file except in compliance with the License. +#   You may obtain a copy of the License at +# +#       http://www.apache.org/licenses/LICENSE-2.0 +# +#   Unless required by applicable law or agreed to in writing, software +#   distributed under the License is distributed on an "AS IS" BASIS, +#   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +#   See the License for the specific language governing permissions and +#   limitations under the License. +# + +# This is in place because each module looks similar to each other. +# These need duplicate code as their behavior is very similar +# but different for each zabbix class. +# pylint: disable=duplicate-code + +# pylint: disable=import-error +from openshift_tools.monitoring.zbxapi import ZabbixAPI, ZabbixConnection + +def exists(content, key='result'): +    ''' Check if key exists in content or the size of content[key] > 0 +    ''' +    if not content.has_key(key): +        return False + +    if not content[key]: +        return False + +    return True + +def get_value_type(value_type): +    ''' +    Possible values: +    0 - numeric float; +    1 - character; +    2 - log; +    3 - numeric unsigned; +    4 - text +    ''' +    vtype = 0 +    if 'int' in value_type: +        vtype = 3 +    elif 'char' in value_type: +        vtype = 1 +    elif 'str' in value_type: +        vtype = 4 + +    return vtype + +def get_app_ids(zapi, application_names): +    ''' get application ids from names +    ''' +    app_ids = [] +    for app_name in application_names: +        content = zapi.get_content('application', 'get', {'search': {'name': app_name}}) +        if content.has_key('result'): +            app_ids.append(content['result'][0]['applicationid']) +    return app_ids + +def main(): +    ''' +    ansible zabbix module for zbx_item +    ''' + +    module = AnsibleModule( +        argument_spec=dict( +            server=dict(default='https://localhost/zabbix/api_jsonrpc.php', type='str'), +            user=dict(default=None, type='str'), +            password=dict(default=None, type='str'), +            name=dict(default=None, type='str'), +            key=dict(default=None, type='str'), +            template_name=dict(default=None, type='str'), +            zabbix_type=dict(default=2, type='int'), +            value_type=dict(default='int', type='str'), +            applications=dict(default=[], type='list'), +            debug=dict(default=False, type='bool'), +            state=dict(default='present', type='str'), +        ), +        #supports_check_mode=True +    ) + +    user = module.params.get('user', os.environ['ZABBIX_USER']) +    passwd = module.params.get('password', os.environ['ZABBIX_PASSWORD']) + +    zapi = ZabbixAPI(ZabbixConnection(module.params['server'], user, passwd, module.params['debug'])) + +    #Set the instance and the template for the rest of the calls +    zbx_class_name = 'item' +    idname = "itemid" +    state = module.params['state'] +    key = module.params['key'] +    template_name = module.params['template_name'] + +    content = zapi.get_content('template', 'get', {'search': {'host': template_name}}) +    templateid = None +    if content['result']: +        templateid = content['result'][0]['templateid'] +    else: +        module.exit_json(changed=False, +                         results='Error: Could find template with name %s for item.' % template_name, +                         state="Unkown") + +    content = zapi.get_content(zbx_class_name, +                               'get', +                               {'search': {'key_': key}, +                                'selectApplications': 'applicationid', +                               }) +    if state == 'list': +        module.exit_json(changed=False, results=content['result'], state="list") + +    if state == 'absent': +        if not exists(content): +            module.exit_json(changed=False, state="absent") + +        content = zapi.get_content(zbx_class_name, 'delete', [content['result'][0][idname]]) +        module.exit_json(changed=True, results=content['result'], state="absent") + +    if state == 'present': +        params = {'name': module.params.get('name', module.params['key']), +                  'key_': key, +                  'hostid': templateid, +                  'type': module.params['zabbix_type'], +                  'value_type': get_value_type(module.params['value_type']), +                  'applications': get_app_ids(zapi, module.params['applications']), +                 } + +        if not exists(content): +            # if we didn't find it, create it +            content = zapi.get_content(zbx_class_name, 'create', params) +            module.exit_json(changed=True, results=content['result'], state='present') +        # already exists, we need to update it +        # let's compare properties +        differences = {} +        zab_results = content['result'][0] +        for key, value in params.items(): + +            if zab_results[key] != value and zab_results[key] != str(value): +                differences[key] = value + +        if not differences: +            module.exit_json(changed=False, results=zab_results, state="present") + +        # We have differences and need to update +        differences[idname] = zab_results[idname] +        content = zapi.get_content(zbx_class_name, 'update', differences) +        module.exit_json(changed=True, results=content['result'], state="present") + +    module.exit_json(failed=True, +                     changed=False, +                     results='Unknown state passed. %s' % state, +                     state="unknown") + +# pylint: disable=redefined-builtin, unused-wildcard-import, wildcard-import, locally-disabled +# import module snippets.  This are required +from ansible.module_utils.basic import * + +main() diff --git a/roles/os_zabbix/library/zbx_itemprototype.py b/roles/os_zabbix/library/zbx_itemprototype.py new file mode 100644 index 000000000..f0eb6bbbd --- /dev/null +++ b/roles/os_zabbix/library/zbx_itemprototype.py @@ -0,0 +1,241 @@ +#!/usr/bin/env python +''' +Zabbix discovery rule ansible module +''' +# vim: expandtab:tabstop=4:shiftwidth=4 +# +#   Copyright 2015 Red Hat Inc. +# +#   Licensed under the Apache License, Version 2.0 (the "License"); +#   you may not use this file except in compliance with the License. +#   You may obtain a copy of the License at +# +#       http://www.apache.org/licenses/LICENSE-2.0 +# +#   Unless required by applicable law or agreed to in writing, software +#   distributed under the License is distributed on an "AS IS" BASIS, +#   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +#   See the License for the specific language governing permissions and +#   limitations under the License. +# + +# This is in place because each module looks similar to each other. +# These need duplicate code as their behavior is very similar +# but different for each zabbix class. +# pylint: disable=duplicate-code + +# pylint: disable=import-error +from openshift_tools.monitoring.zbxapi import ZabbixAPI, ZabbixConnection + +def exists(content, key='result'): +    ''' Check if key exists in content or the size of content[key] > 0 +    ''' +    if not content.has_key(key): +        return False + +    if not content[key]: +        return False + +    return True + +def get_rule_id(zapi, discoveryrule_name): +    '''get a discoveryrule by name +    ''' +    content = zapi.get_content('discoveryrule', +                               'get', +                               {'search': {'name': discoveryrule_name}, +                                'output': 'extend', +                               }) +    if not content['result']: +        return None +    return content['result'][0]['itemid'] + +def get_template(zapi, template_name): +    '''get a template by name +    ''' +    content = zapi.get_content('template', +                               'get', +                               {'search': {'host': template_name}, +                                'output': 'extend', +                                'selectInterfaces': 'interfaceid', +                               }) +    if not content['result']: +        return None +    return content['result'][0] + +def get_type(ztype): +    ''' +    Determine which type of discoverrule this is +    ''' +    _types = {'agent': 0, +              'SNMPv1': 1, +              'trapper': 2, +              'simple': 3, +              'SNMPv2': 4, +              'internal': 5, +              'SNMPv3': 6, +              'active': 7, +              'aggregate': 8, +              'external': 10, +              'database monitor': 11, +              'ipmi': 12, +              'ssh': 13, +              'telnet': 14, +              'calculated': 15, +              'JMX': 16, +             } + +    for typ in _types.keys(): +        if ztype in typ or ztype == typ: +            _vtype = _types[typ] +            break +    else: +        _vtype = 2 + +    return _vtype + +def get_value_type(value_type): +    ''' +    Possible values: +    0 - numeric float; +    1 - character; +    2 - log; +    3 - numeric unsigned; +    4 - text +    ''' +    vtype = 0 +    if 'int' in value_type: +        vtype = 3 +    elif 'char' in value_type: +        vtype = 1 +    elif 'str' in value_type: +        vtype = 4 + +    return vtype + +def get_status(status): +    ''' Determine status +    ''' +    _status = 0 +    if status == 'disabled': +        _status = 1 +    elif status == 'unsupported': +        _status = 3 + +    return _status + +def get_app_ids(zapi, application_names): +    ''' get application ids from names +    ''' +    app_ids = [] +    for app_name in application_names: +        content = zapi.get_content('application', 'get', {'search': {'name': app_name}}) +        if content.has_key('result'): +            app_ids.append(content['result'][0]['applicationid']) +    return app_ids + +def main(): +    ''' +    Ansible module for zabbix discovery rules +    ''' + +    module = AnsibleModule( +        argument_spec=dict( +            server=dict(default='https://localhost/zabbix/api_jsonrpc.php', type='str'), +            user=dict(default=os.environ['ZABBIX_USER'], type='str'), +            password=dict(default=os.environ['ZABBIX_PASSWORD'], type='str'), +            name=dict(default=None, type='str'), +            key=dict(default=None, type='str'), +            interfaceid=dict(default=None, type='int'), +            ztype=dict(default='trapper', type='str'), +            value_type=dict(default='float', type='str'), +            delay=dict(default=60, type='int'), +            lifetime=dict(default=30, type='int'), +            template_name=dict(default=[], type='list'), +            debug=dict(default=False, type='bool'), +            state=dict(default='present', type='str'), +            status=dict(default='enabled', type='str'), +            discoveryrule_name=dict(default=None, type='str'), +            applications=dict(default=[], type='list'), +        ), +        #supports_check_mode=True +    ) + +    user = module.params['user'] +    passwd = module.params['password'] + +    zapi = ZabbixAPI(ZabbixConnection(module.params['server'], user, passwd, module.params['debug'])) + +    #Set the instance and the template for the rest of the calls +    zbx_class_name = 'itemprototype' +    idname = "itemid" +    dname = module.params['name'] +    state = module.params['state'] + +    # selectInterfaces doesn't appear to be working but is needed. +    content = zapi.get_content(zbx_class_name, +                               'get', +                               {'search': {'name': dname}, +                                'selectApplications': 'applicationid', +                                'selectDiscoveryRule': 'itemid', +                                #'selectDhosts': 'dhostid', +                               }) +    if state == 'list': +        module.exit_json(changed=False, results=content['result'], state="list") + +    if state == 'absent': +        if not exists(content): +            module.exit_json(changed=False, state="absent") + +        content = zapi.get_content(zbx_class_name, 'delete', [content['result'][0][idname]]) +        module.exit_json(changed=True, results=content['result'], state="absent") + +    if state == 'present': +        template = get_template(zapi, module.params['template_name']) +        params = {'name': dname, +                  'key_':  module.params['key'], +                  'hostid':  template['templateid'], +                  'interfaceid': module.params['interfaceid'], +                  'ruleid': get_rule_id(zapi, module.params['discoveryrule_name']), +                  'type': get_type(module.params['ztype']), +                  'value_type': get_value_type(module.params['value_type']), +                  'applications': get_app_ids(zapi, module.params['applications']), +                 } +        if params['type'] in [2, 5, 7, 8, 11, 15]: +            params.pop('interfaceid') + +        if not exists(content): +            # if we didn't find it, create it +            content = zapi.get_content(zbx_class_name, 'create', params) +            module.exit_json(changed=True, results=content['result'], state='present') +        # already exists, we need to update it +        # let's compare properties +        differences = {} +        zab_results = content['result'][0] +        for key, value in params.items(): + +            if key == 'ruleid': +                if value != zab_results['discoveryRule']['itemid']: +                    differences[key] = value + +            elif zab_results[key] != value and zab_results[key] != str(value): +                differences[key] = value + +        if not differences: +            module.exit_json(changed=False, results=zab_results, state="present") + +        # We have differences and need to update +        differences[idname] = zab_results[idname] +        content = zapi.get_content(zbx_class_name, 'update', differences) +        module.exit_json(changed=True, results=content['result'], state="present") + +    module.exit_json(failed=True, +                     changed=False, +                     results='Unknown state passed. %s' % state, +                     state="unknown") + +# pylint: disable=redefined-builtin, unused-wildcard-import, wildcard-import, locally-disabled +# import module snippets.  This are required +from ansible.module_utils.basic import * + +main() diff --git a/roles/os_zabbix/library/zbx_mediatype.py b/roles/os_zabbix/library/zbx_mediatype.py new file mode 100644 index 000000000..a49aecd0f --- /dev/null +++ b/roles/os_zabbix/library/zbx_mediatype.py @@ -0,0 +1,149 @@ +#!/usr/bin/env python +''' + Ansible module for mediatype +''' +# vim: expandtab:tabstop=4:shiftwidth=4 +# +#   Zabbix mediatype ansible module +# +# +#   Copyright 2015 Red Hat Inc. +# +#   Licensed under the Apache License, Version 2.0 (the "License"); +#   you may not use this file except in compliance with the License. +#   You may obtain a copy of the License at +# +#       http://www.apache.org/licenses/LICENSE-2.0 +# +#   Unless required by applicable law or agreed to in writing, software +#   distributed under the License is distributed on an "AS IS" BASIS, +#   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +#   See the License for the specific language governing permissions and +#   limitations under the License. +# + +# This is in place because each module looks similar to each other. +# These need duplicate code as their behavior is very similar +# but different for each zabbix class. +# pylint: disable=duplicate-code + +# pylint: disable=import-error +from openshift_tools.monitoring.zbxapi import ZabbixAPI, ZabbixConnection + +def exists(content, key='result'): +    ''' Check if key exists in content or the size of content[key] > 0 +    ''' +    if not content.has_key(key): +        return False + +    if not content[key]: +        return False + +    return True +def get_mtype(mtype): +    ''' +    Transport used by the media type. +    Possible values: +    0 - email; +    1 - script; +    2 - SMS; +    3 - Jabber; +    100 - Ez Texting. +    ''' +    mtype = mtype.lower() +    media_type = None +    if mtype == 'script': +        media_type = 1 +    elif mtype == 'sms': +        media_type = 2 +    elif mtype == 'jabber': +        media_type = 3 +    elif mtype == 'script': +        media_type = 100 +    else: +        media_type = 0 + +    return media_type + +def main(): +    ''' +    Ansible zabbix module for mediatype +    ''' + +    module = AnsibleModule( +        argument_spec=dict( +            server=dict(default='https://localhost/zabbix/api_jsonrpc.php', type='str'), +            user=dict(default=None, type='str'), +            password=dict(default=None, type='str'), +            description=dict(default=None, type='str'), +            mtype=dict(default=None, type='str'), +            smtp_server=dict(default=None, type='str'), +            smtp_helo=dict(default=None, type='str'), +            smtp_email=dict(default=None, type='str'), +            debug=dict(default=False, type='bool'), +            state=dict(default='present', type='str'), +        ), +        #supports_check_mode=True +    ) + +    user = module.params.get('user', os.environ['ZABBIX_USER']) +    passwd = module.params.get('password', os.environ['ZABBIX_PASSWORD']) + +    zapi = ZabbixAPI(ZabbixConnection(module.params['server'], user, passwd, module.params['debug'])) + +    #Set the instance and the template for the rest of the calls +    zbx_class_name = 'mediatype' +    idname = "mediatypeid" +    description = module.params['description'] +    state = module.params['state'] + +    content = zapi.get_content(zbx_class_name, 'get', {'search': {'description': description}}) +    if state == 'list': +        module.exit_json(changed=False, results=content['result'], state="list") + +    if state == 'absent': +        if not exists(content): +            module.exit_json(changed=False, state="absent") + +        content = zapi.get_content(zbx_class_name, 'delete', [content['result'][0][idname]]) +        module.exit_json(changed=True, results=content['result'], state="absent") + +    if state == 'present': +        params = {'description': description, +                  'type': get_mtype(module.params['media_type']), +                  'smtp_server': module.params['smtp_server'], +                  'smtp_helo': module.params['smtp_helo'], +                  'smtp_email': module.params['smtp_email'], +                 } + +        if not exists(content): +            # if we didn't find it, create it +            content = zapi.get_content(zbx_class_name, 'create', params) +            module.exit_json(changed=True, results=content['result'], state='present') +        # already exists, we need to update it +        # let's compare properties +        differences = {} +        zab_results = content['result'][0] +        for key, value in params.items(): +            if zab_results[key] != value and \ +               zab_results[key] != str(value): +                differences[key] = value + +        if not differences: +            module.exit_json(changed=False, results=zab_results, state="present") + +        # We have differences and need to update +        differences[idname] = zab_results[idname] +        content = zapi.get_content(zbx_class_name, 'update', differences) +        module.exit_json(changed=True, results=content['result'], state="present") + +    module.exit_json(failed=True, +                     changed=False, +                     results='Unknown state passed. %s' % state, +                     state="unknown") + +# pylint: disable=redefined-builtin, unused-wildcard-import, wildcard-import, locally-disabled +# import module snippets.  This are required +from ansible.module_utils.basic import * + +main() diff --git a/roles/os_zabbix/library/zbx_template.py b/roles/os_zabbix/library/zbx_template.py new file mode 100644 index 000000000..20ea48a85 --- /dev/null +++ b/roles/os_zabbix/library/zbx_template.py @@ -0,0 +1,127 @@ +#!/usr/bin/env python +''' +Ansible module for template +''' +# vim: expandtab:tabstop=4:shiftwidth=4 +# +#   Zabbix template ansible module +# +# +#   Copyright 2015 Red Hat Inc. +# +#   Licensed under the Apache License, Version 2.0 (the "License"); +#   you may not use this file except in compliance with the License. +#   You may obtain a copy of the License at +# +#       http://www.apache.org/licenses/LICENSE-2.0 +# +#   Unless required by applicable law or agreed to in writing, software +#   distributed under the License is distributed on an "AS IS" BASIS, +#   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +#   See the License for the specific language governing permissions and +#   limitations under the License. +# + +# This is in place because each module looks similar to each other. +# These need duplicate code as their behavior is very similar +# but different for each zabbix class. +# pylint: disable=duplicate-code + +# pylint: disable=import-error +from openshift_tools.monitoring.zbxapi import ZabbixAPI, ZabbixConnection + +def exists(content, key='result'): +    ''' Check if key exists in content or the size of content[key] > 0 +    ''' +    if not content.has_key(key): +        return False + +    if not content[key]: +        return False + +    return True + +def main(): +    ''' Ansible module for template +    ''' + +    module = AnsibleModule( +        argument_spec=dict( +            server=dict(default='https://localhost/zabbix/api_jsonrpc.php', type='str'), +            user=dict(default=None, type='str'), +            password=dict(default=None, type='str'), +            name=dict(default=None, type='str'), +            debug=dict(default=False, type='bool'), +            state=dict(default='present', type='str'), +        ), +        #supports_check_mode=True +    ) + +    user = module.params.get('user', os.environ['ZABBIX_USER']) +    passwd = module.params.get('password', os.environ['ZABBIX_PASSWORD']) + +    zbc = ZabbixConnection(module.params['server'], user, passwd, module.params['debug']) +    zapi = ZabbixAPI(zbc) + +    #Set the instance and the template for the rest of the calls +    zbx_class_name = 'template' +    idname = 'templateid' +    tname = module.params['name'] +    state = module.params['state'] +    # get a template, see if it exists +    content = zapi.get_content(zbx_class_name, +                               'get', +                               {'search': {'host': tname}, +                                'selectParentTemplates': 'templateid', +                                'selectGroups': 'groupid', +                                'selectApplications': 'applicationid', +                                'selectDiscoveries': 'extend', +                               }) +    if state == 'list': +        module.exit_json(changed=False, results=content['result'], state="list") + +    if state == 'absent': +        if not exists(content): +            module.exit_json(changed=False, state="absent") + +        content = zapi.get_content(zbx_class_name, 'delete', [content['result'][0][idname]]) +        module.exit_json(changed=True, results=content['result'], state="absent") + +    if state == 'present': +        params = {'groups': module.params.get('groups', [{'groupid': '1'}]), +                  'host': tname, +                 } + +        if not exists(content): +            # if we didn't find it, create it +            content = zapi.get_content(zbx_class_name, 'create', params) +            module.exit_json(changed=True, results=content['result'], state='present') +        # already exists, we need to update it +        # let's compare properties +        differences = {} +        zab_results = content['result'][0] +        for key, value in params.items(): +            if key == 'templates' and zab_results.has_key('parentTemplates'): +                if zab_results['parentTemplates'] != value: +                    differences[key] = value +            elif zab_results[key] != str(value) and zab_results[key] != value: +                differences[key] = value + +        if not differences: +            module.exit_json(changed=False, results=content['result'], state="present") + +        # We have differences and need to update +        differences[idname] = zab_results[idname] +        content = zapi.get_content(zbx_class_name, 'update', differences) +        module.exit_json(changed=True, results=content['result'], state="present") + +    module.exit_json(failed=True, +                     changed=False, +                     results='Unknown state passed. %s' % state, +                     state="unknown") + +# pylint: disable=redefined-builtin, unused-wildcard-import, wildcard-import, locally-disabled +# import module snippets.  This are required +from ansible.module_utils.basic import * + +main() diff --git a/roles/os_zabbix/library/zbx_trigger.py b/roles/os_zabbix/library/zbx_trigger.py new file mode 100644 index 000000000..7cc9356c8 --- /dev/null +++ b/roles/os_zabbix/library/zbx_trigger.py @@ -0,0 +1,175 @@ +#!/usr/bin/env python +''' +ansible module for zabbix triggers +''' +# vim: expandtab:tabstop=4:shiftwidth=4 +# +#   Zabbix trigger ansible module +# +# +#   Copyright 2015 Red Hat Inc. +# +#   Licensed under the Apache License, Version 2.0 (the "License"); +#   you may not use this file except in compliance with the License. +#   You may obtain a copy of the License at +# +#       http://www.apache.org/licenses/LICENSE-2.0 +# +#   Unless required by applicable law or agreed to in writing, software +#   distributed under the License is distributed on an "AS IS" BASIS, +#   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +#   See the License for the specific language governing permissions and +#   limitations under the License. +# + +# This is in place because each module looks similar to each other. +# These need duplicate code as their behavior is very similar +# but different for each zabbix class. +# pylint: disable=duplicate-code + +# pylint: disable=import-error +from openshift_tools.monitoring.zbxapi import ZabbixAPI, ZabbixConnection + +def exists(content, key='result'): +    ''' Check if key exists in content or the size of content[key] > 0 +    ''' +    if not content.has_key(key): +        return False + +    if not content[key]: +        return False + +    return True + + +def get_priority(priority): +    ''' determine priority +    ''' +    prior = 0 +    if 'info' in priority: +        prior = 1 +    elif 'warn' in priority: +        prior = 2 +    elif 'avg' == priority or 'ave' in priority: +        prior = 3 +    elif 'high' in priority: +        prior = 4 +    elif 'dis' in priority: +        prior = 5 + +    return prior + +def get_deps(zapi, deps): +    ''' get trigger dependencies +    ''' +    results = [] +    for desc in deps: +        content = zapi.get_content('trigger', +                                   'get', +                                   {'search': {'description': desc}, +                                    'expandExpression': True, +                                    'selectDependencies': 'triggerid', +                                   }) +        if content.has_key('result'): +            results.append({'triggerid': content['result'][0]['triggerid']}) + +    return results + +def main(): +    ''' +    Create a trigger in zabbix + +    Example: +    "params": { +        "description": "Processor load is too high on {HOST.NAME}", +        "expression": "{Linux server:system.cpu.load[percpu,avg1].last()}>5", +        "dependencies": [ +            { +                "triggerid": "14062" +            } +        ] +    }, + +    ''' + +    module = AnsibleModule( +        argument_spec=dict( +            server=dict(default='https://localhost/zabbix/api_jsonrpc.php', type='str'), +            user=dict(default=None, type='str'), +            password=dict(default=None, type='str'), +            expression=dict(default=None, type='str'), +            description=dict(default=None, type='str'), +            dependencies=dict(default=[], type='list'), +            priority=dict(default='avg', type='str'), +            debug=dict(default=False, type='bool'), +            state=dict(default='present', type='str'), +        ), +        #supports_check_mode=True +    ) + +    user = module.params.get('user', os.environ['ZABBIX_USER']) +    passwd = module.params.get('password', os.environ['ZABBIX_PASSWORD']) + + +    zapi = ZabbixAPI(ZabbixConnection(module.params['server'], user, passwd, module.params['debug'])) + +    #Set the instance and the template for the rest of the calls +    zbx_class_name = 'trigger' +    idname = "triggerid" +    state = module.params['state'] +    description = module.params['description'] + +    content = zapi.get_content(zbx_class_name, +                               'get', +                               {'search': {'description': description}, +                                'expandExpression': True, +                                'selectDependencies': 'triggerid', +                               }) +    if state == 'list': +        module.exit_json(changed=False, results=content['result'], state="list") + +    if state == 'absent': +        if not exists(content): +            module.exit_json(changed=False, state="absent") +        content = zapi.get_content(zbx_class_name, 'delete', [content['result'][0][idname]]) +        module.exit_json(changed=True, results=content['result'], state="absent") + +    if state == 'present': +        params = {'description': description, +                  'expression':  module.params['expression'], +                  'dependencies': get_deps(zapi, module.params['dependencies']), +                  'priority': get_priority(module.params['priority']), +                 } + +        if not exists(content): +            # if we didn't find it, create it +            content = zapi.get_content(zbx_class_name, 'create', params) +            module.exit_json(changed=True, results=content['result'], state='present') +        # already exists, we need to update it +        # let's compare properties +        differences = {} +        zab_results = content['result'][0] +        for key, value in params.items(): + +            if zab_results[key] != value and zab_results[key] != str(value): +                differences[key] = value + +        if not differences: +            module.exit_json(changed=False, results=zab_results, state="present") + +        # We have differences and need to update +        differences[idname] = zab_results[idname] +        content = zapi.get_content(zbx_class_name, 'update', differences) +        module.exit_json(changed=True, results=content['result'], state="present") + + +    module.exit_json(failed=True, +                     changed=False, +                     results='Unknown state passed. %s' % state, +                     state="unknown") + +# pylint: disable=redefined-builtin, unused-wildcard-import, wildcard-import, locally-disabled +# import module snippets.  This are required +from ansible.module_utils.basic import * + +main() diff --git a/roles/os_zabbix/library/zbx_user.py b/roles/os_zabbix/library/zbx_user.py new file mode 100644 index 000000000..c45c9a75d --- /dev/null +++ b/roles/os_zabbix/library/zbx_user.py @@ -0,0 +1,169 @@ +#!/usr/bin/env python +''' +ansible module for zabbix users +''' +# vim: expandtab:tabstop=4:shiftwidth=4 +# +#   Zabbix user ansible module +# +# +#   Copyright 2015 Red Hat Inc. +# +#   Licensed under the Apache License, Version 2.0 (the "License"); +#   you may not use this file except in compliance with the License. +#   You may obtain a copy of the License at +# +#       http://www.apache.org/licenses/LICENSE-2.0 +# +#   Unless required by applicable law or agreed to in writing, software +#   distributed under the License is distributed on an "AS IS" BASIS, +#   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +#   See the License for the specific language governing permissions and +#   limitations under the License. +# +# This is in place because each module looks similar to each other. +# These need duplicate code as their behavior is very similar +# but different for each zabbix class. +# pylint: disable=duplicate-code + +# pylint: disable=import-error +from openshift_tools.monitoring.zbxapi import ZabbixAPI, ZabbixConnection + +def exists(content, key='result'): +    ''' Check if key exists in content or the size of content[key] > 0 +    ''' +    if not content.has_key(key): +        return False + +    if not content[key]: +        return False + +    return True + +def get_usergroups(zapi, usergroups): +    ''' Get usergroups +    ''' +    ugroups = [] +    for ugr in usergroups: +        content = zapi.get_content('usergroup', +                                   'get', +                                   {'search': {'name': ugr}, +                                    #'selectUsers': 'userid', +                                    #'getRights': 'extend' +                                   }) +        if content['result']: +            ugroups.append({'usrgrpid': content['result'][0]['usrgrpid']}) + +    return ugroups or None + +def get_usertype(user_type): +    ''' +    Determine zabbix user account type +    ''' +    if not user_type: +        return None + +    utype = 1 +    if 'super' in user_type: +        utype = 3 +    elif 'admin' in user_type or user_type == 'admin': +        utype = 2 + +    return utype + +def main(): +    ''' +    ansible zabbix module for users +    ''' + +    ##def user(self, name, state='present', params=None): + +    module = AnsibleModule( +        argument_spec=dict( +            server=dict(default='https://localhost/zabbix/api_jsonrpc.php', type='str'), +            user=dict(default=None, type='str'), +            password=dict(default=None, type='str'), +            alias=dict(default=None, type='str'), +            name=dict(default=None, type='str'), +            surname=dict(default=None, type='str'), +            user_type=dict(default=None, type='str'), +            passwd=dict(default=None, type='str'), +            usergroups=dict(default=[], type='list'), +            debug=dict(default=False, type='bool'), +            state=dict(default='present', type='str'), +        ), +        #supports_check_mode=True +    ) + +    user = module.params.get('user', os.environ['ZABBIX_USER']) +    password = module.params.get('password', os.environ['ZABBIX_PASSWORD']) + +    zapi = ZabbixAPI(ZabbixConnection(module.params['server'], user, password, module.params['debug'])) + +    ## before we can create a user media and users with media types we need media +    zbx_class_name = 'user' +    idname = "userid" +    alias = module.params['alias'] +    state = module.params['state'] + +    content = zapi.get_content(zbx_class_name, +                               'get', +                               {'output': 'extend', +                                'search': {'alias': alias}, +                                "selectUsrgrps": 'usergrpid', +                               }) +    if state == 'list': +        module.exit_json(changed=False, results=content['result'], state="list") + +    if state == 'absent': +        if not exists(content): +            module.exit_json(changed=False, state="absent") + +        content = zapi.get_content(zbx_class_name, 'delete', [content['result'][0][idname]]) +        module.exit_json(changed=True, results=content['result'], state="absent") + +    if state == 'present': +        params = {'alias': alias, +                  'passwd': module.params['passwd'], +                  'usrgrps': get_usergroups(zapi, module.params['usergroups']), +                  'name': module.params['name'], +                  'surname': module.params['surname'], +                  'type': get_usertype(module.params['user_type']), +                 } + +        # Remove any None valued params +        _ = [params.pop(key, None) for key in params.keys() if params[key] is None] + +        if not exists(content): +            # if we didn't find it, create it +            content = zapi.get_content(zbx_class_name, 'create', params) +            module.exit_json(changed=True, results=content['result'], state='present') +        # already exists, we need to update it +        # let's compare properties +        differences = {} +        zab_results = content['result'][0] +        for key, value in params.items(): +            if key == 'passwd': +                differences[key] = value + +            elif zab_results[key] != value and zab_results[key] != str(value): +                differences[key] = value + +        if not differences: +            module.exit_json(changed=False, results=zab_results, state="present") + +        # We have differences and need to update +        differences[idname] = zab_results[idname] +        content = zapi.get_content(zbx_class_name, 'update', differences) +        module.exit_json(changed=True, results=content['result'], state="present") + +    module.exit_json(failed=True, +                     changed=False, +                     results='Unknown state passed. %s' % state, +                     state="unknown") + +# pylint: disable=redefined-builtin, unused-wildcard-import, wildcard-import, locally-disabled +# import module snippets.  This are required +from ansible.module_utils.basic import * + +main() diff --git a/roles/os_zabbix/library/zbx_usergroup.py b/roles/os_zabbix/library/zbx_usergroup.py new file mode 100644 index 000000000..ede4c9df1 --- /dev/null +++ b/roles/os_zabbix/library/zbx_usergroup.py @@ -0,0 +1,160 @@ +#!/usr/bin/env python +''' +zabbix ansible module for usergroups +''' +# vim: expandtab:tabstop=4:shiftwidth=4 +# +#   Zabbix usergroup ansible module +# +# +#   Copyright 2015 Red Hat Inc. +# +#   Licensed under the Apache License, Version 2.0 (the "License"); +#   you may not use this file except in compliance with the License. +#   You may obtain a copy of the License at +# +#       http://www.apache.org/licenses/LICENSE-2.0 +# +#   Unless required by applicable law or agreed to in writing, software +#   distributed under the License is distributed on an "AS IS" BASIS, +#   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +#   See the License for the specific language governing permissions and +#   limitations under the License. +# + +# This is in place because each module looks similar to each other. +# These need duplicate code as their behavior is very similar +# but different for each zabbix class. +# pylint: disable=duplicate-code + +# pylint: disable=import-error +from openshift_tools.monitoring.zbxapi import ZabbixAPI, ZabbixConnection + +def exists(content, key='result'): +    ''' Check if key exists in content or the size of content[key] > 0 +    ''' +    if not content.has_key(key): +        return False + +    if not content[key]: +        return False + +    return True + +def get_rights(zapi, rights): +    '''Get rights +    ''' +    perms = [] +    for right in rights: +        hstgrp = right.keys()[0] +        perm = right.values()[0] +        content = zapi.get_content('hostgroup', 'get', {'search': {'name': hstgrp}}) +        if content['result']: +            permission = 0 +            if perm == 'ro': +                permission = 2 +            elif perm == 'rw': +                permission = 3 +            perms.append({'id': content['result'][0]['groupid'], +                          'permission': permission}) +    return perms + +def get_userids(zapi, users): +    ''' Get userids from user aliases +    ''' +    userids = [] +    for alias in users: +        content = zapi.get_content('user', 'get', {'search': {'alias': alias}}) +        if content['result']: +            userids.append(content['result'][0]['userid']) + +    return userids + +def main(): +    ''' Ansible module for usergroup +    ''' + +    ##def usergroup(self, name, rights=None, users=None, state='present', params=None): + +    module = AnsibleModule( +        argument_spec=dict( +            server=dict(default='https://localhost/zabbix/api_jsonrpc.php', type='str'), +            user=dict(default=None, type='str'), +            password=dict(default=None, type='str'), +            name=dict(default=None, type='str'), +            rights=dict(default=[], type='list'), +            users=dict(default=[], type='list'), +            debug=dict(default=False, type='bool'), +            state=dict(default='present', type='str'), +        ), +        #supports_check_mode=True +    ) + +    user = module.params.get('user', os.environ['ZABBIX_USER']) +    passwd = module.params.get('password', os.environ['ZABBIX_PASSWORD']) + +    zapi = ZabbixAPI(ZabbixConnection(module.params['server'], user, passwd, module.params['debug'])) + +    zbx_class_name = 'usergroup' +    idname = "usrgrpid" +    uname = module.params['name'] +    state = module.params['state'] + +    content = zapi.get_content(zbx_class_name, +                               'get', +                               {'search': {'name': uname}, +                                'selectUsers': 'userid', +                               }) +    if state == 'list': +        module.exit_json(changed=False, results=content['result'], state="list") + +    if state == 'absent': +        if not exists(content): +            module.exit_json(changed=False, state="absent") + +        content = zapi.get_content(zbx_class_name, 'delete', [content['result'][0][idname]]) +        module.exit_json(changed=True, results=content['result'], state="absent") + +    if state == 'present': +        params = {'name': uname, +                  'rights': get_rights(zapi, module.params['rights']), +                  'userids': get_userids(zapi, module.params['users']), +                 } + +        if not exists(content): +            # if we didn't find it, create it +            content = zapi.get_content(zbx_class_name, 'create', params) +            module.exit_json(changed=True, results=content['result'], state='present') +        # already exists, we need to update it +        # let's compare properties +        differences = {} +        zab_results = content['result'][0] +        for key, value in params.items(): +            if key == 'rights': +                differences['rights'] = value + +            elif key == 'userids' and zab_results.has_key('users'): +                if zab_results['users'] != value: +                    differences['userids'] = value + +            elif zab_results[key] != value and zab_results[key] != str(value): +                differences[key] = value + +        if not differences: +            module.exit_json(changed=False, results=zab_results, state="present") + +        # We have differences and need to update +        differences[idname] = zab_results[idname] +        content = zapi.get_content(zbx_class_name, 'update', differences) +        module.exit_json(changed=True, results=content['result'], state="present") + +    module.exit_json(failed=True, +                     changed=False, +                     results='Unknown state passed. %s' % state, +                     state="unknown") + +# pylint: disable=redefined-builtin, unused-wildcard-import, wildcard-import, locally-disabled +# import module snippets.  This are required +from ansible.module_utils.basic import * + +main() diff --git a/roles/os_zabbix/meta/main.yml b/roles/os_zabbix/meta/main.yml deleted file mode 100644 index 360f5aad2..000000000 --- a/roles/os_zabbix/meta/main.yml +++ /dev/null @@ -1,9 +0,0 @@ ---- -galaxy_info: -  author: OpenShift -  description:  ZabbixAPI -  company: Red Hat, Inc -  license: ASL 2.0 -  min_ansible_version: 1.2 -dependencies: -- lib_zabbix diff --git a/roles/os_zabbix/tasks/clean_zabbix.yml b/roles/os_zabbix/tasks/clean_zabbix.yml deleted file mode 100644 index 1bcc07d42..000000000 --- a/roles/os_zabbix/tasks/clean_zabbix.yml +++ /dev/null @@ -1,47 +0,0 @@ ---- -- name: CLEAN List template for heartbeat -  zbx_template: -    server: "{{ server }}" -    user: "{{ user }}" -    password: "{{ password }}" -    state: list -    name: 'Template Heartbeat' -  register: templ_heartbeat - -- name: CLEAN List template app zabbix server -  zbx_template: -    server: "{{ server }}" -    user: "{{ user }}" -    password: "{{ password }}" -    state: list -    name: 'Template App Zabbix Server' -  register: templ_zabbix_server - -- name: CLEAN List template app zabbix server -  zbx_template: -    server: "{{ server }}" -    user: "{{ user }}" -    password: "{{ password }}" -    state: list -    name: 'Template App Zabbix Agent' -  register: templ_zabbix_agent - -- name: CLEAN List all templates -  zbx_template: -    server: "{{ server }}" -    user: "{{ user }}" -    password: "{{ password }}" -    state: list -  register: templates - -- debug: var=templ_heartbeat.results - -- name: Remove templates if heartbeat template is missing -  zbx_template: -    server: "{{ server }}" -    user: "{{ user }}" -    password: "{{ password }}" -    name: "{{ item }}" -    state: absent -  with_items: "{{ templates.results | difference(templ_zabbix_agent.results) | difference(templ_zabbix_server.results) | oo_collect('host') }}" -  when:  templ_heartbeat.results | length == 0 diff --git a/roles/os_zabbix/tasks/create_template.yml b/roles/os_zabbix/tasks/create_template.yml deleted file mode 100644 index 070390aba..000000000 --- a/roles/os_zabbix/tasks/create_template.yml +++ /dev/null @@ -1,56 +0,0 @@ ---- -- debug: var=template - -- name: Template Create Template -  zbx_template: -    server: "{{ server }}" -    user: "{{ user }}" -    password: "{{ password }}" -    name: "{{ template.name }}" -  register: created_template - -- debug: var=created_template - -- name: Create Application -  zbx_application: -    server: "{{ server }}" -    user: "{{ user }}" -    password: "{{ password }}" -    name: "{{ item }}" -    template_name: "{{ template.name }}" -  with_items: template.zapplications -  register: created_application -  when: template.zapplications is defined - -- debug: var=created_application - -- name: Create Items -  zbx_item: -    server: "{{ server }}" -    user: "{{ user }}" -    password: "{{ password }}" -    key: "{{ item.key }}" -    name: "{{ item.name | default(item.key, true) }}" -    value_type: "{{ item.value_type | default('int') }}" -    template_name: "{{ template.name }}" -    applications: "{{ item.application }}" -  with_items: template.zitems -  register: created_items -  when: template.zitems is defined - -#- debug: var=ctp_created_items - -- name: Create Triggers -  zbx_trigger: -    server: "{{ server }}" -    user: "{{ user }}" -    password: "{{ password }}" -    description: "{{ item.description }}" -    expression: "{{ item.expression }}" -    priority: "{{ item.priority }}" -  with_items: template.ztriggers -  when: template.ztriggers is defined - -#- debug: var=ctp_created_triggers - - diff --git a/roles/os_zabbix/tasks/create_user.yml b/roles/os_zabbix/tasks/create_user.yml deleted file mode 100644 index 1f752a9e1..000000000 --- a/roles/os_zabbix/tasks/create_user.yml +++ /dev/null @@ -1,11 +0,0 @@ ---- -- name: Update zabbix credentialss for a user -  zbx_user: -    server: "{{ ozb_server }}" -    user: "{{ ozb_user }}" -    password: "{{ ozb_password }}" -    alias: "{{ ozb_username }}" -    passwd: "{{ ozb_new_password | default(ozb_password, true) }}" -  register: user - -- debug: var=user.results diff --git a/roles/os_zabbix/tasks/main.yml b/roles/os_zabbix/tasks/main.yml deleted file mode 100644 index 06c0a09fc..000000000 --- a/roles/os_zabbix/tasks/main.yml +++ /dev/null @@ -1,30 +0,0 @@ ---- -- name: Main List all templates -  zbx_template: -    server: "{{ ozb_server }}" -    user: "{{ ozb_user }}" -    password: "{{ ozb_password }}" -    state: list -  register: templates - -- debug: var=templates - -- include_vars: template_heartbeat.yml -- include_vars: template_os_linux.yml - -- name: Include Template Heartbeat -  include: create_template.yml -  vars: -    template: "{{ g_template_heartbeat }}" -    server: "{{ ozb_server }}" -    user: "{{ ozb_user }}" -    password: "{{ ozb_password }}" - -#- name: Include Template os_linux -#  include: create_template.yml -#  vars: -#    template: "{{ g_template_os_linux }}" -#    server: "{{ ozb_server }}" -#    user: "{{ ozb_user }}" -#    password: "{{ ozb_password }}" - diff --git a/roles/os_zabbix/vars/main.yml b/roles/os_zabbix/vars/main.yml deleted file mode 100644 index ed97d539c..000000000 --- a/roles/os_zabbix/vars/main.yml +++ /dev/null @@ -1 +0,0 @@ ---- diff --git a/roles/os_zabbix/vars/template_heartbeat.yml b/roles/os_zabbix/vars/template_heartbeat.yml deleted file mode 100644 index 158d6c79a..000000000 --- a/roles/os_zabbix/vars/template_heartbeat.yml +++ /dev/null @@ -1,13 +0,0 @@ ---- -g_template_heartbeat: -  name: Template Heartbeat -  zapplications: -  - Heartbeat -  zitems: -  - name: Heartbeat Ping -    application: Heartbeat -    key: heartbeat.ping -  ztriggers: -  - description: 'Heartbeat.ping has failed on {HOST.NAME}' -    expression: '{Template Heartbeat:heartbeat.ping.last()}<>0' -    priority: avg diff --git a/roles/os_zabbix/vars/template_host.yml b/roles/os_zabbix/vars/template_host.yml deleted file mode 100644 index e7cc667cb..000000000 --- a/roles/os_zabbix/vars/template_host.yml +++ /dev/null @@ -1,27 +0,0 @@ ---- -g_template_host: -  params: -    name: Template Host -    host: Template Host -    groups: -    - groupid: 1 # FIXME (not real) -    output: extend -    search: -      name: Template Host -  zitems: -  - name: Host Ping -    hostid:  -    key_: host.ping -    type: 2 -    value_type: 0 -    output: extend -    search: -      key_: host.ping -  ztriggers: -  - description: 'Host ping has failed on {HOST.NAME}' -    expression: '{Template Host:host.ping.last()}<>0' -    priority: 3 -    searchWildcardsEnabled: True -    search: -      description: 'Host ping has failed on*' -    expandExpression: True diff --git a/roles/os_zabbix/vars/template_master.yml b/roles/os_zabbix/vars/template_master.yml deleted file mode 100644 index 5f9b41a4f..000000000 --- a/roles/os_zabbix/vars/template_master.yml +++ /dev/null @@ -1,27 +0,0 @@ ---- -g_template_master: -  params: -    name: Template Master -    host: Template Master -    groups: -    - groupid: 1 # FIXME (not real) -    output: extend -    search: -      name: Template Master -  zitems: -  - name: Master Etcd Ping -    hostid:  -    key_: master.etcd.ping -    type: 2 -    value_type: 0 -    output: extend -    search: -      key_: master.etcd.ping -  ztriggers: -  - description: 'Master Etcd ping has failed on {HOST.NAME}' -    expression: '{Template Master:master.etcd.ping.last()}<>0' -    priority: 3 -    searchWildcardsEnabled: True -    search: -      description: 'Master Etcd ping has failed on*' -    expandExpression: True diff --git a/roles/os_zabbix/vars/template_node.yml b/roles/os_zabbix/vars/template_node.yml deleted file mode 100644 index 98c343a24..000000000 --- a/roles/os_zabbix/vars/template_node.yml +++ /dev/null @@ -1,27 +0,0 @@ ---- -g_template_node: -  params: -    name: Template Node -    host: Template Node -    groups: -    - groupid: 1 # FIXME (not real) -    output: extend -    search: -      name: Template Node -  zitems: -  - name: Kubelet Ping -    hostid:  -    key_: kubelet.ping -    type: 2 -    value_type: 0 -    output: extend -    search: -      key_: kubelet.ping -  ztriggers: -  - description: 'Kubelet ping has failed on {HOST.NAME}' -    expression: '{Template Node:kubelet.ping.last()}<>0' -    priority: 3 -    searchWildcardsEnabled: True -    search: -      description: 'Kubelet ping has failed on*' -    expandExpression: True diff --git a/roles/os_zabbix/vars/template_os_linux.yml b/roles/os_zabbix/vars/template_os_linux.yml deleted file mode 100644 index 1cc928bce..000000000 --- a/roles/os_zabbix/vars/template_os_linux.yml +++ /dev/null @@ -1,143 +0,0 @@ ---- -g_template_os_linux: -  name: Template OS Linux -  zapplications: -  - Disk -  - Memory -  - Kernel -  zitems: -  - key: kernel.uname.sysname -    application: Kernel -    value_type: string - -  - key: kernel.all.cpu.wait.total -    application: Kernel -    value_type: int - -  - key: kernel.all.cpu.irq.hard -    application: Kernel -    value_type: int - -  - key: kernel.all.cpu.idle -    application: Kernel -    value_type: int - -  - key: kernel.uname.distro -    application: Kernel -    value_type: string - -  - key: kernel.uname.nodename -    application: Kernel -    value_type: string - -  - key: kernel.all.cpu.irq.soft -    application: Kernel -    value_type: int - -  - key: kernel.all.load.15_minute -    application: Kernel -    value_type: float - -  - key: kernel.all.cpu.sys -    application: Kernel -    value_type: int - -  - key: kernel.all.load.5_minute -    application: Kernel -    value_type: float - -  - key: mem.freemem -    application: Memory -    value_type: int - -  - key: kernel.all.cpu.nice -    application: Kernel -    value_type: int - -  - key: mem.util.bufmem -    application: Memory -    value_type: int - -  - key: swap.used -    application: Memory -    value_type: int - -  - key: kernel.all.load.1_minute -    application: Kernel -    value_type: float - -  - key: kernel.uname.version -    application: Kernel -    value_type: string - -  - key: swap.length -    application: Memory -    value_type: int - -  - key: mem.physmem -    application: Memory -    value_type: int - -  - key: kernel.all.uptime -    application: Kernel -    value_type: int - -  - key: swap.free -    application: Memory -    value_type: int - -  - key: mem.util.used -    application: Memory -    value_type: int - -  - key: kernel.all.cpu.user -    application: Kernel -    value_type: int - -  - key: kernel.uname.machine -    application: Kernel -    value_type: string - -  - key: hinv.ncpu -    application: Kernel -    value_type: int - -  - key: mem.util.cached -    application: Memory -    value_type: int - -  - key: kernel.all.cpu.steal -    application: Kernel -    value_type: int - -  - key: kernel.all.pswitch -    application: Kernel -    value_type: int - -  - key: kernel.uname.release -    application: Kernel -    value_type: string - -  - key: proc.nprocs -    application: Kernel -    value_type: int - -  - key: filesys.avail -    application: Disk -    value_type: int - -  - key: filesys.capacity -    application: Disk -    value_type: int - -  - key: filesys.free -    application: Disk -    value_type: int - -  - key: filesys.full -    application: Disk -    value_type: float - -  - key: filesys.used -    application: Disk -    value_type: float diff --git a/roles/os_zabbix/vars/template_router.yml b/roles/os_zabbix/vars/template_router.yml deleted file mode 100644 index 4dae7da1e..000000000 --- a/roles/os_zabbix/vars/template_router.yml +++ /dev/null @@ -1,27 +0,0 @@ ---- -g_template_router: -  params: -    name: Template Router -    host: Template Router -    groups: -    - groupid: 1 # FIXME (not real) -    output: extend -    search: -      name: Template Router -  zitems: -  - name: Router Backends down -    hostid:  -    key_: router.backends.down -    type: 2 -    value_type: 0 -    output: extend -    search: -      key_: router.backends.down -  ztriggers: -  - description: 'Number of router backends down on {HOST.NAME}' -    expression: '{Template Router:router.backends.down.last()}<>0' -    priority: 3 -    searchWildcardsEnabled: True -    search: -      description: 'Number of router backends down on {HOST.NAME}' -    expandExpression: True | 
