#!/usr/bin/python # -*- coding: utf-8 -*- # vim: expandtab:tabstop=4:shiftwidth=4 ''' Custom zabbix filters for use in openshift-ansible ''' import pdb class FilterModule(object): ''' Custom zabbix ansible filters ''' @staticmethod def create_data(data, results, key, new_key): '''Take a dict, filter through results and add results['key'] to dict ''' new_list = [app[key] for app in results] data[new_key] = new_list return data @staticmethod def oo_set_zbx_trigger_triggerid(item, trigger_results): '''Set zabbix trigger id from trigger results ''' if isinstance(trigger_results, list): item['triggerid'] = trigger_results[0]['triggerid'] return item item['triggerid'] = trigger_results['triggerids'][0] return item @staticmethod def oo_set_zbx_item_hostid(item, template_results): ''' Set zabbix host id from template results ''' if isinstance(template_results, list): item['hostid'] = template_results[0]['templateid'] return item item['hostid'] = template_results['templateids'][0] return item @staticmethod def oo_pdb(arg): ''' This pops you into a pdb instance where arg is the data passed in from the filter. Ex: "{{ hostvars | oo_pdb }}" ''' pdb.set_trace() return arg @staticmethod def select_by_name(ans_data, data): ''' test ''' for zabbix_item in data: if ans_data['name'] == zabbix_item: data[zabbix_item]['params']['hostid'] = ans_data['templateid'] return data[zabbix_item]['params'] return None @staticmethod def oo_build_zabbix_collect(data, string, value): ''' Build a list of dicts from a list of data matched on string attribute ''' rval = [] for item in data: if item[string] == value: rval.append(item) return rval @staticmethod def oo_build_zabbix_list_dict(values, string): ''' Build a list of dicts with string as key for each value ''' rval = [] for value in values: rval.append({string: value}) return rval @staticmethod def oo_remove_attr_from_list_dict(data, attr): ''' Remove a specific attribute from a dict ''' attrs = [] if isinstance(attr, str): attrs.append(attr) else: attrs = attr for attribute in attrs: for _entry in data: _entry.pop(attribute, None) return data def filters(self): ''' returns a mapping of filters to methods ''' return { "select_by_name": self.select_by_name, "oo_set_zbx_item_hostid": self.oo_set_zbx_item_hostid, "oo_set_zbx_trigger_triggerid": self.oo_set_zbx_trigger_triggerid, "oo_build_zabbix_list_dict": self.oo_build_zabbix_list_dict, "create_data": self.create_data, "oo_build_zabbix_collect": self.oo_build_zabbix_collect, "oo_remove_attr_from_list_dict": self.oo_remove_attr_from_list_dict, }