%PDF- %PDF-
Direktori : /proc/thread-self/root/lib/python2.7/site-packages/salt/states/ |
Current File : //proc/thread-self/root/lib/python2.7/site-packages/salt/states/zabbix_usergroup.py |
# -*- coding: utf-8 -*- ''' Management of Zabbix user groups. :codeauthor: Jiri Kotlin <jiri.kotlin@ultimum.io> ''' # Import Python libs from __future__ import absolute_import, print_function, unicode_literals # Import Salt libs from salt.ext import six def __virtual__(): ''' Only make these states available if Zabbix module is available. ''' return 'zabbix.usergroup_create' in __salt__ def present(name, **kwargs): ''' Creates new user group. NOTE: This function accepts all standard user group properties: keyword argument names differ depending on your zabbix version, see: https://www.zabbix.com/documentation/2.0/manual/appendix/api/usergroup/definitions#user_group .. versionadded:: 2016.3.0 :param name: name of the user group :param _connection_user: Optional - zabbix user (can also be set in opts or pillar, see module's docstring) :param _connection_password: Optional - zabbix password (can also be set in opts or pillar, see module's docstring) :param _connection_url: Optional - url of zabbix frontend (can also be set in opts, pillar, see module's docstring) .. code-block:: yaml make_new_thai_monks_usergroup: zabbix_usergroup.present: - name: 'Thai monks' - gui_access: 1 - debug_mode: 0 - users_status: 0 ''' connection_args = {} if '_connection_user' in kwargs: connection_args['_connection_user'] = kwargs['_connection_user'] if '_connection_password' in kwargs: connection_args['_connection_password'] = kwargs['_connection_password'] if '_connection_url' in kwargs: connection_args['_connection_url'] = kwargs['_connection_url'] ret = {'name': name, 'changes': {}, 'result': False, 'comment': ''} # Comment and change messages comment_usergroup_created = 'User group {0} created.'.format(name) comment_usergroup_updated = 'User group {0} updated.'.format(name) comment_usergroup_notcreated = 'Unable to create user group: {0}. '.format(name) comment_usergroup_exists = 'User group {0} already exists.'.format(name) changes_usergroup_created = {name: {'old': 'User group {0} does not exist.'.format(name), 'new': 'User group {0} created.'.format(name), } } usergroup_exists = __salt__['zabbix.usergroup_exists'](name, **connection_args) if usergroup_exists: usergroup = __salt__['zabbix.usergroup_get'](name, **connection_args)[0] usrgrpid = int(usergroup['usrgrpid']) update_debug_mode = False update_gui_access = False update_users_status = False update_rights = False if 'debug_mode' in kwargs: if int(kwargs['debug_mode']) != int(usergroup['debug_mode']): update_debug_mode = True if 'gui_access' in kwargs: if int(kwargs['gui_access']) != int(usergroup['gui_access']): update_gui_access = True if 'rights' in kwargs: # Older versions of Zabbix do not return the list of rights for the user group, handle this gracefully try: if usergroup['rights']: # Make sure right values are strings so we can compare them with the current user group rights for right in kwargs['rights']: for key in right: right[key] = six.text_type(right[key]) if sorted(kwargs['rights']) != sorted(usergroup['rights']): update_rights = True else: update_rights = True except KeyError: # As we don't know the current permissions, overwrite them as provided in the state. update_rights = True if 'users_status' in kwargs: if int(kwargs['users_status']) != int(usergroup['users_status']): update_users_status = True # Dry run, test=true mode if __opts__['test']: if usergroup_exists: if update_debug_mode or update_gui_access or update_rights or update_users_status: ret['result'] = None ret['comment'] = comment_usergroup_updated else: ret['result'] = True ret['comment'] = comment_usergroup_exists else: ret['result'] = None ret['comment'] = comment_usergroup_created return ret error = [] if usergroup_exists: if update_debug_mode or update_gui_access or update_rights or update_users_status: ret['result'] = True ret['comment'] = comment_usergroup_updated if update_debug_mode: updated_debug = __salt__['zabbix.usergroup_update'](usrgrpid, debug_mode=kwargs['debug_mode'], **connection_args) if 'error' in updated_debug: error.append(updated_debug['error']) else: ret['changes']['debug_mode'] = kwargs['debug_mode'] if update_gui_access: updated_gui = __salt__['zabbix.usergroup_update'](usrgrpid, gui_access=kwargs['gui_access'], **connection_args) if 'error' in updated_gui: error.append(updated_gui['error']) else: ret['changes']['gui_access'] = kwargs['gui_access'] if update_rights: updated_rights = __salt__['zabbix.usergroup_update'](usrgrpid, rights=kwargs['rights'], **connection_args) if 'error' in updated_rights: error.append(updated_rights['error']) else: ret['changes']['rights'] = kwargs['rights'] if update_users_status: updated_status = __salt__['zabbix.usergroup_update'](usrgrpid, users_status=kwargs['users_status'], **connection_args) if 'error' in updated_status: error.append(updated_status['error']) else: ret['changes']['users_status'] = kwargs['users_status'] else: ret['result'] = True ret['comment'] = comment_usergroup_exists else: usergroup_create = __salt__['zabbix.usergroup_create'](name, **kwargs) if 'error' not in usergroup_create: ret['result'] = True ret['comment'] = comment_usergroup_created ret['changes'] = changes_usergroup_created else: ret['result'] = False ret['comment'] = comment_usergroup_notcreated + six.text_type(usergroup_create['error']) # error detected if error: ret['changes'] = {} ret['result'] = False ret['comment'] = six.text_type(error) return ret def absent(name, **kwargs): ''' Ensures that the user group does not exist, eventually delete user group. .. versionadded:: 2016.3.0 :param name: name of the user group :param _connection_user: Optional - zabbix user (can also be set in opts or pillar, see module's docstring) :param _connection_password: Optional - zabbix password (can also be set in opts or pillar, see module's docstring) :param _connection_url: Optional - url of zabbix frontend (can also be set in opts, pillar, see module's docstring) .. code-block:: yaml delete_thai_monks_usrgrp: zabbix_usergroup.absent: - name: 'Thai monks' ''' connection_args = {} if '_connection_user' in kwargs: connection_args['_connection_user'] = kwargs['_connection_user'] if '_connection_password' in kwargs: connection_args['_connection_password'] = kwargs['_connection_password'] if '_connection_url' in kwargs: connection_args['_connection_url'] = kwargs['_connection_url'] ret = {'name': name, 'changes': {}, 'result': False, 'comment': ''} # Comment and change messages comment_usergroup_deleted = 'User group {0} deleted.'.format(name) comment_usergroup_notdeleted = 'Unable to delete user group: {0}. '.format(name) comment_usergroup_notexists = 'User group {0} does not exist.'.format(name) changes_usergroup_deleted = {name: {'old': 'User group {0} exists.'.format(name), 'new': 'User group {0} deleted.'.format(name), } } usergroup_exists = __salt__['zabbix.usergroup_exists'](name, **connection_args) # Dry run, test=true mode if __opts__['test']: if not usergroup_exists: ret['result'] = True ret['comment'] = comment_usergroup_notexists else: ret['result'] = None ret['comment'] = comment_usergroup_deleted return ret usergroup_get = __salt__['zabbix.usergroup_get'](name, **connection_args) if not usergroup_get: ret['result'] = True ret['comment'] = comment_usergroup_notexists else: try: usrgrpid = usergroup_get[0]['usrgrpid'] usergroup_delete = __salt__['zabbix.usergroup_delete'](usrgrpid, **connection_args) except KeyError: usergroup_delete = False if usergroup_delete and 'error' not in usergroup_delete: ret['result'] = True ret['comment'] = comment_usergroup_deleted ret['changes'] = changes_usergroup_deleted else: ret['result'] = False ret['comment'] = comment_usergroup_notdeleted + six.text_type(usergroup_delete['error']) return ret