Python调用Zabbix API接口批量修改(禁用/启用)触发器trigger

#!/bin/env python3
#coding:utf-8
import json
import os
import requests

url = "http://192.168.1.1/zabbix/api_jsonrpc.php" # 此处域名修改为相应的地址

headers = {
    'Content-Type': 'application/json-rpc'
}

def token_get(): #根据账号密码获取token
    data = {
            "jsonrpc": "2.0",
            "method": "user.login",
            "params": {
                "user": "UserName",    # zabbix管理员用户名
                "password": "PASSWORD" # 账户密码
            },
            "auth": None,
            "id": 1
}
    json_data = json.dumps(data)
    req = requests.post(url,data=json_data,headers=headers)
    js_req = req.json()
    return js_req['result']

def hosts_get(token): #获取所有主机信息
    data = {
            "jsonrpc": "2.0",
            "method": "host.get",
            "params": {
                "output":["hostid","name"]
            },
            "auth": token,
            "id": 1
            }
    json_data = json.dumps(data)
    req = requests.post(url,data=json_data,headers=headers)
    js_req = req.json()
    return js_req['result']

def triggers_get(token,hostids):#通过指定的主机IDs获取所有相关Trigger信息
    data = {
            "jsonrpc": "2.0",
            "method": "trigger.get",
            "params": {
                "output": "extend",
                "hostids": hostids,
                "search": {
                    "description": "Disk I/O"  #修改此处更改触发器匹配字符串,我这边针对的是Disk I/O触发器进行处理
                }
            },
            "auth": token,
            "id": 1
            }
    json_data = json.dumps(data)
    req = requests.post(url,data=json_data,headers=headers)
    js_req = req.json()
    return js_req['result']

def trigger_update(token,triggerid): #根据triggerid修改trigger状态:enable/disable
    data = {
           "jsonrpc": "2.0",
           "method": "trigger.update",
           "params": {
               "triggerid": triggerid, #此处只能为单个id
               "status": 1
            },
            "auth": token,
            "id": 1
            }
    json_data = json.dumps(data)
    req = requests.post(url,data=json_data,headers=headers)
    js_req = req.json()
    return js_req['result']

def pending():
    path = 'C:/Users/38997/Desktop/hostlist.txt' #需要处理的主机列表
    f = open(path,'r')
    return f.read()
    f.close()

if __name__=='__main__':
    trigger_count = 0
    trigger_ids = []
    hostids = []
    token = token_get()
    hostlist = hosts_get(token)
    print('读取主机列表...')
    unhosts = pending()
    print("获取主机ID...")
    for hostinfo in hostlist:
        if hostinfo['name'] in unhosts:
            hostids.append(hostinfo['hostid'])
    print("主机IDs:",hostids,"\n","获取所有触发器IDs...")
    triggerlist = triggers_get(token,hostids)
    for i in triggerlist:
        trigger_count += 1
        trigger_ids.append(i['triggerid'])
    print(trigger_ids,'\n共',trigger_count,'条磁盘IO触发器')
    select = input("开始处理 'y' or 'n' ?\n:")
    if select == 'y' or select == '':
        for triggerid in trigger_ids:
            print("开始禁用触发器:",triggerid,"\n结果:",trigger_update(token,triggerid),"\n","-"*30)
    elif select == 'n':
        print("退出!")
        exit()
    else:
        print("请输入:'y' or 'n'!")
        exit()

猜你喜欢

转载自blog.51cto.com/9499607/2481726
今日推荐