diff options
| author | Kenny Woodson <kwoodson@redhat.com> | 2015-07-10 17:40:59 -0400 | 
|---|---|---|
| committer | Kenny Woodson <kwoodson@redhat.com> | 2015-07-10 17:40:59 -0400 | 
| commit | 7de7c841ec64630704366c7e20491f428cd158e3 (patch) | |
| tree | ccdb1fee04e3f604e9335a6b94e3796f2592889d /roles/os_zabbix/library | |
| parent | 042aadae4f815b0a5e8fce324b167bf4d6b57878 (diff) | |
| download | openshift-7de7c841ec64630704366c7e20491f428cd158e3.tar.gz openshift-7de7c841ec64630704366c7e20491f428cd158e3.tar.bz2 openshift-7de7c841ec64630704366c7e20491f428cd158e3.tar.xz openshift-7de7c841ec64630704366c7e20491f428cd158e3.zip  | |
Adding ignore feature for idempotency
Diffstat (limited to 'roles/os_zabbix/library')
| -rwxr-xr-x | roles/os_zabbix/library/zbxapi.py | 26 | 
1 files changed, 19 insertions, 7 deletions
diff --git a/roles/os_zabbix/library/zbxapi.py b/roles/os_zabbix/library/zbxapi.py index b5fa5ee2b..48f294938 100755 --- a/roles/os_zabbix/library/zbxapi.py +++ b/roles/os_zabbix/library/zbxapi.py @@ -103,7 +103,6 @@ class ZabbixAPI(object):          # pylint: disable=no-member          # This method does not exist until the metaprogramming executed -        # This is permanently disabled.          results = self.user.login(user=self.username, password=self.password)          if results[0]['status'] == '200': @@ -251,17 +250,26 @@ def exists(content, key='result'):      return True -def diff_content(from_zabbix, from_user): +def diff_content(from_zabbix, from_user, ignore=None):      ''' Compare passed in object to results returned from zabbix      ''' -    terms = ['search', 'output', 'groups', 'select', 'expand'] +    terms = ['search', 'output', 'groups', 'select', 'expand', 'filter'] +    if ignore: +        terms.extend(ignore)      regex = '(' + '|'.join(terms) + ')'      retval = {}      for key, value in from_user.items():          if re.findall(regex, key):              continue -        if from_zabbix[key] != str(value): +        # special case here for templates.  You query templates and +        # the zabbix api returns parentTemplates.  These will obviously fail. +        # So when its templates compare against parentTemplates. +        if key == 'templates' and from_zabbix.has_key('parentTemplates'): +            if from_zabbix['parentTemplates'] != value: +                retval[key] = value + +        elif from_zabbix[key] != str(value):              retval[key] = str(value)      return retval @@ -280,6 +288,7 @@ def main():              params=dict(),              debug=dict(default=False, type='bool'),              state=dict(default='present', type='str'), +            ignore=dict(default=None, type='list'),          ),          #supports_check_mode=True      ) @@ -306,10 +315,12 @@ def main():      zapi = ZabbixAPI(api_data) +    ignore = module.params['ignore']      zbx_class = module.params.get('zbx_class')      rpc_params = module.params.get('params', {})      state = module.params.get('state') +      # Get the instance we are trying to call      zbx_class_inst = zapi.__getattribute__(zbx_class.lower()) @@ -337,14 +348,14 @@ def main():          module.exit_json(changed=True, results=content['result'], state="absent")      if state == 'present': -	# It's not there, create it! +    # It's not there, create it!          if not exists(content):              zbx_action_method = zapi.__getattribute__(zbx_class.capitalize()).__dict__['create']              _, content = zbx_action_method(zbx_class_inst, rpc_params)              module.exit_json(changed=True, results=content['result'], state='present') -	# It's there and the same, do nothing! -        diff_params = diff_content(content['result'][0], rpc_params) +    # It's there and the same, do nothing! +        diff_params = diff_content(content['result'][0], rpc_params, ignore)          if not diff_params:              module.exit_json(changed=False, results=content['result'], state="present") @@ -368,3 +379,4 @@ def main():  from ansible.module_utils.basic import *  main() +  | 
