فهرست منبع

Updating usergroups to accept users

Kenny Woodson 9 سال پیش
والد
کامیت
4fd18f1d8e
1فایلهای تغییر یافته به همراه42 افزوده شده و 22 حذف شده
  1. 42 22
      roles/lib_zabbix/library/zbx_usergroup.py

+ 42 - 22
roles/lib_zabbix/library/zbx_usergroup.py

@@ -27,6 +27,10 @@ zabbix ansible module for usergroups
 # but different for each zabbix class.
 # pylint: disable=duplicate-code
 
+# Disabling too-many-branches as we need the error checking and the if-statements
+# to determine the proper state
+# pylint: disable=too-many-branches
+
 # pylint: disable=import-error
 from openshift_tools.monitoring.zbxapi import ZabbixAPI, ZabbixConnection
 
@@ -92,26 +96,24 @@ def get_user_status(status):
     return 1
 
 
-#def get_userids(zapi, users):
-#    ''' Get userids from user aliases
-#    '''
-#    if not users:
-#        return None
-#
-#    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 get_userids(zapi, users):
+    ''' Get userids from user aliases
+    '''
+    if not users:
+        return None
+
+    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(
             zbx_server=dict(default='https://localhost/zabbix/api_jsonrpc.php', type='str'),
@@ -123,7 +125,7 @@ def main():
             status=dict(default='enabled', type='str'),
             name=dict(default=None, type='str', required=True),
             rights=dict(default=None, type='list'),
-            #users=dict(default=None, type='list'),
+            users=dict(default=None, type='list'),
             state=dict(default='present', type='str'),
         ),
         #supports_check_mode=True
@@ -144,9 +146,15 @@ def main():
                                {'search': {'name': uname},
                                 'selectUsers': 'userid',
                                })
+    #******#
+    # 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")
@@ -157,6 +165,7 @@ 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':
 
         params = {'name': uname,
@@ -164,26 +173,37 @@ def main():
                   'users_status': get_user_status(module.params['status']),
                   'gui_access': get_gui_access(module.params['gui_access']),
                   'debug_mode': get_debug_mode(module.params['debug_mode']),
-                  #'userids': get_userids(zapi, module.params['users']),
+                  'userids': get_userids(zapi, module.params['users']),
                  }
 
+        # Remove any None valued params
         _ = [params.pop(key, None) for key in params.keys() if params[key] == 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():
             if key == 'rights':
                 differences['rights'] = value
 
-            #elif key == 'userids' and zab_results.has_key('users'):
-                #if zab_results['users'] != value:
-                    #differences['userids'] = 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