diff options
| author | Matt Woodson <mwoodson@gmail.com> | 2015-09-22 15:03:16 -0400 | 
|---|---|---|
| committer | Matt Woodson <mwoodson@gmail.com> | 2015-09-22 15:03:16 -0400 | 
| commit | dfa3c0c22e3ad541e08ebc0c36fdccc735f13d4b (patch) | |
| tree | 0b3bddcf0cc954e9a4598824824526d3f91805db /roles/lib_zabbix/library | |
| parent | ce79b88ba3d5e1adf71e073eafa4fb4a9c77918b (diff) | |
| parent | b800a153702168419d93ca82c8fa28f009bb64be (diff) | |
| download | openshift-dfa3c0c22e3ad541e08ebc0c36fdccc735f13d4b.tar.gz openshift-dfa3c0c22e3ad541e08ebc0c36fdccc735f13d4b.tar.bz2 openshift-dfa3c0c22e3ad541e08ebc0c36fdccc735f13d4b.tar.xz openshift-dfa3c0c22e3ad541e08ebc0c36fdccc735f13d4b.zip | |
Merge pull request #602 from kwoodson/tmp1
Adding support for prototypes and discoveryrules
Diffstat (limited to 'roles/lib_zabbix/library')
| -rw-r--r-- | roles/lib_zabbix/library/zbx_discoveryrule.py | 36 | ||||
| -rw-r--r-- | roles/lib_zabbix/library/zbx_itemprototype.py | 56 | 
2 files changed, 76 insertions, 16 deletions
| diff --git a/roles/lib_zabbix/library/zbx_discoveryrule.py b/roles/lib_zabbix/library/zbx_discoveryrule.py index 71a0580c2..71141bd54 100644 --- a/roles/lib_zabbix/library/zbx_discoveryrule.py +++ b/roles/lib_zabbix/library/zbx_discoveryrule.py @@ -85,6 +85,7 @@ def main():      Ansible module for zabbix discovery rules      ''' +      module = AnsibleModule(          argument_spec=dict(              zbx_server=dict(default='https://localhost/zabbix/api_jsonrpc.php', type='str'), @@ -113,18 +114,27 @@ def main():      idname = "itemid"      dname = module.params['name']      state = module.params['state'] +    template = get_template(zapi, module.params['template_name'])      # selectInterfaces doesn't appear to be working but is needed.      content = zapi.get_content(zbx_class_name,                                 'get',                                 {'search': {'name': dname}, +                                'templateids': template['templateid'],                                  #'selectDServices': 'extend',                                  #'selectDChecks': 'extend',                                  #'selectDhosts': 'dhostid',                                 }) + +    #******# +    # GET +    #******#      if state == 'list':          module.exit_json(changed=False, results=content['result'], state="list") +    #******# +    # DELETE +    #******#      if state == 'absent':          if not exists(content):              module.exit_json(changed=False, state="absent") @@ -132,8 +142,9 @@ def main():          content = zapi.get_content(zbx_class_name, 'delete', [content['result'][0][idname]])          module.exit_json(changed=True, results=content['result'], state="absent") + +    # Create and Update      if state == 'present': -        template = get_template(zapi, module.params['template_name'])          params = {'name': dname,                    'key_':  module.params['key'],                    'hostid':  template['templateid'], @@ -144,12 +155,23 @@ def main():          if params['type'] in [2, 5, 7, 11]:              params.pop('interfaceid') +        # Remove any None valued params +        _ = [params.pop(key, None) for key in params.keys() if params[key] is None] + +        #******# +        # CREATE +        #******#          if not exists(content): -            # if we didn't find it, create it              content = zapi.get_content(zbx_class_name, 'create', params) + +            if content.has_key('error'): +                module.exit_json(failed=True, changed=True, results=content['error'], state="present") +              module.exit_json(changed=True, results=content['result'], state='present') -        # already exists, we need to update it -        # let's compare properties + +        ######## +        # UPDATE +        ########          differences = {}          zab_results = content['result'][0]          for key, value in params.items(): @@ -161,8 +183,14 @@ def main():              module.exit_json(changed=False, results=zab_results, state="present")          # We have differences and need to update +        module.exit_json(failed=True, changed=False, results=differences, state="present") +          differences[idname] = zab_results[idname]          content = zapi.get_content(zbx_class_name, 'update', differences) + +        if content.has_key('error'): +            module.exit_json(failed=True, changed=False, results=content['error'], state="present") +          module.exit_json(changed=True, results=content['result'], state="present")      module.exit_json(failed=True, diff --git a/roles/lib_zabbix/library/zbx_itemprototype.py b/roles/lib_zabbix/library/zbx_itemprototype.py index 24f85710d..b93b7729e 100644 --- a/roles/lib_zabbix/library/zbx_itemprototype.py +++ b/roles/lib_zabbix/library/zbx_itemprototype.py @@ -38,13 +38,14 @@ def exists(content, key='result'):      return True -def get_rule_id(zapi, discoveryrule_name): +def get_rule_id(zapi, discoveryrule_name, templateid):      '''get a discoveryrule by name      '''      content = zapi.get_content('discoveryrule',                                 'get',                                 {'search': {'name': discoveryrule_name},                                  'output': 'extend', +                                'templateids': templateid,                                 })      if not content['result']:          return None @@ -53,6 +54,9 @@ def get_rule_id(zapi, discoveryrule_name):  def get_template(zapi, template_name):      '''get a template by name      ''' +    if not template_name: +        return None +      content = zapi.get_content('template',                                 'get',                                 {'search': {'host': template_name}, @@ -134,6 +138,7 @@ def get_app_ids(zapi, application_names):              app_ids.append(content['result'][0]['applicationid'])      return app_ids +# pylint: disable=too-many-branches  def main():      '''      Ansible module for zabbix discovery rules @@ -152,10 +157,10 @@ def main():              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'), +            template_name=dict(default=None, required=True, type='str'),              state=dict(default='present', type='str'),              status=dict(default='enabled', type='str'), -            discoveryrule_name=dict(default=None, type='str'), +            discoveryrule_name=dict(default=None, required=True, type='str'),              applications=dict(default=[], type='list'),          ),          #supports_check_mode=True @@ -169,20 +174,26 @@ def main():      #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'] +    template = get_template(zapi, module.params['template_name'])      # selectInterfaces doesn't appear to be working but is needed.      content = zapi.get_content(zbx_class_name,                                 'get', -                               {'search': {'name': dname}, +                               {'search': {'name': module.params['name']},                                  'selectApplications': 'applicationid',                                  'selectDiscoveryRule': 'itemid', -                                #'selectDhosts': 'dhostid',                                 }) + +    #******# +    # GET +    #******#      if state == 'list':          module.exit_json(changed=False, results=content['result'], state="list") +    #******# +    # DELETE +    #******#      if state == 'absent':          if not exists(content):              module.exit_json(changed=False, state="absent") @@ -190,26 +201,38 @@ def main():          content = zapi.get_content(zbx_class_name, 'delete', [content['result'][0][idname]])          module.exit_json(changed=True, results=content['result'], state="absent") +    # Create and Update      if state == 'present': -        template = get_template(zapi, module.params['template_name']) -        params = {'name': dname, +        params = {'name': module.params['name'],                    'key_':  module.params['key'],                    'hostid':  template['templateid'],                    'interfaceid': module.params['interfaceid'], -                  'ruleid': get_rule_id(zapi, module.params['discoveryrule_name']), +                  'ruleid': get_rule_id(zapi, module.params['discoveryrule_name'], template['templateid']),                    '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') +        # Remove any None valued params +        _ = [params.pop(key, None) for key in params.keys() if params[key] is None] + +        #******# +        # CREATE +        #******#          if not exists(content): -            # if we didn't find it, create it              content = zapi.get_content(zbx_class_name, 'create', params) + +            if content.has_key('error'): +                module.exit_json(failed=True, changed=True, results=content['error'], state="present") +              module.exit_json(changed=True, results=content['result'], state='present') -        # already exists, we need to update it -        # let's compare properties + +        #******# +        # UPDATE +        #******#          differences = {}          zab_results = content['result'][0]          for key, value in params.items(): @@ -218,6 +241,11 @@ def main():                  if value != zab_results['discoveryRule']['itemid']:                      differences[key] = value +            elif key == 'applications': +                app_ids = [app['applicationid'] for app in zab_results[key]] +                if set(app_ids) - set(value): +                    differences[key] = value +              elif zab_results[key] != value and zab_results[key] != str(value):                  differences[key] = value @@ -227,6 +255,10 @@ def main():          # We have differences and need to update          differences[idname] = zab_results[idname]          content = zapi.get_content(zbx_class_name, 'update', differences) + +        if content.has_key('error'): +            module.exit_json(failed=True, changed=False, results=content['error'], state="present") +          module.exit_json(changed=True, results=content['result'], state="present")      module.exit_json(failed=True, | 
