设为首页 收藏本站
查看: 1218|回复: 0

[经验分享] 通过Zabbix API 添加host

[复制链接]

尚未签到

发表于 2019-1-18 12:05:41 | 显示全部楼层 |阅读模式
  脚本内容:
#!/usr/bin/python
#-*- coding:utf8 -*-
import json,sys,argparse
from zabbix_api import ZabbixAPI
server = "http://172.16.206.128/zabbix"
username = "Admin"
password = "zabbix"
zapi = ZabbixAPI(server=server, path="", log_level=0)
zapi.login(username, password)
def get_args():
    parser = argparse.ArgumentParser()
    parser.add_argument("-H", "--host", help="host name")
    parser.add_argument("-i", "--ip", help="host ip")
    parser.add_argument("-g", "--group", help="group name")
    parser.add_argument("-p", "--proxy", help="proxy host name")
    parser.add_argument("-t", "--templates", help="template name")
    # 解析所传入的参数
    args = parser.parse_args()
    if not args.host:
        args.host = raw_input('host: ')
    if not args.ip:
        args.ip = raw_input('ip: ')
    if not args.templates:
        args.templates = raw_input('templates: ')
    return args
def get_proxy_id(proxy):
    get_proxy_id = zapi.proxy.get(
    {
        "output": "proxyid",
        "selectInterface": "extend",
        "filter": {
             "host": proxy
            }
    }
)
    proxy_id=get_proxy_id[0]['proxyid']
    return proxy_id
def get_group_id(groups):
    group_id = zapi.hostgroup.get(
        {
            "output": "groupid",
            "filter": {
                "name":groups.split(",")
            }
        }
)
    return group_id
def get_templates_id(templates):
    templates_id = zapi.template.get(
    {
        "output": "templateid",
        "filter": {
            "host":templates.split(",")
        }
    }
)
    return templates_id
def create_host_with_proxy(hostname,group_id,templates_id,ip,proxy_id):
    host_create = zapi.host.create(
        {
            "host":hostname,
            "groups":group_id,
            "templates":templates_id,
            "interfaces":[
                {
                    "type":1,
                     "main":1,
                     "useip":1,
                     "ip":ip,
                     "dns":"",
                     "port":"10050"
                }
            ],
            "proxy_hostid":proxy_id,
            "status":0
    }
)
    return "host add success!"
def create_host_without_proxy(hostname,group_id,templates_id,ip):
    host_create = zapi.host.create(
        {
            "host": hostname,
            "groups": group_id,
            "templates": templates_id,
            "interfaces":[
                {
                    "type":1,
                    "main":1,
                    "useip":1,
                    "ip":ip,
                    "dns":"",
                    "port":"10050"
                 }
            ],
            "status":0
    }
)
    return "host add success!"
if __name__ == "__main__":
    args = get_args()
    hostname = args.host
    ip = args.ip
    group_id = get_group_id(args.group)
    templates_id = get_templates_id(args.templates)
    if args.proxy:
        proxy_id = get_proxy_id(args.proxy)
        print create_host_with_proxy(hostname,group_id,templates_id,ip,proxy_id)
    else:
        print create_host_without_proxy(hostname,group_id,templates_id,ip)  

  脚本内容解释:
  要使用本脚本,需要安装zabbix-api模块
  脚本思路:
  通过zabbix API添加host,需要知道以下信息:
  hostname:主机名(不是可见名)
  ip:主机IP
  group_id:host所属组的组id
  templates_id:host关联模板的模板id
  proxy_id:如果是通过proxy添加主机,则需要给出proxy_id,这个是可选项,所以我写了两个函数来区分有proxy和没有proxy的情况
  

  hostname、ip这些可以直接通过命令行传参获取到,但是group_id、templates_id、proxy_id需要通过zabbix API的方法去获取到,比如:group_id需要事先知道group name,才能通过api查询到,脚本中我对于如何获取group_id、templates_id、proxy_id都用函数去实现了,所以在命令行传参时,只需要传递group name、templates name、proxy name就可以获取到对应的id了。
  

  如果不清楚参数是怎么获取的,请查阅argparse模块相关资料
  

  参考资料:https://github.com/CNSRE/Zabbix-PyZabbix/blob/master/zabbix_host_add.py
  

  

  

  

  





运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-664793-1-1.html 上篇帖子: Install Zabbix 3.4 下篇帖子: zabbix 监控参数
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表