zabbix python add host py

没有该主机组的时候要先添加主机组:./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)
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,193评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,306评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,130评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,110评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,118评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,085评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,007评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,844评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,283评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,508评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,667评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,395评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,985评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,630评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,797评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,653评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,553评论 2 352

推荐阅读更多精彩内容

  • 转载:https://www.cnblogs.com/momoshouhu/p/8053907.html1.安装x...
    SkTj阅读 1,600评论 0 1
  • 一、Python简介和环境搭建以及pip的安装 4课时实验课主要内容 【Python简介】: Python 是一个...
    _小老虎_阅读 5,743评论 0 10
  • 推开门 我们走出去那一刻 我没有说话 我们没有说话 我没有穿袜子 我也没有挽起裤脚 湿漉漉的发梢 我随意的用帽子遮...
    阴阳先生阅读 121评论 0 0
  • 今天看了jieba库
    4e7a0fcb4de6阅读 92评论 0 1
  • 今天下了一整天的雨了 而且一点都没有要停的感觉 站在公司门口透气 玻璃棚顶在微微的漏水 一下滴身上 那股寒冷和风的...
    wousainty阅读 150评论 0 0