注意的地方
1.host_get方法
return host['groups'][0]['groupid']
return host['hostid']
2."selectGroups": "extend"
3.[{'groupid': u'2'}, {'groupid': u'16'}]
逻辑
host_get
host_get_group
hostgroup_get 从名字到groupid
host_update
ip mac(所属新组)
# !/usr/bin/env python
# coding:utf-8
import json
import urllib2
from urllib2 import URLError
import xlrd
import sys
import copy
import os
class zabbixtools:
def __init__(self):
self.url = "http://zb3.com/api_jsonrpc.php"
self.header = {"Content-Type": "application/json"}
self.authID = self.user_login()
def user_login(self):
data = json.dumps(
{
"jsonrpc": "2.0",
"method": "user.login",
"params": {
"user": "user",
"password": "password"
},
"id": 0
})
request = urllib2.Request(self.url,data)
for key in self.header:
request.add_header(key,self.header[key])
try:
result = urllib2.urlopen(request)
except URLError as e:
print "Auth Failed, Please Check Your Name And Password:",e.code
else:
response = json.loads(result.read())
result.close()
authID = response['result']
return authID
def get_data(self,data,hostip=""):
request = urllib2.Request(self.url,data)
for key in self.header:
request.add_header(key,self.header[key])
try:
result = urllib2.urlopen(request)
except URLError as e:
if hasattr(e, 'reason'):
print 'We failed to reach a server.'
print 'Reason: ', e.reason
elif hasattr(e, 'code'):
print 'The server could not fulfill the request.'
print 'Error code: ', e.code
return 0
else:
response = json.loads(result.read())
result.close()
return response
def host_get(self,hostip):
# hostip = raw_input("\033[1;35;40m%s\033[0m" % 'Enter Your Check Host:Host_ip :')
data = json.dumps(
{
"jsonrpc": "2.0",
"method": "host.get",
"params": {
"output": ["hostid", "name", "status", "host","groupids"],
"selectGroups": "extend",
"filter": {"host": [hostip]}
},
"auth": self.authID,
"id": 1
})
res = self.get_data(data)['result']
if (res != 0) and (len(res) != 0):
# for host in res:
print type(res)
host = res[0]
# return host['groups'][0]['groupid']
# return host['hostid']
return host
else:
return ""
def host_get_group(self,hostip):
group_list = []
# hostip = raw_input("\033[1;35;40m%s\033[0m" % 'Enter Your Check Host:Host_ip :')
data = json.dumps(
{
"jsonrpc": "2.0",
"method": "host.get",
"params": {
"output": ["hostid", "name", "status", "host","groupids"],
"selectGroups": "extend",
"filter": {"host": [hostip]}
},
"auth": self.authID,
"id": 1
})
res = self.get_data(data)['result']
if (res != 0) and (len(res) != 0):
print type(res)
groups = res[0]['groups']
for group in groups:
var = {}
var['groupid'] = group['groupid']
group_list.append(var)
# return host['groups'][0]['groupid']
return group_list
else:
return ""
def hostgroup_get(self,hostgroupName):
data = json.dumps(
{
"jsonrpc": "2.0",
"method": "hostgroup.get",
"params": {
"output": "extend",
"filter": {"name": [hostgroupName]}
},
"auth": self.authID,
"id": 1
})
res = self.get_data(data)['result']
if (res != 0) and (len(res) != 0):
# for host in res:
print type(res)
host = res[0]
return host['groupid']
else:
return ""
def host_update(self,hostIp,hostgroupName):
print hostIp,hostgroupName
data = json.dumps({
"jsonrpc": "2.0",
"method": "host.update",
"params": {
# "hostid": '10202',
"hostid": self.host_get(hostIp)['hostid'],
"groups": hostgroupName,
"status": 0,
},
"auth": self.authID,
"id": 1
})
res = self.get_data(data)['result']
if (res != 0) and (len(res) != 0):
# for host in res:
print type(res)
# print res['hostids'][0]
return res['hostids'][0]
else:
return ""
if __name__ == "__main__":
test = zabbixtools()
workbook = xlrd.open_workbook('addhost_to_hostgroup.xlsx')
for row in xrange(workbook.sheets()[0].nrows):
hostIp = workbook.sheets()[0].cell(row, 0).value
hostgroupName = workbook.sheets()[0].cell(row, 1).value
hostgroup_old = test.host_get_group(hostIp)
#获取目前主机的所属组
hostgroup_id = test.hostgroup_get(hostgroupName)
hostgroup_new = [{'groupid': hostgroup_id}]
#判断新增的组是否存在目前主机的所属组
for groupid in hostgroup_new:
if groupid not in hostgroup_old:
hostgroup_old_format = copy.deepcopy(hostgroup_old)
hostgroup_old_format.append(groupid)
print hostgroup_old_format
test.host_update(hostIp,hostgroup_old_format)
本文转自 liqius 51CTO博客,原文链接:http://blog.51cto.com/szgb17/2073955,如需转载请自行联系原作者