python 调用zabbix api接口实现主机的增删改查
python程序调用zabbix系统的api接口实现对zabbix_server端主机的增删改查,使用相关功能时候,需要打开脚本中的相关函数。
函数说明:
zabbixtools() 调用zabbix api
template_get() 获取zabbix server端已经配置的模板信息
hostgroup_get() 获取已经添加的主机组列表信息
host_get() 单个主机信息
host_del() 删除主机
host_create() 新建主机
get_grouphost() 获取某个组下面所有的主机信息
1 #!/usr/bin/env python 2 # -*- coding: utf-8 -*- 3 import json 4 import urllib2 5 import sys 6 class zabbixtools: 7 def __init__(self): 8 self.url = "http://x.x.x.x/zabbix/api_jsonrpc.php" 9 self.header = {"Content-Type": "application/json"} 10 self.authID = self.user_login() 11 def user_login(self): 12 data = json.dumps( 13 { 14 "jsonrpc": "2.0", 15 "method": "user.login", 16 "params": { 17 "user": "Admin", 18 "password": "xxxx" 19 }, 20 "id": 0 21 }) 22 request = urllib2.Request(self.url,data) 23 for key in self.header: 24 request.add_header(key,self.header[key]) 25 try: 26 result = urllib2.urlopen(request) 27 except URLError as e: 28 print "Auth Failed, Please Check Your Name And Password:",e.code 29 else: 30 response = json.loads(result.read()) 31 result.close() 32 authID = response['result'] 33 return authID 34 def get_data(self,data,hostip=""): 35 request = urllib2.Request(self.url,data) 36 for key in self.header: 37 request.add_header(key,self.header[key]) 38 try: 39 result = urllib2.urlopen(request) 40 except URLError as e: 41 if hasattr(e, 'reason'): 42 print 'We failed to reach a server.' 43 print 'Reason: ', e.reason 44 elif hasattr(e, 'code'): 45 print 'The server could not fulfill the request.' 46 print 'Error code: ', e.code 47 return 0 48 else: 49 response = json.loads(result.read()) 50 result.close() 51 return response 52 def host_get(self,hostip): 53 #hostip = raw_input("\033[1;35;40m%s\033[0m" % 'Enter Your Check Host:Host_ip :') 54 data = json.dumps( 55 { 56 "jsonrpc": "2.0", 57 "method": "host.get", 58 "params": { 59 "output":["hostid","name","status","host"], 60 "filter": {"host": [hostip]} 61 }, 62 "auth": self.authID, 63 "id": 1 64 }) 65 res = self.get_data(data)['result'] 66 if (res != 0) and (len(res) != 0): 67 #for host in res: 68 host = res[0] 69 if host['status'] == '1': 70 print "\t","\033[1;31;40m%s\033[0m" % "Host_IP:","\033[1;31;40m%s\033[0m" %host['host'].ljust(15),'\t',"\033[1;31;40m%s\033[0m" % "Host_Name:","\033[1;31;40m%s\033[0m"% host['name'].encode('GBK'),'\t',"\033[1;31;40m%s\033[0m" % u'unmonitor'.encode('GBK') 71 return host['hostid'] 72 elif host['status'] == '0': 73 print "\t","\033[1;32;40m%s\033[0m" % "Host_IP:","\033[1;32;40m%s\033[0m" %host['host'].ljust(15),'\t',"\033[1;32;40m%s\033[0m" % "Host_Name:","\033[1;32;40m%s\033[0m"% host['name'].encode('GBK'),'\t',"\033[1;32;40m%s\033[0m" % u'monitor'.encode('GBK') 74 return host['hostid'] 75 print 76 else: 77 print '\t',"\033[1;31;40m%s\033[0m" % "Get Host Error or cannot find this host,please check !" 78 return 0 79 def get_grouphost(self): 80 groupid = raw_input("\033[1;35;40m%s\033[0m" % 'Enter Your groupid:') 81 data = json.dumps( 82 { 83 "jsonrpc":"2.0", 84 "method":"host.get", 85 "params":{ 86 "output":["hostid","name","status","host"], 87 #"output": "extend", 88 "groupids":groupid, 89 }, 90 "auth": self.authID, 91 "id":1, 92 }) 93 res = self.get_data(data) 94 if 'result' in res.keys(): 95 res = res['result'] 96 if (res !=0) or (len(res) != 0): 97 print "\033[1;32;40m%s\033[0m" % "Number Of Hosts: ","\033[1;31;40m%d\033[0m" % len(res) 98 for host in res: 99 print "Host ID:",host['hostid'],"Visible name:",host['name'],"Host-status:",host['status'],"HostName:",host['host'] 100 else: 101 print "The groupid does not exist, please check!" 102 103 104 105 106 107 def host_del(self): 108 hostip = raw_input("\033[1;35;40m%s\033[0m" % 'Enter Your Check Host:Host_ip :') 109 hostid = self.host_get(hostip) 110 print hostid 111 if hostid == 0: 112 print '\t',"\033[1;31;40m%s\033[0m" % "This host cannot find in zabbix,please check it !" 113 sys.exit() 114 data = json.dumps( 115 { 116 "jsonrpc": "2.0", 117 "method": "host.delete", 118 "params": [hostid], 119 "auth": self.authID, 120 "id": 1 121 }) 122 res = self.get_data(data)['result'] 123 if 'hostids' in res.keys(): 124 print "\t","\033[1;32;40m%s\033[0m" % "Delet Host:%s success !" % hostip 125 else: 126 print "\t","\033[1;31;40m%s\033[0m" % "Delet Host:%s failure !" % hostip 127 def hostgroup_get(self): 128 data = json.dumps( 129 { 130 "jsonrpc": "2.0", 131 "method": "hostgroup.get", 132 "params": { 133 "output": "extend", 134 }, 135 "auth": self.authID, 136 "id": 1, 137 }) 138 res = self.get_data(data) 139 if 'result' in res.keys(): 140 res = res['result'] 141 if (res !=0) or (len(res) != 0): 142 print "\033[1;32;40m%s\033[0m" % "Number Of Group: ","\033[1;31;40m%d\033[0m" % len(res) 143 for host in res: 144 print"\t","HostGroup_id:",host['groupid'],"\t","HostGroup_Name:",host['name'].encode('GBK') 145 else: 146 print "Get HostGroup Error,please check !" 147 def template_get(self): 148 data = json.dumps( 149 { 150 "jsonrpc": "2.0", 151 "method": "template.get", 152 "params": { 153 "output": "extend", 154 }, 155 "auth": self.authID, 156 "id": 1, 157 }) 158 res = self.get_data(data)#['result'] 159 if 'result' in res.keys(): 160 res = res['result'] 161 if (res !=0) or (len(res) != 0): 162 print "\033[1;32;40m%s\033[0m" % "Number Of Template: ","\033[1;31;40m%d\033[0m" % len(res) 163 for host in res: 164 print"\t","Template_id:",host['templateid'],"\t","Template_Name:",host['name'].encode('GBK') 165 print 166 else: 167 print "Get Template Error,please check !" 168 def host_create(self): 169 hostip = raw_input("\033[1;35;40m%s\033[0m" % 'Enter your:Host_ip :') 170 #Visible_name = raw_input("\033[1;35;40m%s\033[0m" % 'Enter your:Visible name :') 171 groupid = raw_input("\033[1;35;40m%s\033[0m" % 'Enter your:Group_id :') 172 templateid = raw_input("\033[1;35;40m%s\033[0m" % 'Enter your:Tempate_id :') 173 g_list=[] 174 t_list=[] 175 for i in groupid.split(','): 176 var = {} 177 var['groupid'] = i 178 g_list.append(var) 179 for i in templateid.split(','): 180 var = {} 181 var['templateid'] = i 182 t_list.append(var) 183 if hostip and groupid and templateid: 184 data = json.dumps( 185 { 186 "jsonrpc": "2.0", 187 "method": "host.create", 188 "params": { 189 "host": hostip, 190 "interfaces": [ 191 { 192 "type": 1, 193 "main": 1, 194 "useip": 1, 195 "ip": hostip, 196 "dns": "", 197 "port": "10050" 198 } 199 ], 200 "groups": g_list, 201 "templates": t_list, 202 }, 203 "auth": self.authID, 204 "id": 1, 205 }) 206 res = self.get_data(data,hostip) 207 if 'result' in res.keys(): 208 res = res['result'] 209 if 'hostids' in res.keys(): 210 print "\033[1;32;40m%s\033[0m" % "Create host success" 211 else: 212 print "\033[1;31;40m%s\033[0m" % "Create host failure: %s" % res['error']['data'] 213 else: 214 print "\033[1;31;40m%s\033[0m" % "Enter Error: ip or groupid or tempateid is NULL,please check it !" 215 def main(): 216 test = zabbixtools() 217 test.template_get() 218 test.hostgroup_get() 219 #test.host_get() 220 #test.host_del() 221 test.host_create() 222 #test.get_grouphost() 223 if __name__ == "__main__": 224 main()