Python 调用 Zabbix API 自动创建主机,关联主机组和模板

1、编写 Python 脚本调用 Zabbix API 自动创建 Host,关联 Host Group 和 Linked template

# coding: utf-8
import requests
import json
import uuid
import sys


class ZabbixApi(object):
    def __init__(self, zabbix_url):
        self.zabbix_url = zabbix_url
        self.headers = {"Content-Type": "application/json-rpc"}
        self.data = {
            "jsonrpc": "2.0",
            "id": str(uuid.uuid1()),
            "auth": None
        }

    def post_action(self, data):
        req = requests.post(self.zabbix_url, data=json.dumps(data), headers=self.headers)
        dict_data = json.loads(req.text)
        return dict_data['result']

    def get_user_token(self, username, password):
        self.data['method'] = "user.login"
        self.data['params'] = {
            "user": username,
            "password": password
        }
        return self.post_action(self.data)

    def zabbix_action(self, method, params, auth):
        self.data['method'] = method
        self.data['params'] = params
        self.data['auth'] = auth
        self.data['id'] = str(uuid.uuid1())
        return self.post_action(self.data)

if __name__ == "__main__":
    if len(sys.argv) == 5:
        host_name = sys.argv[1]
        host_ip = sys.argv[2]
        group_name = sys.argv[3]
        template_name = sys.argv[4]
        url = 'http://192.168.1.254/api_jsonrpc.php'
        zabbix_api = ZabbixApi(url)
        auth = zabbix_api.get_user_token('Admin', 'zabbix')
        # 获取 template_id
        method = "template.get"
        params = {
              "output": "templateid",
              "filter": {
                  "host": [
                      template_name,
                  ]
              }
            }
        template_id = zabbix_api.zabbix_action(method, params, auth)
        # 获取 groupid
        method = "hostgroup.get"
        params = {
            "output": "groupid",
            "filter": {
                "name": [
                    group_name
                ]
            }
        }
        groupid = zabbix_api.zabbix_action(method, params, auth)
        # 添加 host
        method = "host.create"
        params = {
            "host": host_name,
            "interfaces": [
                {
                    "type": 1,
                    "main": 1,
                    "useip": 1,
                    "ip": host_ip,
                    "dns": "",
                    "port": "10050"
                }
            ],
            "groups": groupid,
            "templates": template_id
        }
        result = zabbix_api.zabbix_action(method, params, auth)
        print result
    else:
        print "Usage: " + sys.argv[0] + " host_name host_ip group_name template_name"
        print "Example: " + sys.argv[0] + ' realserver-03 192.168.1.125 "Linux servers" "Template OS Linux"'

2、脚本执行结果

# python zabbix_api.py 
Usage: zabbix_api.py host_name host_ip group_name template_name
Example: zabbix_api.py realserver-03 192.168.1.125 "Linux servers" "Template OS Linux"

# python zabbix_api.py realserver-03 192.168.1.125 "Linux servers" "Template OS Linux"
{u'hostids': [u'10263']}

3、查看 Zabbix Web 端


©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Zabbix简介 Zabbix官方网站Zabbix中文文档 本文系统环境是CentOS7x86_64, Zabbi...
    Zhang21阅读 8,142评论 0 37
  • 1.写在前面 本文主要介绍的是zabbix的编译安装过程,包含它的基础环境LNMP,虽然zabbix官方一般推荐的...
    天之蓝色阅读 2,582评论 0 16
  • Python 面向对象Python从设计之初就已经是一门面向对象的语言,正因为如此,在Python中创建一个类和对...
    顺毛阅读 4,267评论 4 16
  • 佛法说“一切境界都要回到自己身上去找原因”,不是世俗理解的“都是你自己的问题、是你的错”,因为它并不是在讨论眼前境...
    心若了无尘阅读 609评论 2 15
  • 回想一下,你曾经拥有过的最好的学习体验么?是什么样的? 如果问我,我一定会回答《影像中的生死学》,为什么呢?只要你...
    Sandy的小屋阅读 3,581评论 0 5