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()
posted @ 2016-07-26 11:49  囍。  阅读(5664)  评论(0编辑  收藏  举报