zabbix python add host py

简介: 没有该主机组的时候要先添加主机组:./python_zabbix_host.py -A yournamevi python_zabbix_host.py!/usr/bin/pythoncoding:utf-8import jsonimport...

没有该主机组的时候要先添加主机组:./python_zabbix_host.py -A yourname

vi python_zabbix_host.py

!/usr/bin/python

coding:utf-8

import json
import urllib2
from urllib2 import URLError
import sys, argparse
import xlrd
import socket
import os

os.chdir('/usr/local/src')
os.system('yum install -y unzip')
if os.path.exists('setuptools-38.2.4') == False:
os.system(
'wget https://pypi.python.org/packages/69/56/f0f52281b5175e3d9ca8623dadbc3b684e66350ea9e0006736194b265e99/setuptools-38.2.4.zip#md5=e8e05d4f8162c9341e1089c80f742f64 --no-check-certificate')
os.system('unzip setuptools-38.2.4.zip')
os.chdir('/usr/local/src/setuptools-38.2.4')
os.system('python setup.py build')
os.system('python setup.py install')
os.chdir('/usr/local/src')
if os.path.exists('pip-9.0.1') == False:
os.system(
'wget --no-check-certificate https://pypi.python.org/packages/11/b6/abcb525026a4be042b486df43905d6893fb04f05aac21c32c638e939e447/pip-9.0.1.tar.gz#md5=35f01da33009719497f01a4ba69d63c9')
os.system('tar -xzvf pip-9.0.1.tar.gz')
os.chdir('/usr/local/src/pip-9.0.1')
os.system('python setup.py build')
os.system('python setup.py install')
os.system('pip install xlrd')
else:
os.chdir('/usr/local/src/pip-9.0.1')
os.system('pip install xlrd')

defaultencoding = 'utf-8'
if sys.getdefaultencoding() != defaultencoding:
reload(sys)
sys.setdefaultencoding(defaultencoding)

def get_host_ip():
"""
查询本机ip地址
:return: ip
"""
try:
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.connect(('8.8.8.8', 80))
ip = s.getsockname()[0]
finally:
s.close()

return ip

a = get_host_ip()

class zabbix_api:
def init(self):
self.url = 'http://' + a + '/zabbix/api_jsonrpc.php' # 修改URL
self.header = {"Content-Type": "application/json"}

