利用zabbix api添加、删除、禁用主机

  1. python环境配置
    yum -y install python-pip
    安装argparse模块
    pip install -i https://pypi.douban.com/simple/ argparse
  2. 脚本修改
    请修改脚本中zabbix登录地址以及zabbix管理员帐户及密码
    #!/usr/bin/env python
    #-*- coding: utf-8 -*-
    
    import json
    import sys
    import urllib2
    import argparse
    
    from urllib2 import URLError
    
    reload(sys)
    sys.setdefaultencoding('utf-8')
    
    class zabbix_api:
        def __init__(self):
            self.url = 'http://zab.test.com/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": "zabbix"
                                          },
                               "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 "33[041m 认证失败,请检查URL !33[0m",e.code
            except KeyError as e:
                print "33[041m 认证失败,请检查用户名密码 !33[0m",e
            else:
                response = json.loads(result.read())
                result.close()
                #print response['result']
                self.authID = response['result']
                return self.authID
    
        def hostid_get_hostname(self, hostId=''):
            data = json.dumps({
                "jsonrpc": "2.0",
                "method": "host.get",
                "params": {
                    "output": "extend",
                    "filter": {"hostid": hostId}
                },
                "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())
                #print response
                result.close()
    
                if not len(response['result']):
                    print "hostId is not exist"
                    return False
    
                #print "主机数量: 33[31m%s33[0m" % (len(response['result']))
                host_dict=dict()
                for host in response['result']:
                    status = {"0": "OK", "1": "Disabled"}
                    available = {"0": "Unknown", "1": "available", "2": "Unavailable"}
                    #if len(hostId) == 0:
                    #    print "HostID : %s	 HostName : %s	 Status :33[32m%s33[0m 	 Available :33[31m%s33[0m" % (
                    #        host['hostid'], host['name'], status[host['status']], available[host['available']])
                    #else:
                    #    print "HostID : %s	 HostName : %s	 Status :33[32m%s33[0m 	 Available :33[31m%s33[0m" % (
                    #        host['hostid'], host['name'], status[host['status']], available[host['available']])
                    host_dict['name']=host['name']
                    host_dict['status']=status[host['status']]
                    host_dict['available']=available[host['available']]
                    return host_dict
    
        def hostid_get_hostip(self, hostId=''):
            data = json.dumps({
                "jsonrpc": "2.0",
                "method": "hostinterface.get",
                "params": {
                    "output": "extend",
                    "filter": {"hostid": hostId}
                },
                "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())
                # print response
                result.close()
    
                if not len(response['result']):
                    print "33[041m hostid 33[0m is not exist"
                    return False
    
                #print "主机数量: 33[31m%s33[0m" % (len(response['result']))
                for hostip in response['result']:
                    #print hostip
                    #if len(hostip) == 0:
                    #    print "HostID : %s	 HostIp : %s 	 Port : %s " % (hostip['hostid'], hostip['ip'], hostip['port'])
                    #else:
                    #    print "HostID : %s	 HostIp :33[32m%s33[0m 	 Port :33[31m%s33[0m" % (
                    #        hostip['hostid'], hostip['ip'], hostip['port'])
                    return hostip['ip']
    
        def host_get(self,hostName=''):
            data=json.dumps({
                    "jsonrpc": "2.0",
                    "method": "host.get",
                    "params": {
                              "output": "extend",
                              #"filter":{"host":""}
                              "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())
                #print reqponse
                result.close()
    
                if not len(response['result']):
                    print "33[041m %s 33[0m is not exist" % hostName
                    return False
    
                print "主机数量: 33[31m%s33[0m"%(len(response['result']))
                for host in response['result']:
                    status={"0":"OK","1":"Disabled"}
                    available={"0":"Unknown","1":"available","2":"Unavailable"}
                    #print host
                    if len(hostName)==0:
                        print "HostID : %s	 HostName : %s	 HostIp : %s	 Status :%s 	 Available :%s"%(host['hostid'],host['name'],self.hostid_get_hostip(hostId=host['hostid']),status[host['status']],available[host['available']])
                    else:
                        print "HostID : %s	 HostName : %s	 HostIp : %s	 Status :33[32m%s33[0m 	 Available :33[31m%s33[0m"%(host['hostid'],host['name'],self.hostid_get_hostip(hostId=host['hostid']),status[host['status']],available[host['available']])
                        return host['hostid']
    
        def hostip_get(self, hostIp=''):
            data = json.dumps({
                "jsonrpc": "2.0",
                "method": "hostinterface.get",
                "params": {
                    "output": "extend",
                    "filter": {"ip": hostIp}
                },
                "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())
                # print response
                result.close()
    
                if not len(response['result']):
                    print "33[041m hostip 33[0m is not exist"
                    return False
    
                print "主机数量: 33[31m%s33[0m" % (len(response['result']))
                for hostip in response['result']:
                    host = self.hostid_get_hostname(hostip['hostid'])
                    if len(hostip) == 0:
                        print "HostID : %s	 HostName : %s	 HostIp : %s	 Status :33[32m%s33[0m 	 Available :33[31m%s33[0m"%(hostip['hostid'],host['name'],hostip['ip'],host['status'],host['available'])
                    else:
                        print "HostID : %s	 HostName : %s	 HostIp : %s	 Status :33[32m%s33[0m 	 Available :33[31m%s33[0m"%(hostip['hostid'],host['name'],hostip['ip'],host['status'],host['available'])
                        return hostip['hostid']
    
        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:
                # result.read()
                response = json.loads(result.read())
                result.close()
                #print response()
                if not len(response['result']):
                    print "33[041m %s 33[0m is not exist" % hostgroupName
                    return False
    
                for group in response['result']:
                    if  len(hostgroupName)==0:
                        print "hostgroup:  33[31m%s33[0m 	groupid : %s" %(group['name'],group['groupid'])
                    else:
                        print "hostgroup:  33[31m%s33[0m	groupid : %s" %(group['name'],group['groupid'])
                        self.hostgroupID = group['groupid']
                return group['groupid']
    
        def template_get(self,templateName=''):
            data = json.dumps({
                               "jsonrpc":"2.0",
                               "method": "template.get",
                               "params": {
                                          "output": "extend",
                                          "filter": {
                                                     "name":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()
                #print response
                if not len(response['result']):
                    print "33[041m %s 33[0m is not exist" % templateName
                    return False
    
                for template in response['result']:
                    if len(templateName)==0:
                        print "template : %s 	 id : %s" % (template['name'], template['templateid'])
                    else:
                        self.templateID = response['result'][0]['templateid']
                        print "Template Name :%s"%templateName
                        return response['result'][0]['templateid']
    
        def hostgroup_create(self,hostgroupName):
            if self.hostgroup_get(hostgroupName):
                print "hostgroup  33[42m%s33[0m is exist !" % hostgroupName
                sys.exit(1)
    
            data = json.dumps({
                              "jsonrpc": "2.0",
                              "method": "hostgroup.create",
                              "params": {
                              "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()
                print "添加主机组:%s  hostgroupID : %s"%(hostgroupName,self.hostgroup_get(hostgroupName))
    
        def host_create(self, hostIp, hostgroupName, templateName, hostName):
            if self.host_get(hostName) or self.hostip_get(hostIp):
                print "该主机已经添加!"
                sys.exit(1)
    
            group_list=[]
            template_list=[]
            for i in hostgroupName.split(','):
                var = {}
                var['groupid'] = self.hostgroup_get(i)
                group_list.append(var)
            for i in templateName.split(','):
                var={}
                var['templateid']=self.template_get(i)
                template_list.append(var)
    
            data = json.dumps({
                               "jsonrpc":"2.0",
                               "method":"host.create",
                               "params":{
                                         "host": hostName,
                                         "interfaces": [
                                         {
                                         "type": 1,
                                         "main": 1,
                                         "useip": 1,
                                         "ip": hostIp,
                                         "dns": "",
                                         "port": "10050"
                                          }
                                         ],
                                       "groups": group_list,
                                       "templates": template_list,
                                         },
                               "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)
                response = json.loads(result.read())
                result.close()
                print "add host : %s id :%s" % (hostIp, hostName)
            except URLError as e:
                print "Error as ", e
            except KeyError as e:
                print "33[041m 主机添加有误,请检查模板正确性或主机是否添加重复 !33[0m",e
                print response
    
        def host_disable(self,hostip):
            data=json.dumps({
                    "jsonrpc": "2.0",
                    "method": "host.update",
                    "params": {
                    "hostid": self.host_get(hostip),
                    "status": 1
                    },
                    "auth": self.user_login(),
                    "id": 1
                    })
            request = urllib2.Request(self.url,data)
            #opener = urllib2.build_opener(urllib2.HTTPBasicAuthHandler(TerminalPassword()))
            for key in self.header:
                    request.add_header(key, self.header[key])
            try:
                result = urllib2.urlopen(request)
                #result = opener.open(request)
            except URLError as e:
                print "Error as ", e
            else:
                response = json.loads(result.read())
                result.close()
                print '------------主机现在状态------------'
                print self.host_get(hostip)
    
        def host_enable(self,hostip):
            data=json.dumps({
                "jsonrpc": "2.0",
                "method": "host.update",
                "params": {
                "hostid": self.host_get(hostip),
                "status": 0
                },
                "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)
                #result = opener.open(request)
            except URLError as e:
                print "Error as ", e
            else:
                response = json.loads(result.read())
                result.close()
                print '------------主机现在状态------------'
                print self.host_get(hostip)
    
        def host_delete(self,hostNames):
            hostid_list=[]
            for hostName in hostNames.split(','):
                hostid = self.host_get(hostName=hostName)
                if not hostid:
                    print "主机 33[041m %s33[0m  删除失败 !" % hostName
                    sys.exit()
                hostid_list.append(hostid)
    
            data=json.dumps({
                    "jsonrpc": "2.0",
                    "method": "host.delete",
                    "params": hostid_list,
                    "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)
                result.close()
                print "主机 33[041m %s33[0m  已经删除 !" % hostName
            except Exception,e:
                print  e
    
    if __name__ == "__main__":
        zabbix=zabbix_api()
        parser=argparse.ArgumentParser(description='zabbix api ',usage='%(prog)s [options]')
        parser.add_argument('-H','--host',nargs='?',dest='listhost',default='host',help='查询主机')
        parser.add_argument('-G','--group',nargs='?',dest='listgroup',default='group',help='查询主机组')
        parser.add_argument('-T','--template',nargs='?',dest='listtemp',default='template',help='查询模板信息')
        parser.add_argument('-A','--add-group',nargs=1,dest='addgroup',help='添加主机组')
        parser.add_argument('-C','--add-host',dest='addhost',nargs=4,metavar=('192.168.2.1', 'groupname', 'Template01,Template02', 'hostName'),help='添加主机,多个主机组或模板用逗号')
        parser.add_argument('-d','--disable',dest='disablehost',nargs='+',metavar=('sh-aa-01'),help='禁用主机,填主机名')
        parser.add_argument('-e','--enable',dest='enablehost',nargs='+',metavar=('sh-aa-01'),help='开启主机,填主机名')
        parser.add_argument('-D','--delete',dest='deletehost',nargs='+',metavar=('sh-aa-01'),help='删除主机,填主机名')
        parser.add_argument('-v','--version', action='version', version='%(prog)s 1.0')
    
        if len(sys.argv) == 1:
            print parser.print_help()
            #print zabbix.host_get(hostName='bbb')
            #print zabbix.hostip_get(hostIp='127.0.0.1')
            #print zabbix.hostid_get_hostname(hostId='10108')
            #print zabbix.hostid_get_hostid(hostId='10105')
            #print zabbix.hostgroup_get(hostgroupName='Linux servers')
            #print zabbix.hostgroup_get(hostgroupName='aaa')
            #print zabbix.host_delete('hz-aaa-02')
        else:
            args = parser.parse_args()
            if args.listhost != 'host':
                if args.listhost:
                    zabbix.host_get(args.listhost)
                else:
                    zabbix.host_get()
            if args.listgroup != 'group':
                if args.listgroup:
                    zabbix.hostgroup_get(args.listgroup)
                else:
                    zabbix.hostgroup_get()
            if args.listtemp != 'template':
                if args.listtemp:
                    zabbix.template_get(args.listtemp)
                else:
                    zabbix.template_get()
            if args.addgroup:
                zabbix.hostgroup_create(args.addgroup[0])
            if args.addhost:
                zabbix.host_create(args.addhost[0], args.addhost[1], args.addhost[2], args.addhost[3])
            if args.disablehost:
                zabbix.host_disable(args.disablehost)
            if args.enablehost:
                zabbix.host_enable(args.enablehost)
            if args.deletehost:
                zabbix.host_delete(args.deletehost[0])
    zbx_tools.py

     (原文地址:https://www.jianshu.com/p/e087cace8ddf)

  3. 使用方法
    帮助说明
    python zbx_tools.py
    查询主机
    python zbx_tools.py -H
    查询主机组
    python zbx_tools.py -G
    查询模板信息
    python zbx_tools.py -T | grep Linux
    添加主机组
    python zbx_tools.py -A ADDGROUP
    添加主机
    python zbx_tools.py -C  10.10.40.20 "Linux servers" "Template OS Linux" "HostName_Test"
    python zbx_tools.py -C 10.10.40.20 "Linux servers","Discovered hosts" "Template OS Linux","Template App HTTP Service" "HostName_Test"
    禁用主机
    python zbx_tools.py -d "HostName_Test"
    开启主机
    python zbx_tools.py -e "HostName_Test"
    删除主机
    python zbx_tools.py -D "HostName_Test"

原文地址:https://www.cnblogs.com/Mrhuangrui/p/8206194.html