zabbix调用api接口批量添加主机
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了zabbix调用api接口批量添加主机相关的知识,希望对你有一定的参考价值。
zabbix调用api接口批量添加主机,这里用的是python 2.7(需安装xlrd模块处理表格)。
(1)到官网下载xlrd模块:https://pypi.python.org/pypi/xlrd
(2)解压压缩包:tar xvf xlrd-1.0.0.tar.gz
(3)进入到解压的文件夹运行python setup.py install命令安装
1、整理一个excel表格(test.xlsx),格式如下:
2、addhost.py脚本,添加主机名、显示名称、dns主机名、群组、模板字段(网上大部分是添加IP的,我这里是添加dns主机名的)。
#!/usr/local/kk-mail/app/engine/bin/python #coding:utf-8 import json import urllib2 from urllib2 import URLError import sys import xlrd class ZabbixTools: def __init__(self): self.url = 'http://1.2.3.4/zabbix/api_jsonrpc.php' self.header = {"Content-Type":"application/json"} def user_login(self): data = json.dumps({ "jsonrpc": "2.0", "method": "user.login", "params": { "user": "Admin", "password": "pass2018" }, "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() self.authID = response['result'] return self.authID def host_get(self,hostName): data = json.dumps({ "jsonrpc":"2.0", "method":"host.get", "params":{ "output":["hostid","name"], "filter":{"host":hostName} }, "auth":self.user_login(), "id":1, }) 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 else: response = json.loads(result.read()) result.close() print "Number Of %s: " % hostName, len(response['result']) lens=len(response['result']) if lens > 0: return response['result'][0]['name'] else: return "" def hostgroup_get(self, hostgroupName): data = json.dumps({ "jsonrpc":"2.0", "method":"hostgroup.get", "params":{ "output": "extend", "filter": { "name": [ hostgroupName, ] } }, "auth":self.user_login(), "id":1, }) 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 "Error as ", e else: response = json.loads(result.read()) result.close() lens=len(response['result']) if lens > 0: self.hostgroupID = response['result'][0]['groupid'] return response['result'][0]['groupid'] else: print "no GroupGet result" return "" def template_get(self, templateName): data = json.dumps({ "jsonrpc":"2.0", "method": "template.get", "params": { "output": "extend", "filter": { "host": [ templateName, ] } }, "auth":self.user_login(), "id":1, }) 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 "Error as ", e else: response = json.loads(result.read()) result.close() self.templateID = response['result'][0]['templateid'] return response['result'][0]['templateid'] def host_create(self, hostName,visibleName,dnsName, hostgroupName, templateName1): data = json.dumps({ "jsonrpc":"2.0", "method":"host.create", "params":{ "host": hostName, "name": visibleName, "interfaces": [ { "type": 1, "main": 1, "useip": 0, "ip": "", "dns": dnsName, "port": "10050" } ], "groups": [ { "groupid": self.hostgroup_get(hostgroupName) } ], "templates": [ { "templateid": self.template_get(templateName1) } ], }, "auth": self.user_login(), "id":1 }) 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 "Error as ", e else: response = json.loads(result.read()) result.close() print "host : %s is created! id is %s\n" % (dnsname, response['result']['hostids'][0]) self.hostid = response['result']['hostids'] return response['result']['hostids'] def proxy_get(self, ProxyName): data = json.dumps({ "jsonrpc":"2.0", "method": "proxy.get", "params": { "output": "extend", "selectInterface": "extend", "filter": { "host": [ ProxyName, ] } }, "auth":self.user_login(), "id":1, }) 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 "Error as ", e else: response = json.loads(result.read()) result.close() self.templateID = response['result'][0]['proxyid'] return response['result'][0]['proxyid'] if __name__ == "__main__": test = ZabbixTools() workbook = xlrd.open_workbook('test.xlsx') for row in xrange(workbook.sheets()[0].nrows): hostname=workbook.sheets()[0].cell(row,0).value visible=workbook.sheets()[0].cell(row,1).value dnsname=workbook.sheets()[0].cell(row,2).value hostgroup=workbook.sheets()[0].cell(row,3).value hosttemp=workbook.sheets()[0].cell(row,4).value hostgroup=hostgroup.strip() hostnameGet=test.host_get(hostname) if hostnameGet.strip()=='': test.host_create(hostname,visible,dnsname,hostgroup,hosttemp) else: print "%s have exist! Cannot recreate !\n" % hostnameGet
3、执行成功
[[email protected] ~]# /usr/local/kk-mail/app/engine/bin/python addhost.py Number Of www.123.com: 0 host : www.123.com is created! id is 10186 Number Of www.124.com: 0 host : www.124.com is created! id is 10187 Number Of www.125.com: 0 host : www.125.com is created! id is 10188
以上是关于zabbix调用api接口批量添加主机的主要内容,如果未能解决你的问题,请参考以下文章