1 #!/usr/bin/env python 2 # -*- coding:utf8 -*- 3 # __author__ = '北方姆Q' 4 5 from pyzabbix import ZabbixAPI 6 from plugins.duia.singleton import Singleton 7 8 9 class ZabbixFactory(Singleton): 10 def __init__(self, url, username='Admin', password='zabbix'): 11 self.obj = ZabbixAPI(url) 12 self.obj.login(username, password) 13 14 def get_hosts(self): 15 """ 16 获取所有的主机信息列表 17 :return: dict in list 18 """ 19 return self.obj.host.get(output='extend') 20 21 def get_host(self, name): 22 """ 23 获取单台的主机信息 24 :param name: 需要获取的显示名 25 :return: dict 26 """ 27 return self.obj.host.get(output='extend', filter={'name': name})[0] 28 29 def get_host_groups(self): 30 """ 31 获取所有的主机组信息列表 32 :return: dict in list 33 """ 34 return self.obj.hostgroup.get(output='extend') 35 36 def get_hosts_by_group(self, group_name): 37 """ 38 获取某个主机组内所有主机信息列表 39 :param group_name: 主机组名 40 :return: dict in list 41 """ 42 return self.obj.host.get(groupids=self.__get_host_group_id(group_name), output="extend") 43 44 def get_templates(self): 45 """ 46 获取所有模版信息 47 :return: dict in list 48 """ 49 return self.obj.template.get(output="extend") 50 51 def get_template(self, template_name): 52 """ 53 根据名称获取单个模版信息 54 :return: dict 55 """ 56 return self.obj.template.get(output='extend', filter={"host": template_name})[0] 57 58 def create_group(self, group_name): 59 """ 60 创建一个新主机组 61 :param group_name: 新主机组名 62 :return: 新组id,str 63 """ 64 ret = self.obj.hostgroup.create(name=group_name) 65 return ret['groupids'][0] 66 67 def create_host(self, name, ip, groups_name, templates_name, proxy_name=None, status=0): 68 """ 69 创建一台新主机 70 :param name: 主机名 71 :param ip: 主机受监控ip 72 :param groups_name: 主机所在组,str、list、tuple、set 73 :param templates_name: 主机关联模版,str、list、tuple、set 74 :param proxy_name: 使用的代理名称,默认不使用 75 :param status: 是否启用,默认开启 76 :return: 新主机id,str 77 """ 78 groups = [{'groupid': self.__get_host_group_id(groups_name)}] if isinstance(groups_name, str) 79 else [{'groupid': self.__get_host_group_id(group_name)} for group_name in groups_name] 80 templates = [{'templateid': self.__get_template_id(templates_name)}] if isinstance(templates_name, str) 81 else [{'templateid': self.__get_template_id(template_name)} for template_name in templates_name] 82 83 if proxy_name is None: 84 ret = self.obj.host.create( 85 host=name, 86 status=status, 87 groups=groups, 88 templates=templates, 89 interfaces=[{ 90 'type': 1, # 监控类型 91 'main': 1, # 监控类型下第几行 92 'useip': 1, # 使用ip还是dns 93 'ip': ip, # ip框 94 'dns': '', # dns框 95 'port': '10050' # port框 96 }] 97 ) 98 else: 99 ret = self.obj.host.create( 100 host=name, 101 status=status, 102 groups=groups, 103 templates=templates, 104 interfaces=[{ 105 'type': 1, 106 'main': 1, 107 'useip': 1, 108 'ip': ip, 109 'dns': '', 110 'port': '10050' 111 }], 112 proxy_hostid=self.__get_proxy_id(proxy_name) 113 ) 114 return ret['hostids'][0] 115 116 def __get_host_group_id(self, group_name): 117 """ 118 获取某主机组id 119 :param group_name: 主机组名 120 :return: int 121 """ 122 return int(self.obj.hostgroup.get(output='groupid', filter={'name': group_name.split(',')})[0].get('groupid')) 123 124 def __get_template_id(self, template_name): 125 """ 126 获取某模版id 127 :param template_name: 模版名 128 :return: int 129 """ 130 return int(self.obj.template.get(output='templateid', filter={'host': template_name.split(',')})[0].get('templateid')) 131 132 def __get_proxy_id(self, proxy_name): 133 """ 134 获取某代理id 135 :param proxy_name: 代理名 136 :return: int 137 """ 138 return int(self.obj.proxy.get(output='proxyid', filter={'host': proxy_name.split(',')})[0].get('proxyid'))