Zabbix 调用API 批量添加主机 (读取Excel)

py -2 -m pip install xxx

172.x.x.x Mac 172.x.x.x mac Template OS Mac OS X ""

我只是添加一个主机,一个模板

api官网
https://www.zabbix.com/documentation/3.2/manual/api/reference/host/create

注意返回值是list还是dict


# !/usr/bin/env python
# coding:utf-8
import json
import urllib2
from urllib2 import URLError
import xlrd
#http://blog.mreald.com/178
import sys
class zabbixtools:
    def __init__(self):
        self.url = "http://zb3.2.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"],
                    "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['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.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 template_get(self, templateName):
        data = json.dumps({
            "jsonrpc": "2.0",
            "method": "template.get",
            "params": {
                "output": "extend",
                "filter": {
                    "host": [
                        templateName,
                    ]
                }
            },
            "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['templateid']
        else:
            return ""

    def host_create(self, hostName, visibleName, hostIp, dnsName, proxyName, hostgroupName, templateName1,
                    templateName2):
        data = json.dumps({
            "jsonrpc": "2.0",
            "method": "host.create",
            "params": {
                "host": hostName,
                "name": visibleName,
                # "proxy_hostid": self.proxy_get(proxyName),
                "interfaces": [
                    {
                        "type": 1,
                        "main": 1,
                        "useip": 1,
                        "ip": hostIp,
                        "dns": dnsName,
                        "port": "10050"
                    }
                ],
                "groups": [
                    {
                        "groupid": self.hostgroup_get(hostgroupName)
                    }
                ],
                "templates": [
                    {
                        "templateid": self.template_get(templateName1)
                    }
                ],
            },
            "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('add_zabbix_hosts.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
        hostip = workbook.sheets()[0].cell(row, 2).value
        dnsname = workbook.sheets()[0].cell(row, 3).value
        proxy = workbook.sheets()[0].cell(row, 4).value
        hostgroup = workbook.sheets()[0].cell(row, 5).value
        hosttemp = workbook.sheets()[0].cell(row, 6).value
        hosttemp1 = workbook.sheets()[0].cell(row, 7).value
        hostgroup = hostgroup.strip()
        hostnameGet = test.host_get(hostname)
        if hostnameGet.strip() == '':
            test.host_create(hostname, visible, hostip, dnsname, proxy, hostgroup, hosttemp, hosttemp1)
        else:
            print "%s have exist! Cannot recreate !\n" % hostnameGet

Zabbix 调用API 批量添加主机 (读取Excel)



本文转自 liqius 51CTO博客,原文链接:http://blog.51cto.com/szgb17/2073813,如需转载请自行联系原作者

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值