示例#1
0
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 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'),
            description=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']
    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")

        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': dname,
                  'key_':  module.params['key'],
                  'hostid':  template['templateid'],
                  'interfaceid': module.params['interfaceid'],
                  'lifetime': module.params['lifetime'],
                  'type': get_type(module.params['ztype']),
                  'description': module.params['description'],
                 }
        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):
            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)

        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")
示例#3
0
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'),
        refresh=dict(default=None, type='int'),
        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'],
            'refresh': module.params['refresh'],
            '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")
示例#4
0
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")
示例#5
0
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 template
    '''

    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',
                          no_log=True),
        zbx_debug=dict(default=False, type='bool'),
        name=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 = 'template'
    idname = 'templateid'
    tname = module.params['name']
    state = module.params['state']
    # get a template, see if it exists
    content = zapi.get_content(
        zbx_class_name, 'get', {
            'search': {
                'host': tname
            },
            'selectParentTemplates': 'templateid',
            'selectGroups': 'groupid',
            'selectApplications': 'applicationid',
            'selectDiscoveries': 'extend',
        })
    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 tname:
            module.exit_json(failed=True,
                             changed=False,
                             results='Must specifiy a template name.',
                             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 = {
            'groups': module.params.get('groups', [{
                'groupid': '1'
            }]),
            'host': tname,
        }

        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)
        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")
示例#7
0
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',
                          no_log=True),
        zbx_debug=dict(default=False, type='bool'),
        name=dict(default=None, type='str'),
        key=dict(default=None, type='str'),
        description=dict(default=None, type='str'),
        template_name=dict(default=None, type='str'),
        interfaceid=dict(default=None, type='int'),
        zabbix_type=dict(default='trapper', type='str'),
        value_type=dict(default='float', type='str'),
        data_type=dict(default='decimal', type='str'),
        delay=dict(default=60, type='int'),
        lifetime=dict(default=30, type='int'),
        state=dict(default='present', type='str'),
        status=dict(default='enabled', type='str'),
        applications=dict(default=[], type='list'),
        discoveryrule_key=dict(default=None, type='str'),
        interval=dict(default=60, type='int'),
        delta=dict(default=0, type='int'),
        multiplier=dict(default=None, type='str'),
        units=dict(default=None, type='str'),
        history=dict(default=None, type='int'),
        trends=dict(default=None, type='int'),
    ),
                           #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': {
                'key_': module.params['key']
            },
            'selectApplications': 'applicationid',
            'selectDiscoveryRule': 'itemid',
            'templated': True,
        })

    #******#
    # 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':

        formula, use_multiplier = get_multiplier(module.params['multiplier'])

        params = {
            'name':
            module.params['name'],
            'key_':
            module.params['key'],
            'hostid':
            template['templateid'],
            'interfaceid':
            module.params['interfaceid'],
            'ruleid':
            get_rule_id(zapi, module.params['discoveryrule_key'],
                        template['templateid']),
            '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(zapi, module.params['applications'],
                        template['templateid']),
            'formula':
            formula,
            'multiplier':
            use_multiplier,
            'description':
            module.params['description'],
            'units':
            module.params['units'],
            'history':
            module.params['history'],
            'trends':
            module.params['trends'],
            'delay':
            module.params['interval'],
            'delta':
            module.params['delta'],
        }

        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=False,
                                 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")
示例#8
0
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")
示例#9
0
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',
                          no_log=True),
        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.fail_json(msg=content['error'])

            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)

        if content.has_key('error'):
            module.fail_json(msg=content['error'])

        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 triggerprototype in zabbix
    '''

    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'),
        expression=dict(default=None, type='str'),
        description=dict(default=None, type='str'),
        priority=dict(default='avg', type='str'),
        url=dict(default=None, type='str'),
        status=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 = 'triggerprototype'
    idname = "triggerid"
    state = module.params['state']
    tname = module.params['name']

    content = zapi.get_content(
        zbx_class_name, 'get', {
            'filter': {
                'description': tname
            },
            'expandExpression': True,
            'selectDependencies': 'triggerid',
        })

    # 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'],
            '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.fail_json(msg=content['error'])

            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)

        if content.has_key('error'):
            module.fail_json(msg=content['error'])

        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")
示例#11
0
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',
                              no_log=True),
            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")
示例#12
0
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',
                          no_log=True),
        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 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'),
            exec_params=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'],
                  'exec_params': module.params['exec_params'],
                  '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")
示例#14
0
def main():
    ''' Ansible module for usergroup
    '''

    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',
    })
    #******#
    # 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")

        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")

    # Create and Update
    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']),
        }

        # 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')

        ########
        # 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 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 hostgroup
    '''

    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', no_log=True),
            zbx_debug=dict(default=False, type='bool'),
            zbx_verify_cert=dict(default=True, type='bool'),
            name=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_verify_cert'],
                                      module.params['zbx_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, hname):
            module.exit_json(changed=False, state="absent")

        content = zapi.get_content(zbx_class_name, 'delete', [get_specific(content, hname)[idname]])
        module.exit_json(changed=True, results=content['result'], state="absent")

    if state == 'present':
        params = {'name': hname}

        if not exists(content, hname):
            # 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 = get_specific(content, hname)
        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',
                          no_log=True),
        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")