def user_login(self):
    data = json.dumps({
        "jsonrpc": "2.0",
        "method": "user.login",
        "params": {
            "user": "admin",  # web页面登录用户名
            "password": "zabbix"  # web页面登录密码
        },
        "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 "\033[041m 用户认证失败,请检查 !\033[0m", e.code
    else:
        response = json.loads(result.read())
        result.close()
        # print response['result']
        self.authID = response['result']
        return self.authID

def host_get(self, hostName=''):
    data = json.dumps({
        "jsonrpc": "2.0",
        "method": "host.get",
        "params": {
            "output": "extend",
            "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 response
        result.close()
        print "主机数量: \033[31m%s\033[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\t HostName : %s\t Status :\033[32m%s\033[0m \t Available :\033[31m%s\033[0m" % (
                host['hostid'], host['name'], status[host['status']], available[host['available']])
            else:
                print "HostID : %s\t HostName : %s\t Status :\033[32m%s\033[0m \t Available :\033[31m%s\033[0m" % (
                host['hostid'], host['name'], status[host['status']], available[host['available']])
                return host['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:
        # print result.read()
        response = json.loads(result.read())
        result.close()
        # print response()
        for group in response['result']:
            if len(hostgroupName) == 0:
                print "hostgroup:  \033[31m%s\033[0m \tgroupid : %s" % (group['name'], group['groupid'])
            else:
                print "hostgroup:  \033[31m%s\033[0m\tgroupid : %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
        for template in response['result']:
            if len(templateName) == 0:
                print "template : \033[31m%s\033[0m\t  id : %s" % (template['name'], template['templateid'])
            else:
                self.templateID = response['result'][0]['templateid']
                print "Template Name :  \033[31m%s\033[0m " % templateName
                return response['result'][0]['templateid']

def hostgroup_create(self, hostgroupName):

    if self.hostgroup_get(hostgroupName):
        print "hostgroup  \033[42m%s\033[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 "\033[042m 添加主机组:%s\033[0m  hostgroupID : %s" % (hostgroupName, response['result']['groupids'])

def host_create_andy(self, hostName, visibleName, hostip, hostgroupName, templateName):
    if self.host_get(hostip):
        print "\033[041m该主机已经添加!\033[0m"
        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,
            "name": visibleName,
            "interfaces": [
                {
                    "type": 1,  # 1:表示IP;2表示SNMP
                    "main": 1,
                    "useip": 1,
                    "ip": hostip,
                    "dns": "",
                    "port": "10050"  # IP端口10050;SNMP端口161
                }
            ],
            "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)
    except URLError as e:
        print "Error as ", e
    else:
        response = json.loads(result.read())
        print "添加主机 : \033[42m%s\031[0m \tid :\033[31m%s\033[0m" % (hostip, response['result']['hostids'])
        result.close()

def host_create(self, hostip, hostgroupName, templateName):
    if self.host_get(hostip):
        print "\033[041m该主机已经添加!\033[0m"
        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": hostip,
            "interfaces": [
                {
                    "type": 2,
                    "main": 1,
                    "useip": 1,
                    "ip": hostip,
                    "dns": "",
                    "port": "161"
                }
            ],
            "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)
    except URLError as e:
        print "Error as ", e
    else:
        response = json.loads(result.read())
        result.close()
        print "添加主机 : \033[42m%s\031[0m \tid :\033[31m%s\033[0m" % (hostip, response['result']['hostids'])

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)
    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 '----主机现在状态------------'
        print self.host_get(hostip)

def host_delete(self, hostid):
    hostid_list = []
    # print type(hostid)
    for i in hostid.split(','):
        var = {}
        var['hostid'] = self.host_get(i)
        hostid_list.append(var)
    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)
    except Exception, e:
        print  e
    else:

        result.close()
        print "主机 \033[041m %s\033[0m  已经删除 !" % hostid

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=3,
metavar=('192.168.2.1', 'test01,test02', 'Template01,Template02'), help='添加主机,多个主机组或模板使用分号')
parser.add_argument('-d', '--disable', dest='disablehost', nargs=1, metavar=('192.168.2.1'), help='禁用主机')
parser.add_argument('-L', '--allin', dest='allin', nargs='?', default='allin', help='从Excel批量导入主机')
parser.add_argument('-D', '--delete', dest='deletehost', nargs='+', metavar=('192.168.2.1'), help='删除主机,多个主机之间用分号')
parser.add_argument('-v', '--version', action='version', version='%(prog)s 1.0')
if len(sys.argv) == 1:
print parser.print_help()
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])
    if args.disablehost:
        zabbix.host_disable(args.disablehost)
    if args.deletehost:
        zabbix.host_delete(args.deletehost[0])
    if args.allin != 'allin':
        workbook = xlrd.open_workbook('zabbix_host_add.xlsx')  # Excel名,表格列 主机名、显示名、IP、主机组、模板
        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
            hostgroup = workbook.sheets()[0].cell(row, 3).value
            hosttemp = workbook.sheets()[0].cell(row, 4).value

            zabbix.host_create_andy(hostname, visible, hostip, hostgroup, hosttemp)
目录
相关文章
|
9月前
|
JSON 监控 前端开发
python对接API二次开发高级实战案例解析:Zabbix API封装类实现获取认证密钥、所有主机组、所有主机、所有监控项和历史数据
python对接API二次开发高级实战案例解析:Zabbix API封装类实现获取认证密钥、所有主机组、所有主机、所有监控项和历史数据
295 0
|
3月前
|
Python
Python 的其他主题:Python 中的 `__init__.py` 文件有什么作用?
Python 的其他主题:Python 中的 `__init__.py` 文件有什么作用?
|
2月前
|
C++ 计算机视觉 Python
【Py调用C++】使用使用python调用C++生成dll处理图像(OPENCV)
【Py调用C++】使用使用python调用C++生成dll处理图像(OPENCV)
38 0
【Py调用C++】使用使用python调用C++生成dll处理图像(OPENCV)
|
4月前
|
供应链 安全 开发工具
供应链安全情报 | 恶意py包伪装代理SDK进行后门攻击,目标锁定python开发者
2023年11月28号,悬镜供应链安全实验室在Pypi官方仓库(https://pypi.org)监测到两起伪装成http和socks5代理SDK的开源组件投毒事件。python开发者一旦下载安装这些投毒Py包(libproxy、libsocks5),会触发执行Py包中的恶意代码,最终将导致开发者系统被投毒者植入恶意后门。
45 0
|
7月前
|
监控 安全 Ubuntu
用python部署zabbix
用python部署zabbix
60 1
|
8月前
|
Python
Python: __init__.py 作用
Python: __init__.py 作用
|
9月前
|
Python
#PY小贴士# 别弄错了 Python 里的这几个运算符
会出现这样问题的同学,多半是之前用过其他的编程语言,所以习惯性地认为 ^ 是表示次方,& 是表示逻辑与(同时满足条件)、| 是表示逻辑或(满足条件之一)。
|
11月前
|
安全 Linux 数据安全/隐私保护
基于Python的PY#RATIONRAT偷偷收集敏感信息
基于Python的PY#RATIONRAT偷偷收集敏感信息
|
11月前
|
Python
python pyinstaller “单个” py文件打包
python pyinstaller “单个” py文件打包
|
11月前
|
Python
python中利用py帮助命令扩展开发知识面
python中利用py帮助命令扩展开发知识面

热门文章

最新文章

推荐镜像

更多