前段时间,运维生存时间群里有一位兄弟咨询API操作,由于时间忙,给了一份写好的zabbix维护脚本给他参考,脚本里面包含用户登录或者token、获取主机信息、创建维护模式。有python脚本功力的同学直接看脚本。
zabbix_maintenance.py 执行本脚本,zabbix将此服务器置为维护状态,周期为10分钟。本脚本只需要修改zabbix用户ID、用户名、密码、网址即可
备注:zabbix中的hostname必须与当前主机名一致
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 | #!/usr/bin/env python # -*-coding:utf-8-*- import urllib import urllib2 import json import sys import platform import time def auth ( uid , username , password , api_url ) : “” “ zabbix认证 :param uid: :param username: :param password: :return: “ “” dict_data = { } dict_data [ ‘method’ ] = ‘user.login’ # 方法 dict_data [ ‘id’ ] = uid # 用户id dict_data [ ‘jsonrpc’ ] = “2.0” # api版本 dict_data [ ‘params’ ] = { “user” : username , “password” : password } # 用户账号密码 jdata = json . dumps ( dict_data ) # 格式化json数据 content = post_data ( jdata , api_url ) # post json到接口 return content # 返回信息 def post_data ( jdata , url ) : “” “ POST方法 :param jdata: :param url: :return: “ “” req = urllib2 . Request ( url , jdata , { ‘Content-Type’ : ‘application/json’ } ) response = urllib2 . urlopen ( req ) # content = response.read() content = json . load ( response ) return content def create_maintenance ( name , hostid , active_since , active_till , period , auth_code , api_url ) : “” “ create maintenance :return: “ “” dict_data = { } dict_data [ ‘method’ ] = ‘maintenance.create’ # 方法 dict_data [ ‘id’ ] = uid # 用户id dict_data [ ‘jsonrpc’ ] = “2.0” # api版本 dict_data [ ‘auth’ ] = auth_code # api版本 dict_data [ ‘description’ ] = “UPDATE” + hostid # api版本 # host hostids = [ hostid ] # timeperiods timeperiods = [ { “timeperiod_type” : 0 , “start_time” : 64800 , “period” : period } ] dict_data [ ‘params’ ] = { “name” : name , “active_since” : active_since , “timeperiods” : timeperiods , “active_till” : active_till , “hostids” : hostids } # 用户账号密码 jdata = json . dumps ( dict_data ) # 格式化json数据 content = post_data ( jdata , api_url ) # post json到接口 return content # 返回信息 def get_hostid ( hostname , auth_code , uid , api_url ) : “” “ use hostname get hostid :param hostname: :param auth: :param uid: :return: “ “” dict_data = { } dict_data [ ‘method’ ] = ‘host.getobjects’ # 方法 dict_data [ ‘id’ ] = uid # 用户id dict_data [ ‘jsonrpc’ ] = “2.0” # api版本 dict_data [ ‘params’ ] = { “name” : hostname } # 主机名 dict_data [ ‘auth’ ] = auth_code # auth串 jdata = json . dumps ( dict_data ) # 格式化json数据 content = post_data ( jdata , api_url ) # post json到接口 return content # 返回信息 def logout ( uid , auth_code , api_url ) : “” “ 退出 :param uid: :param auth_code: :return: “ “” dict_data = { } dict_data [ ‘method’ ] = ‘user.logout’ # 方法 dict_data [ ‘id’ ] = uid # 用户id dict_data [ ‘jsonrpc’ ] = “2.0” # api版本 dict_data [ ‘params’ ] = [ ] dict_data [ ‘auth’ ] = auth_code # auth串 jdata = json . dumps ( dict_data ) # 格式化json数据 content = post_data ( jdata , api_url ) # post json到接口 return content # 返回信息 if __name__ == ‘__main__’ : # user info uid = 5 # 用户ID username = ‘zabbix用户名’ password = ‘zabbix密码’ api_url = “http://zabbix网址/zabbix/api_jsonrpc.php” res = auth ( 5 , username , password , api_url ) # 认证 if res [ ‘result’ ] : auth_code = res [ ‘result’ ] # 认证串 hostname = platform . node ( ) # 主机名 res = get_hostid ( hostname , auth_code , uid , api_url ) if res [ ‘result’ ] : period = 600 # 维护时长 active_since = int ( time . time ( ) ) # 开始时间 active_till = int ( time . time ( ) ) + period # 结束时间 hostid = res [ ‘result’ ] [ 0 ] [ ‘hostid’ ] # 主机 res = create_maintenance ( ‘AutoMaintenance_’ + hostname + ‘_’ + str ( active_since ) , hostid , active_since , active_till , period , auth_code , api_url ) # 创建维护 logout ( uid , auth_code , api_url ) # 退出登录 print res else : pass |
备注:以上脚本适用于zabbix2.4及以下版本
文章转载来自:trustauth.cn