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'), passwd=dict(default=None, type='str'), usergroups=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']) password = module.params.get('password', os.environ['ZABBIX_PASSWORD']) zbc = ZabbixConnection(module.params['server'], user, password, module.params['debug']) zapi = ZabbixAPI(zbc) ## 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']), } 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")
def main(): ''' ansible zabbix module for users ''' ##def user(self, name, state='present', params=None): module = AnsibleModule( argument_spec=dict( zbx_server=dict(default='https://localhost/zabbix/api_jsonrpc.php', type='str'), zbx_user=dict(default=os.environ.get('ZABBIX_USER', None), type='str'), zbx_password=dict(default=os.environ.get('ZABBIX_PASSWORD', None), type='str'), zbx_debug=dict(default=False, type='bool'), login=dict(default=None, type='str'), first_name=dict(default=None, type='str'), last_name=dict(default=None, type='str'), user_type=dict(default=None, type='str'), password=dict(default=None, type='str'), update_password=dict(default=False, type='bool'), user_groups=dict(default=[], type='list'), state=dict(default='present', type='str'), ), #supports_check_mode=True ) zapi = ZabbixAPI(ZabbixConnection(module.params['zbx_server'], module.params['zbx_user'], module.params['zbx_password'], module.params['zbx_debug'])) ## before we can create a user media and users with media types we need media zbx_class_name = 'user' idname = "userid" state = module.params['state'] content = zapi.get_content(zbx_class_name, 'get', {'output': 'extend', 'search': {'alias': module.params['login']}, "selectUsrgrps": 'usergrpid', }) if state == 'list': module.exit_json(changed=False, results=content['result'], state="list") if state == 'absent': if not exists(content) or len(content['result']) == 0: 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': module.params['login'], 'passwd': get_passwd(module.params['password']), 'usrgrps': get_usergroups(zapi, module.params['user_groups']), 'name': module.params['first_name'], 'surname': module.params['last_name'], '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) if content.has_key('Error'): module.exit_json(failed=True, changed=False, results=content, state='present') module.exit_json(changed=True, results=content['result'], state='present') # already exists, we need to update it # let's compare properties differences = {} # Update password if not module.params['update_password']: params.pop('passwd', None) zab_results = content['result'][0] for key, value in params.items(): if key == 'usrgrps': # this must be done as a list of ordered dictionaries fails comparison if not all([_ in value for _ in zab_results[key]]): 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")
def main(): ''' ansible zabbix module for zbx_item ''' module = AnsibleModule(argument_spec=dict( zbx_server=dict(default='https://localhost/zabbix/api_jsonrpc.php', type='str'), zbx_user=dict(default=os.environ.get('ZABBIX_USER', None), type='str'), zbx_password=dict(default=os.environ.get('ZABBIX_PASSWORD', None), type='str'), zbx_debug=dict(default=False, type='bool'), name=dict(default=None, type='str'), event_source=dict(default='trigger', choices=['trigger', 'discovery', 'auto', 'internal'], type='str'), action_subject=dict(default="{TRIGGER.NAME}: {TRIGGER.STATUS}", type='str'), action_message=dict( default="{TRIGGER.NAME}: {TRIGGER.STATUS}\r\n" + "Last value: {ITEM.LASTVALUE}\r\n\r\n{TRIGGER.URL}", type='str'), reply_subject=dict(default="{TRIGGER.NAME}: {TRIGGER.STATUS}", type='str'), reply_message=dict( default= "Trigger: {TRIGGER.NAME}\r\nTrigger status: {TRIGGER.STATUS}\r\n" + "Trigger severity: {TRIGGER.SEVERITY}\r\nTrigger URL: {TRIGGER.URL}\r\n\r\n" + "Item values:\r\n\r\n1. {ITEM.NAME1} ({HOST.NAME1}:{ITEM.KEY1}): " + "{ITEM.VALUE1}\r\n2. {ITEM.NAME2} ({HOST.NAME2}:{ITEM.KEY2}): " + "{ITEM.VALUE2}\r\n3. {ITEM.NAME3} ({HOST.NAME3}:{ITEM.KEY3}): " + "{ITEM.VALUE3}", type='str'), send_recovery=dict(default=False, type='bool'), status=dict(default=None, type='str'), escalation_time=dict(default=60, type='int'), conditions_filter=dict(default=None, type='dict'), operations=dict(default=None, type='list'), state=dict(default='present', type='str'), ), #supports_check_mode=True ) zapi = ZabbixAPI( ZabbixConnection(module.params['zbx_server'], module.params['zbx_user'], module.params['zbx_password'], module.params['zbx_debug'])) #Set the instance and the template for the rest of the calls zbx_class_name = 'action' state = module.params['state'] content = zapi.get_content( zbx_class_name, 'get', { 'search': { 'name': module.params['name'] }, 'selectFilter': 'extend', 'selectOperations': 'extend', }) #******# # 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") content = zapi.get_content(zbx_class_name, 'delete', [content['result'][0]['actionid']]) module.exit_json(changed=True, results=content['result'], state="absent") # Create and Update if state == 'present': conditions = get_action_conditions(zapi, module.params['event_source'], module.params['conditions_filter']) operations = get_action_operations(module, zapi, module.params['operations']) params = { 'name': module.params['name'], 'esc_period': module.params['escalation_time'], 'eventsource': get_event_source(module.params['event_source']), 'status': get_status(module.params['status']), 'def_shortdata': module.params['action_subject'], 'def_longdata': module.params['action_message'], 'r_shortdata': module.params['reply_subject'], 'r_longdata': module.params['reply_message'], 'recovery_msg': get_send_recovery(module.params['send_recovery']), 'filter': conditions, 'operations': operations, } # Remove any None valued params _ = [ params.pop(key, None) for key in params.keys() if params[key] is None ] #******# # CREATE #******# if not exists(content): 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') ######## # UPDATE ######## _ = params.pop('hostid', None) differences = {} zab_results = content['result'][0] for key, value in params.items(): if key == 'operations': ops = operation_differences(zab_results[key], value) if ops: differences[key] = ops elif key == 'filter': filters = filter_differences(zab_results[key], value) if filters: differences[key] = filters 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. # action update requires an id, filters, and operations differences['actionid'] = zab_results['actionid'] differences['operations'] = params['operations'] differences['filter'] = params['filter'] 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, changed=False, results='Unknown state passed. %s' % state, state="unknown")
def main(): ''' ansible zabbix module for zbx_item ''' module = AnsibleModule(argument_spec=dict( zbx_server=dict(default='https://localhost/zabbix/api_jsonrpc.php', type='str'), zbx_user=dict(default=os.environ.get('ZABBIX_USER', None), type='str'), zbx_password=dict(default=os.environ.get('ZABBIX_PASSWORD', None), type='str'), zbx_debug=dict(default=False, type='bool'), name=dict(default=None, type='str'), key=dict(default=None, type='str'), template_name=dict(default=None, type='str'), zabbix_type=dict(default='trapper', type='str'), value_type=dict(default='int', type='str'), data_type=dict(default='decimal', type='str'), interval=dict(default=60, type='int'), delta=dict(default=0, type='int'), multiplier=dict(default=None, type='str'), description=dict(default=None, type='str'), units=dict(default=None, type='str'), applications=dict(default=None, type='list'), state=dict(default='present', type='str'), ), #supports_check_mode=True ) zapi = ZabbixAPI( ZabbixConnection(module.params['zbx_server'], module.params['zbx_user'], module.params['zbx_password'], module.params['zbx_debug'])) #Set the instance and the template for the rest of the calls zbx_class_name = 'item' state = module.params['state'] templateid, app_name_ids = get_template_id(zapi, module.params['template_name']) # Fail if a template was not found matching the name if not templateid: module.exit_json( failed=True, changed=False, results='Error: Could find template with name %s for item.' % module.params['template_name'], state="Unkown") content = zapi.get_content( zbx_class_name, 'get', { 'search': { 'key_': module.params['key'] }, 'selectApplications': 'applicationid', 'templateids': templateid, }) #******# # 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") content = zapi.get_content(zbx_class_name, 'delete', [content['result'][0]['itemid']]) module.exit_json(changed=True, results=content['result'], state="absent") # Create and Update if state == 'present': formula, use_multiplier = get_multiplier(module.params['multiplier']) params = { 'name': module.params.get('name', module.params['key']), 'key_': module.params['key'], 'hostid': templateid[0], 'type': get_zabbix_type(module.params['zabbix_type']), 'value_type': get_value_type(module.params['value_type']), 'data_type': get_data_type(module.params['data_type']), 'applications': get_app_ids(module.params['applications'], app_name_ids), 'formula': formula, 'multiplier': use_multiplier, 'description': module.params['description'], 'units': module.params['units'], 'delay': module.params['interval'], 'delta': module.params['delta'], } # Remove any None valued params _ = [ params.pop(key, None) for key in params.keys() if params[key] is None ] #******# # CREATE #******# if not exists(content): 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') ######## # UPDATE ######## _ = params.pop('hostid', None) differences = {} zab_results = content['result'][0] for key, value in params.items(): if key == 'applications': app_ids = [item['applicationid'] for item 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 if not differences: module.exit_json(changed=False, results=zab_results, state="present") # We have differences and need to update differences['itemid'] = zab_results['itemid'] 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, changed=False, results='Unknown state passed. %s' % state, state="unknown")
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': 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")
def main(): ''' Ansible zabbix module for mediatype ''' module = AnsibleModule(argument_spec=dict( zbx_server=dict(default='https://localhost/zabbix/api_jsonrpc.php', type='str'), zbx_user=dict(default=os.environ.get('ZABBIX_USER', None), type='str'), zbx_password=dict(default=os.environ.get('ZABBIX_PASSWORD', None), type='str'), zbx_debug=dict(default=False, type='bool'), 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'), passwd=dict(default=None, type='str'), path=dict(default=None, type='str'), username=dict(default=None, type='str'), status=dict(default='enabled', type='str'), state=dict(default='present', type='str'), ), #supports_check_mode=True ) zapi = ZabbixAPI( ZabbixConnection(module.params['zbx_server'], module.params['zbx_user'], module.params['zbx_password'], module.params['zbx_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': status = 1 if module.params['status']: status = 0 params = { 'description': description, 'type': get_mtype(module.params['mtype']), 'smtp_server': module.params['smtp_server'], 'smtp_helo': module.params['smtp_helo'], 'smtp_email': module.params['smtp_email'], 'passwd': module.params['passwd'], 'exec_path': module.params['path'], 'username': module.params['username'], 'status': status, } # 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) 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') # 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")
def main(): ''' Ansible module for application ''' module = AnsibleModule(argument_spec=dict( zbx_server=dict(default='https://localhost/zabbix/api_jsonrpc.php', type='str'), zbx_user=dict(default=os.environ.get('ZABBIX_USER', None), type='str'), zbx_password=dict(default=os.environ.get('ZABBIX_PASSWORD', None), type='str'), zbx_debug=dict(default=False, type='bool'), name=dict(default=None, type='str'), template_name=dict(default=None, type='list'), state=dict(default='present', type='str'), ), #supports_check_mode=True ) zapi = ZabbixAPI( ZabbixConnection(module.params['zbx_server'], module.params['zbx_user'], module.params['zbx_password'], module.params['zbx_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': { 'name': 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) 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, changed=False, results='Unknown state passed. %s' % state, state="unknown")
def main(): ''' ansible zabbix module for zbx_item ''' module = AnsibleModule( argument_spec=dict( zbx_server=dict(default='https://localhost/zabbix/api_jsonrpc.php', type='str'), zbx_user=dict(default=os.environ.get('ZABBIX_USER', None), type='str'), zbx_password=dict(default=os.environ.get('ZABBIX_PASSWORD', None), type='str'), zbx_debug=dict(default=False, type='bool'), name=dict(default=None, require=True, type='str'), agent=dict(default=None, type='str'), template_name=dict(default=None, type='str'), host_name=dict(default=None, type='str'), interval=dict(default=60, type='int'), application=dict(default=None, type='str'), authentication=dict(default=None, type='str'), http_user=dict(default=None, type='str'), http_password=dict(default=None, type='str'), state=dict(default='present', type='str'), status=dict(default='enabled', type='str'), steps=dict(default='present', type='list'), verify_host=dict(default=False, type='bool'), retries=dict(default=1, type='int'), headers=dict(default=None, type='dict'), query_type=dict(default='filter', choices=['filter', 'search'], type='str'), ), #supports_check_mode=True mutually_exclusive=[['template_name', 'host_name']], ) zapi = ZabbixAPI( ZabbixConnection(module.params['zbx_server'], module.params['zbx_user'], module.params['zbx_password'], module.params['zbx_debug'])) #Set the instance and the template for the rest of the calls zbx_class_name = 'httptest' state = module.params['state'] hostid = None # If a template name was passed then accept the template if module.params['template_name']: hostid = get_template_id(zapi, module.params['template_name']) else: hostid = get_host_id_by_name(zapi, module.params['host_name']) # Fail if a template was not found matching the name if not hostid: module.exit_json( failed=True, changed=False, results='Error: Could find template or host with name [%s].' % (module.params.get('template_name', module.params['host_name'])), state="Unkown") content = zapi.get_content( zbx_class_name, 'get', { module.params['query_type']: { 'name': module.params['name'] }, 'selectSteps': 'extend', }) #******# # 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") content = zapi.get_content(zbx_class_name, 'delete', [content['result'][0]['httptestid']]) module.exit_json(changed=True, results=content['result'], state="absent") # Create and Update if state == 'present': params = { 'name': module.params['name'], 'hostid': hostid, 'agent': module.params['agent'], 'retries': module.params['retries'], 'steps': process_steps(module.params['steps']), 'applicationid': get_app_id(zapi, module.params['application']), 'delay': module.params['interval'], 'verify_host': get_verify_host(module.params['verify_host']), 'status': get_status(module.params['status']), 'headers': module.params['headers'], 'http_user': module.params['http_user'], 'http_password': module.params['http_password'], } # Remove any None valued params _ = [ params.pop(key, None) for key in params.keys() if params[key] is None ] #******# # CREATE #******# if not exists(content): 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') ######## # UPDATE ######## differences = {} zab_results = content['result'][0] for key, value in params.items(): if key == 'steps': if not steps_equal(zab_results[key], value): differences[key] = value elif zab_results[key] != value and zab_results[key] != str(value): differences[key] = value # We have differences and need to update if not differences: module.exit_json(changed=False, results=zab_results, state="present") differences['httptestid'] = zab_results['httptestid'] 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, changed=False, results='Unknown state passed. %s' % state, state="unknown")
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")
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'), zbx_user=dict(default=os.environ.get('ZABBIX_USER', None), type='str'), zbx_password=dict(default=os.environ.get('ZABBIX_PASSWORD', None), type='str'), zbx_debug=dict(default=False, type='bool'), 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=None, required=True, type='str'), state=dict(default='present', type='str'), status=dict(default='enabled', type='str'), discoveryrule_name=dict(default=None, required=True, type='str'), applications=dict(default=[], type='list'), ), #supports_check_mode=True ) zapi = ZabbixAPI( ZabbixConnection(module.params['zbx_server'], module.params['zbx_user'], module.params['zbx_password'], module.params['zbx_debug'])) #Set the instance and the template for the rest of the calls zbx_class_name = 'itemprototype' idname = "itemid" 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': module.params['name'] }, 'selectApplications': 'applicationid', 'selectDiscoveryRule': 'itemid', }) #******# # 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") 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': module.params['name'], 'key_': module.params['key'], 'hostid': template['templateid'], 'interfaceid': module.params['interfaceid'], '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): 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') #******# # UPDATE #******# 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 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 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) 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, changed=False, results='Unknown state passed. %s' % state, state="unknown")
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( zbx_server=dict(default='https://localhost/zabbix/api_jsonrpc.php', type='str'), zbx_user=dict(default=os.environ.get('ZABBIX_USER', None), type='str'), zbx_password=dict(default=os.environ.get('ZABBIX_PASSWORD', None), type='str'), zbx_debug=dict(default=False, type='bool'), expression=dict(default=None, type='str'), name=dict(default=None, type='str'), description=dict(default=None, type='str'), dependencies=dict(default=[], type='list'), priority=dict(default='avg', type='str'), url=dict(default=None, type='str'), status=dict(default=None, type='str'), state=dict(default='present', type='str'), template_name=dict(default=None, type='str'), hostgroup_name=dict(default=None, type='str'), query_type=dict(default='filter', choices=['filter', 'search'], type='str'), ), #supports_check_mode=True ) zapi = ZabbixAPI( ZabbixConnection(module.params['zbx_server'], module.params['zbx_user'], module.params['zbx_password'], module.params['zbx_debug'])) #Set the instance and the template for the rest of the calls zbx_class_name = 'trigger' idname = "triggerid" state = module.params['state'] tname = module.params['name'] templateid = None if module.params['template_name']: templateid, _ = get_template_id(zapi, module.params['template_name']) content = zapi.get_content( zbx_class_name, 'get', { module.params['query_type']: { 'description': tname }, 'expandExpression': True, 'selectDependencies': 'triggerid', 'templateids': templateid, 'group': module.params['hostgroup_name'], }) # 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") 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 = { 'description': tname, 'comments': module.params['description'], 'expression': module.params['expression'], 'dependencies': get_deps(zapi, module.params['dependencies']), 'priority': get_priority(module.params['priority']), 'url': module.params['url'], 'status': get_trigger_status(module.params['status']), } # 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') ######## # UPDATE ######## 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")
def main(): ''' ansible zabbix module for zbx_itservice ''' module = AnsibleModule( argument_spec=dict( zbx_server=dict(default='https://localhost/zabbix/api_jsonrpc.php', type='str'), zbx_user=dict(default=os.environ.get('ZABBIX_USER', None), type='str'), zbx_password=dict(default=os.environ.get('ZABBIX_PASSWORD', None), type='str'), zbx_debug=dict(default=False, type='bool'), name=dict(default=None, type='str'), algorithm=dict(default='do not calculate', choices=['do not calculate', 'at least one', 'all'], type='str'), show_sla=dict(default='calculate', choices=['do not calculate', 'calculate'], type='str'), good_sla=dict(default='99.9', type='float'), sort_order=dict(default=1, type='int'), state=dict(default='present', type='str'), trigger_id=dict(default=None, type='int'), dependencies=dict(default=[], type='list'), dep_type=dict(default='hard', choices=['hard', 'soft'], type='str'), ), #supports_check_mode=True ) zapi = ZabbixAPI(ZabbixConnection(module.params['zbx_server'], module.params['zbx_user'], module.params['zbx_password'], module.params['zbx_debug'])) #Set the instance and the template for the rest of the calls zbx_class_name = 'service' state = module.params['state'] content = zapi.get_content(zbx_class_name, 'get', {'filter': {'name': module.params['name']}, 'selectDependencies': 'extend', }) #******# # 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") content = zapi.get_content(zbx_class_name, 'delete', [content['result'][0]['serviceid']]) module.exit_json(changed=True, results=content['result'], state="absent") # Create and Update if state == 'present': dependencies = get_service_id_by_name(zapi, module.params['dependencies']) params = {'name': module.params['name'], 'algorithm': get_algorithm(module.params['algorithm']), 'showsla': get_show_sla(module.params['show_sla']), 'goodsla': module.params['good_sla'], 'sortorder': module.params['sort_order'], 'triggerid': module.params['trigger_id'] } # Remove any None valued params _ = [params.pop(key, None) for key in params.keys() if params[key] is None] #******# # CREATE #******# if not exists(content): 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") if dependencies: content = add_dependencies(zapi, module.params['name'], dependencies) 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') ######## # UPDATE ######## params['dependencies'] = dependencies differences = {} zab_results = content['result'][0] for key, value in params.items(): if key == 'goodsla': if float(value) != float(zab_results[key]): differences[key] = value elif key == 'dependencies': zab_dep_ids = [item['serviceid'] for item in zab_results[key]] user_dep_ids = [item['serviceid'] for item in dependencies] if set(zab_dep_ids) != set(user_dep_ids): differences[key] = format_dependencies(dependencies) 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") differences['serviceid'] = zab_results['serviceid'] 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, changed=False, results='Unknown state passed. %s' % state, state="unknown")
def main(): ''' Ansible module for zabbix host ''' module = AnsibleModule(argument_spec=dict( zbx_server=dict(default='https://localhost/zabbix/api_jsonrpc.php', type='str'), zbx_user=dict(default=os.environ.get('ZABBIX_USER', None), type='str'), zbx_password=dict(default=os.environ.get('ZABBIX_PASSWORD', None), type='str'), zbx_debug=dict(default=False, type='bool'), name=dict(default=None, type='str'), hostgroup_names=dict(default=[], type='list'), template_names=dict(default=[], type='list'), state=dict(default='present', type='str'), interfaces=dict(default=None, type='list'), ), #supports_check_mode=True ) zapi = ZabbixAPI( ZabbixConnection(module.params['zbx_server'], module.params['zbx_user'], module.params['zbx_password'], module.params['zbx_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 }] hostgroup_names = list(set(module.params['hostgroup_names'])) params = { 'host': hname, 'groups': get_group_ids(zapi, 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 key == "interfaces": if not interfaces_equal(zab_results[key], 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")
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'), zbx_user=dict(default=os.environ.get('ZABBIX_USER', None), type='str'), zbx_password=dict(default=os.environ.get('ZABBIX_PASSWORD', None), type='str'), zbx_debug=dict(default=False, type='bool'), 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'), state=dict(default='present', type='str'), ), #supports_check_mode=True ) zapi = ZabbixAPI(ZabbixConnection(module.params['zbx_server'], module.params['zbx_user'], module.params['zbx_password'], module.params['zbx_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")
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( zbx_server=dict(default='https://localhost/zabbix/api_jsonrpc.php', type='str'), zbx_user=dict(default=os.environ.get('ZABBIX_USER', None), type='str'), zbx_password=dict(default=os.environ.get('ZABBIX_PASSWORD', None), type='str'), zbx_debug=dict(default=False, type='bool'), expression=dict(default=None, type='str'), description=dict(default=None, type='str'), dependencies=dict(default=[], type='list'), priority=dict(default='avg', type='str'), state=dict(default='present', type='str'), ), #supports_check_mode=True ) zapi = ZabbixAPI( ZabbixConnection(module.params['zbx_server'], module.params['zbx_user'], module.params['zbx_password'], module.params['zbx_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', { 'filter': { '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")
def main(): ''' Ansible zabbix module for mediatype ''' module = AnsibleModule( argument_spec=dict( zbx_server=dict(default='https://localhost/zabbix/api_jsonrpc.php', type='str'), zbx_user=dict(default=os.environ.get('ZABBIX_USER', None), type='str'), zbx_password=dict(default=os.environ.get('ZABBIX_PASSWORD', None), type='str'), zbx_debug=dict(default=False, type='bool'), login=dict(default=None, type='str'), active=dict(default=False, type='bool'), medias=dict(default=None, type='list'), mediaid=dict(default=None, type='int'), mediatype=dict(default=None, type='str'), mediatype_desc=dict(default=None, type='str'), #d-d,hh:mm-hh:mm;d-d,hh:mm-hh:mm... period=dict(default=None, type='str'), sendto=dict(default=None, type='str'), severity=dict(default=None, type='str'), state=dict(default='present', type='str'), ), #supports_check_mode=True ) zapi = ZabbixAPI( ZabbixConnection(module.params['zbx_server'], module.params['zbx_user'], module.params['zbx_password'], module.params['zbx_debug'])) #Set the instance and the template for the rest of the calls zbx_class_name = 'user' idname = "mediaid" state = module.params['state'] # User media is fetched through the usermedia.get zbx_user_query = get_zbx_user_query_data(zapi, module.params['login']) content = zapi.get_content( 'usermedia', 'get', {'userids': [uid for user, uid in zbx_user_query.items()]}) ##### # Get ##### if state == 'list': module.exit_json(changed=False, results=content['result'], state="list") ######## # Delete ######## if state == 'absent': if not exists(content) or len(content['result']) == 0: module.exit_json(changed=False, state="absent") if not module.params['login']: module.exit_json(failed=True, changed=False, results='Must specifiy a user login.', state="absent") content = zapi.get_content(zbx_class_name, 'deletemedia', [res[idname] for res in content['result']]) if content.has_key('error'): module.exit_json(changed=False, results=content['error'], state="absent") module.exit_json(changed=True, results=content['result'], state="absent") # Create and Update if state == 'present': active = get_active(module.params['active']) mtypeid = get_mediatype(zapi, module.params['mediatype'], module.params['mediatype_desc']) medias = module.params['medias'] if medias == None: medias = [{ 'mediatypeid': mtypeid, 'sendto': module.params['sendto'], 'active': active, 'severity': int(get_severity(module.params['severity'])), 'period': module.params['period'], }] else: medias = preprocess_medias(zapi, medias) params = { 'users': [zbx_user_query], 'medias': medias, 'output': 'extend', } ######## # Create ######## if not exists(content): if not params['medias']: module.exit_json(changed=False, results=content['result'], state='present') # if we didn't find it, create it content = zapi.get_content(zbx_class_name, 'addmedia', params) 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') # mediaid signifies an update # If user params exists, check to see if they already exist in zabbix # if they exist, then return as no update # elif they do not exist, then take user params only ######## # Update ######## diff = {'medias': [], 'users': {}} _ = [ diff['medias'].append(media) for media in params['medias'] if not find_media(content['result'], media) ] if not diff['medias']: module.exit_json(changed=False, results=content['result'], state="present") for user in params['users']: diff['users']['userid'] = user['userid'] # Medias have no real unique key so therefore we need to make it like the incoming user's request diff['medias'] = medias # We have differences and need to update content = zapi.get_content(zbx_class_name, 'updatemedia', diff) 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, changed=False, results='Unknown state passed. %s' % state, state="unknown")
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'), zbx_user=dict(default=os.environ.get('ZABBIX_USER', None), type='str'), zbx_password=dict(default=os.environ.get('ZABBIX_PASSWORD', None), type='str'), zbx_debug=dict(default=False, type='bool'), debug_mode=dict(default='disabled', type='str'), gui_access=dict(default='default', type='str'), 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'), state=dict(default='present', type='str'), ), #supports_check_mode=True ) zapi = ZabbixAPI( ZabbixConnection(module.params['zbx_server'], module.params['zbx_user'], module.params['zbx_password'], module.params['zbx_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") if not uname: module.exit_json(failed=True, changed=False, results='Need to pass in a user.', state="error") 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']), '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']), } _ = [ params.pop(key, None) for key in params.keys() if params[key] == 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 == '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")
def main(): ''' ansible zabbix module for zbx_graphs ''' module = AnsibleModule(argument_spec=dict( zbx_server=dict(default='https://localhost/zabbix/api_jsonrpc.php', type='str'), zbx_user=dict(default=os.environ.get('ZABBIX_USER', None), type='str'), zbx_password=dict(default=os.environ.get('ZABBIX_PASSWORD', None), type='str'), zbx_debug=dict(default=False, type='bool'), name=dict(default=None, type='str'), height=dict(default=None, type='int'), width=dict(default=None, type='int'), graph_type=dict(default='normal', type='str'), show_legend=dict(default='show', type='str'), state=dict(default='present', type='str'), graph_items=dict(default=None, type='list'), ), #supports_check_mode=True ) zapi = ZabbixAPI( ZabbixConnection(module.params['zbx_server'], module.params['zbx_user'], module.params['zbx_password'], module.params['zbx_debug'])) #Set the instance and the template for the rest of the calls zbx_class_name = 'graph' state = module.params['state'] content = zapi.get_content( zbx_class_name, 'get', { 'filter': { 'name': module.params['name'] }, #'templateids': templateid, 'selectGraphItems': 'extend', }) #******# # 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") content = zapi.get_content(zbx_class_name, 'delete', [content['result'][0]['graphid']]) module.exit_json(changed=True, results=content['result'], state="absent") # Create and Update if state == 'present': params = { 'name': module.params['name'], 'height': module.params['height'], 'width': module.params['width'], 'graphtype': get_graph_type(module.params['graph_type']), 'show_legend': get_show_legend(module.params['show_legend']), 'gitems': get_graph_items(zapi, module.params['graph_items']), } # Remove any None valued params _ = [ params.pop(key, None) for key in params.keys() if params[key] is None ] #******# # CREATE #******# if not exists(content): 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') ######## # UPDATE ######## differences = {} zab_results = content['result'][0] for key, value in params.items(): if key == 'gitems': if not compare_gitems(zab_results[key], 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['graphid'] = zab_results['graphid'] 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, changed=False, results='Unknown state passed. %s' % state, state="unknown")