设为首页收藏本站

追梦Linux

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 759|回复: 0

zabbix利用API批量添加Screen

[复制链接]

482

主题

485

帖子

16万

积分

CEO

Rank: 9Rank: 9Rank: 9

积分
168047

最佳新人活跃会员热心会员推广达人宣传达人灌水之王突出贡献优秀版主荣誉管理论坛元老

QQ
发表于 2016-7-31 20:29:14 | 显示全部楼层 |阅读模式
  当公司服务器很多的时候,如果要一个一个的手动添加Screen的话,那估计我早累死了,所以呢,懒人必备神器,使用Python写了个批量Screen添加和更新的脚本。


主要功能用处:
1、如果Screen不存在,可以使用此脚本批量添加Screen
2、如果Screen存在,也可以使用此脚本批量更新Screen
3、此脚本会判断主机是否存在,不存在,会直接退出,然后列出可以使用的主机列表

脚本内容:
  1. #!/usr/bin/python
  2. # coding:utf-8
  3. # 使用说明
  4. # 脚本可以不接受参数,不接受参数则是全部主机更新
  5. # 脚本接受一个或两个参数
  6. # 第一个参数是主机,第二参数是Screen名称
  7. # 省略第二个参数,Screen则与主机名称一样
  8. # ./CUScreen.py
  9. # ./CUScreen.py 主机名称 Screen名称
  10. # ./CUScreen.py Host_Name Screen_Name
  11. # ./CUScreen.py web01
  12. # ./CUScreen.py web01 web01_screen
  13. import urllib2,json,sys
  14. def res(url="", values=""):        
  15.     data = json.dumps(values)
  16.     # 请求API
  17.     res = urllib2.Request(url, data, {"Content-Type": "application/json"})
  18.     resp = urllib2.urlopen(res, data)
  19.     out = json.loads(resp.read())
  20.     try:
  21.         error = out["result"]
  22.     except:
  23.         error = out["error"]["data"]
  24.         return error
  25.     return out["result"]
  26. def auth(url="", username="", password=""):
  27.     values = {
  28.                 "jsonrpc": "2.0",
  29.                 "method": "user.login",
  30.                 "params": {
  31.                         "user": username,
  32.                         "password": password,
  33.                 },
  34.                 "id": 0,
  35.     }
  36.     id = res(url, values)
  37.     return id
  38. def gethosts(auth=""):
  39.     values = {
  40.                 "jsonrpc":"2.0",
  41.                 "method":"host.get",
  42.                 "params":{
  43.                         "output":{"hostid":"name"},
  44.                 },
  45.                 "auth":auth,
  46.                 "id": 1
  47.              }
  48.     out = res(url, values)
  49.     print "Host Count :",len(out)
  50.     for host in out:
  51.         print "Host ID : %s Host Name : %s" % (host['hostid'],host['name'])
  52.     return out
  53. def getgraphs(auth="", hostname=""):
  54.     values = {
  55.                 "jsonrpc":"2.0",
  56.                 "method":"graph.get",
  57.                 "params":{
  58.                         # 过滤某个主机的Graph
  59.                         "filter":{"host":hostname}
  60.                 },
  61.                 "auth":auth,
  62.                 "id": 1
  63.     }
  64.     out = res(url, values)
  65.     # 判断主机是否存在
  66.     if out == []:
  67.         print hostname,"not is exists"
  68.         print "以下是存在的主机:"
  69.         gethosts(auth)
  70.         sys.exit(1)
  71.     # 定义Screenitem的参数,为空列表
  72.     graphs_list = []
  73.     y = 0
  74.     for i in out:
  75.         graphs_list.append(
  76.              {
  77.                 "resourcetype": 0,
  78.                 # 添加graphid
  79.                 "resourceid": i["graphid"],
  80.                 # 定义宽度
  81.                 "width":1000,
  82.                 # 定义高度
  83.                 "height":100,
  84.                 # 是否为动态图形
  85.                 "dynamic":1,
  86.                 # 坐标x轴,向右
  87.                 "x": 0,
  88.                 # 坐标y轴,向下
  89.                 "y": y,
  90.              }
  91.         )
  92.         y += 1
  93.     return graphs_list
  94. # C代表创建 U代表更新
  95. def CUScreen(auth="", screen_name="", graphs_list=""):
  96.     # 判断Screen是否存在
  97.     values1 = {
  98.                 "jsonrpc": "2.0",
  99.                 "method": "screen.get",
  100.                 "params": {
  101.                         "output": "extend",
  102.                         # 过滤Screen
  103.                         "filter":{"name":screen_name},
  104.                 },
  105.                 "auth": auth,
  106.                 "id": 1
  107.     }
  108.     # 定义创建Screen的数据体
  109.     values2 = {
  110.                 "jsonrpc": "2.0",
  111.                 "method": "screen.create",
  112.                 "params": {
  113.                         "name":screen_name,
  114.                         # Screen的宽度
  115.                         "hsize":1,
  116.                         # Screen的长度
  117.                         "vsize":len(graphs_list),
  118.                         # Screen的item信息
  119.                         "screenitems": graphs_list,
  120.                 },
  121.                 "auth": auth,
  122.                 "id": 1
  123.     }
  124.     # 使用values1进行判断
  125.     out = res(url, values1)
  126.     #进行ScreenID判断
  127.     if out == []:
  128.         # ScreenID不存在则创建ScreenID并添加item
  129.         print screen_name,"Screen Name Not is exists, Create Screen Name :",screen_name
  130.         # 使用values2
  131.         out = res(url, values2)
  132.         print screen_name,"Screen Name is Create OK, Screen Item Create OK"
  133.         return out
  134.     else:
  135.         screen_id = out[0]['screenid']
  136.         # 定义更新Screen的数据体
  137.         values3 = {
  138.                     "jsonrpc": "2.0",
  139.                     "method": "screen.update",
  140.                     "params": {
  141.                             # ScreenID
  142.                             "screenid":screen_id,
  143.                             # 计算Screen的行数
  144.                             "vsize":len(graphs_list),
  145.                             # Screen的item
  146.                             "screenitems":graphs_list,
  147.                     },
  148.                     "auth": auth,
  149.                     "id": 1
  150.         }
  151.         # ScreenID存在则更新所有的item
  152.         print screen_name,"Screen Name is exists, Screen ID :",screen_id
  153.         # 使用values3
  154.         out = res(url, values3)
  155.         print screen_name,"Screen Item Update OK"
  156.         return out
  157. if __name__ == "__main__":
  158.     # zabbix的API地址,不同环境的不一样
  159.     url = "http://zabbix.xxx.com/api_jsonrpc.php"
  160.     # zabbix的登陆账号
  161.     username = "xxx"
  162.     # zabbix的登陆密码
  163.     password = "xxx"
  164.     # 默认不输入参数则全部主机都进行更新
  165.     if len(sys.argv) == 1:
  166.         # 获取认证ID
  167.         auth = auth(url,username,password)
  168.         for i in gethosts(auth):
  169.             # 获取GraphID
  170.             graphs_list = getgraphs(auth,i['name'])
  171.             # 使用主机名称(hostname变量)当Screen名称
  172.             CUScreen(auth,i['name'],graphs_list)
  173.     # 如果你输入一个参数,Screen名称与主机名称一样
  174.     if len(sys.argv) == 2:
  175.         # 主机名称,赋值为hostname变量
  176.         hostname = sys.argv[1]
  177.         # 获取认证ID
  178.         auth = auth(url,username,password)
  179.         # 获取GraphID
  180.         graphs_list = getgraphs(auth,hostname)
  181.         # 使用主机名称(hostname变量)当Screen名称
  182.         CUScreen(auth,hostname,graphs_list)
  183.     # 如果你输入二个参数,第一个为主机名称,第二个为Screen名称
  184.     if len(sys.argv) == 3:
  185.         # 主机名称,赋值为hostname变量
  186.         hostname = sys.argv[1]
  187.         # Screen名称,赋值为screen_name变量
  188.         screen_name = sys.argv[2]
  189.         # 获取认证ID
  190.         auth = auth(url,username,password)
  191.         # 获取GraphID
  192.         graphs_list = getgraphs(auth,hostname)
  193.         # 使用screen_name(screen_name变量)来当Screen名称
  194.         CUScreen(auth,screen_name,graphs_list)
复制代码


QQ|小黑屋|手机版|Archiver|追梦Linux ( 粤ICP备14096197号  点击这里给我发消息

GMT+8, 2019-1-23 01:38 , Processed in 0.232723 second(s), 34 queries .

Powered by 追梦Linux! X3.3 Licensed

© 2015-2017 追梦Linux!.

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