1 #!/usr/bin/env python
2 #coding:utf-8
3
4 import json,urllib2
5
6 zabbix_url="http://IP地址/zabbix/api_jsonrpc.php" # api_jsonrpc.php zabbix官方提供的API接口
7 zabbix_header={"Content-Type":"application/json"} # 指定网页的内容类型为json
8
9 #登录认证信息
10 def login():
11 zabbix_user=raw_input("Pls enter ur username:")
12 zabbix_pass=raw_input("Ur password:")
13 auth_data=json.dumps(
14 {
15 "jsonrpc":"2.0",
16 "method":"user.login",
17 "params":{
18 "user":zabbix_user,
19 "password":zabbix_pass
20 },
21 "id":0, #request id ,任意指定
22 }
23 )
24 request=urllib2.Request(zabbix_url,auth_data)
25 for key in zabbix_header:
26 request.add_header(key,zabbix_header[key])
27 result=urllib2.urlopen(request)
28 response=json.loads(result.read())
29 result.close()
30
31 if 'result' in response: #成功返回才有result属性
32 auth_code=response['result'] #获取认证token
33 print
34 print "Login successfully!"
35 else:
36 print response['error']['data']
37 return auth_code
38
39 def get_host(auth_code):
40 host_list=[]
41 get_host_data=json.dumps(
42 {
43 "jsonrpc":"2.0",
44 "method":"host.get",
45 "params":{
46 "output":"extend",
47 },
48 "auth":auth_code,
49 "id":1,
50 }
51 )
52 #获取主机列表
53 request=urllib2.Request(zabbix_url,get_host_data)
54 for key in zabbix_header:
55 request.add_header(key,zabbix_header[key])
56 result=urllib2.urlopen(request)
57 response=json.loads(result.read())
58 result.close()
59 print "%-15s%-60s%20s%20s%20s%20s%20s" % ('id','name','status','available','snmp_available','jmx_available','ipmi_available')
60 for r in response['result']:
61 host_list.append(r['hostid'])
62 # print r['hostid'],r['host'],r['name'],r['status'],r['available'],r['snmp_available'],r['jmx_available'],r['ipmi_available']
63 print "%-15s%-60s%20s%20s%20s%20s%20s" % (r['hostid'],r['name'],r['status'],r['available'],r['snmp_available'],r['jmx_available'],r['ipmi_available'])
64 # print r
65 print "Num of hosts:",len(host_list)
66 return 0
67
68 #查询group信息
69 def get_group(auth_code):
70 get_group_data=json.dumps({
71 "jsonrpc":"2.0",
72 "method":"hostgroup.get",
73 "params":{
74 "output":"extend"
75 },
76 "auth":auth_code,
77 "id":2
78 }
79 )
80
81 request=urllib2.Request(zabbix_url,get_group_data)
82 for key in zabbix_header:
83 request.add_header(key,zabbix_header[key])
84 result=urllib2.urlopen(request)
85 response=json.loads(result.read())
86 result.close()
87
88 if 'result' in response:
89 print "%-10s%10s" % ('groupid','name')
90 for i in response['result']:
91 print "%-10s%10s" % (i['groupid'],i['name'])
92 else:
93 print response['error']['data']
94 return 0
95
96 #获取模板信息
97 def get_temp(auth_code):
98 get_temp_data=json.dumps(
99 {
100 "jsonrpc":"2.0",
101 "method":"template.get",
102 "params":{
103 "output":"extend"
104 },
105 "auth":auth_code,
106 "id":3
107 }
108 )
109
110 request=urllib2.Request(zabbix_url,get_temp_data)
111 for key in zabbix_header:
112 request.add_header(key,zabbix_header[key])
113 result=urllib2.urlopen(request)
114 response=json.loads(result.read())
115 result.close()
116
117 temp={}
118 if 'result' in response:
119 for i in response['result']:
120 # print i['host'],i['templateid']
121 temp[i['host']]=i['templateid']
122 print "%-50s%10s" % ('host','templateid')
123 for i,j in temp.items():
124 print "%-50s%10s" % (i,j)
125 else:
126 print response['error']['data']
127 return 0
128
129 #添加主机
130 def add_host(auth_code):
131 host=raw_input("host name:")
132 name=raw_input("visible name:")
133 ip=raw_input("ip:")
134 groupid=raw_input("group id(以,号分隔):")
135 groupid=groupid.split(',')
136 for i,j in enumerate(groupid):
137 groupid[i]={"groupid":j}
138 temp=raw_input("template id(以,号分隔):")
139 temp=temp.split(',')
140 for i,j in enumerate(temp):
141 temp[i]={"templateid":j}
142 create_host=json.dumps(
143 {
144 "jsonrpc":"2.0",
145 "method":"host.create",
146 "params":{
147 "host":host,
148 "name":name,
149 "interfaces":[
150 {
151 "type":1,
152 "main":1,
153 "useip":1,
154 "ip":ip,
155 "dns":"",
156 "port":"10050"
157 }
158 ],
159 "status":1, #创建时停用监控,0代表启用监控
160 "groups":groupid,
161 "templates":temp,
162 "inventory_mode":1
163 },
164 "auth":auth_code,
165 "id":4
166 }
167 )
168
169 request=urllib2.Request(zabbix_url,create_host)
170 for key in zabbix_header:
171 request.add_header(key,zabbix_header[key])
172 result=urllib2.urlopen(request)
173 response=json.loads(result.read())
174 result.close()
175
176 if 'result' in response:
177 print
178 print "Add host successfully!"
179 else:
180 print "failed"
181 print response['error']
182
183 def del_host(auth_code):
184 hostid=raw_input("Enter the host id(以,号分隔):")
185 id_list=hostid.split(',')
186 del_host_data=json.dumps(
187 {
188 "jsonrpc":"2.0",
189 "method":"host.delete",
190 "params":id_list,
191 "auth":auth_code,
192 "id":5
193 }
194 )
195 request=urllib2.Request(zabbix_url,del_host_data)
196 for key in zabbix_header:
197 request.add_header(key,zabbix_header[key])
198 result=urllib2.urlopen(request)
199 response=json.loads(result.read())
200 if 'result' in response:
201 print
202 print "host"+" "+hostid+" "+"already deleted !!"
203
204 while True:
205 print '''
206 Zabbix admin
207 1.login
208 2.host list
209 3.host group
210 4.template
211 5.add host
212 6.delete host
213 7.exit
214 '''
215 choice=raw_input("Pls enter ur choice:")
216 if choice == '1':
217 auth_code=login()
218 elif choice == '2':
219 try:
220 auth_code
221 except NameError:
222 print
223 print "Pls login first !!"
224 continue
225 get_host(auth_code)
226 elif choice == '3':
227 try:
228 auth_code
229 except NameError:
230 print
231 print "Pls login first !!"
232 continue
233 get_group(auth_code)
234 elif choice == '4':
235 try:
236 auth_code
237 except NameError:
238 print
239 print "Pls login first !!"
240 continue
241 get_temp(auth_code)
242 elif choice == '5':
243 try:
244 auth_code
245 except NameError:
246 print
247 print "Pls login first !!"
248 continue
249 add_host(auth_code)
250 elif choice == '6':
251 try:
252 auth_code
253 except NameError:
254 print
255 print "Pls login first !!"
256 continue
257 del_host(auth_code)
258 elif choice == '7':
259 exit(0)
260 else:
261 pass