lihanchuan125 发表于 2019-1-20 08:58:22

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),格式如下:
http://s1.运维网.com/images/20180320/1521540325166975.png
  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)
      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)
      
      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']['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)
      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']['groupid']
                return response['result']['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)
      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']['templateid']
            return response['result']['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)
      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'])
            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)
      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']['proxyid']
            return response['result']['proxyid']

                  
if __name__ == "__main__":
    test = ZabbixTools()
    workbook = xlrd.open_workbook('test.xlsx')
    for row in xrange(workbook.sheets().nrows):
      hostname=workbook.sheets().cell(row,0).value
      visible=workbook.sheets().cell(row,1).value
      dnsname=workbook.sheets().cell(row,2).value
      hostgroup=workbook.sheets().cell(row,3).value
      hosttemp=workbook.sheets().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、执行成功
# /usr/local/kk-mail/app/engine/bin/python addhost.py
Number Of www.123.com:0
host : www.123.com is created!   id is10186
Number Of www.124.com:0
host : www.124.com is created!   id is10187
Number Of www.125.com:0
host : www.125.com is created!   id is10188


页: [1]
查看完整版本: zabbix调用api接口批量添加主机