lchl0388 发表于 2017-12-31 20:40:26

调用zabbix 分组api

#!/usr/bin/env python  
#
coding:utf8  
import requests
  
import json
  
import os
  
#定义url头部信息
  
headers = {'Content-Type': 'application/json-rpc'}
  #zabbix地址
  
server_ip = '10.37.149.109'
  
#zabbix url
  
url = 'http://%s/zabbix/api_jsonrpc.php' %server_ip
  
#获取token
  
def getToken(username,passwd):
  

  #url = 'http://%s/zabbix/api_jsonrpc.php'%server_ip
  

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

  username = 'admin'
  passwd = 'zabbix'
  data = {
  "jsonrpc": "2.0",
  "method": "user.login",
  "params": {
  "user": username,
  "password": passwd
  },
  "id": 0
  }
  

  request = requests.post(url=url,headers=headers,data=json.dumps(data))
  dict = json.loads(request.text)
  return dict['result']
  
# 获取groupID
  
def getGroupid(token_num):
  group = {}
  data = {"jsonrpc": "2.0",
  "method":"hostgroup.get",
  "params":{
  "output":["groupid","name"]
  },
  "auth":token_num,
  "id": 0
  }
  

  request = requests.post(url=url,headers=headers,data=json.dumps(data))
  dict = json.loads(request.content)
  for i indict['result']:
  groupid = i['groupid']
  name = i['name']
  group = groupid
  return group
  
# 获取group中的hosts信息
  
def getHost(token_num,group):
  dict_group = { }
  for k in group.keys():
  groupid = group
  data = {
  "jsonrpc":"2.0",
  "method":"host.get",
  "params":{
  "output":["hostid","name"],
  "selectInterfaces": [
  "interfaceid",
  "ip"
  ],
  "groupids":groupid
  },
  "auth":token_num,
  "id":1,
  }
  request = requests.post(url=url,headers=headers,data=json.dumps(data))
  hosts = json.loads(request.content)
  hosts1 = hosts['result']
  ip_lists = getProc(hosts1)
  dict_group=ip_lists
  return dict_group
  
# host ip排序
  
def getProc(hosts):
  list = hosts
  ip_lists = [ ]
  if list:
  for i in list:
  host = i['name']
  inter = i['interfaces']
  for j in inter:
  ip = j['ip']
  ip_lists.append(ip)
  ip_lists.sort(lambda x,y: cmp(''.join( [ i.rjust(3, '0') for i in x.split('.')] ), ''.join( [ i.rjust(3, '0') for i in y.split('.')] ) ))
  return ip_lists
  

  
# 进行ip组分类(同网段为一组)
  
def splitIp(ip):
  ip_split = ip.split('.')
  ip_class = ip_split
  return ip_class
  

  
# 进行ip组分类,
  
def getIp(dict_group):
  dicGroupIp = {}
  dicIp = {}
  ip_l = []
  for group,ip_list in dict_group.items():
  for ip in ip_list:
  ip_class = splitIp(ip)
  ip_group ='.'.join(ip_class)
  if ip_group not in dicIp:
  ip_l.append(ip)
  dicIp = ip_l
  else:
  dicIp.append(ip)
  ip_l = [ ]
  

  dicGroupIp = dicIp
  dicIp = { }
  return dicGroupIp
  
# 分别创建group组文件将ip地址写入。
  
def writrIpfile(dicGroupIp):
  for group_class,group_dic in dicGroupIp.items():
  ip_path = os.path.join('/python/zabbix2',group_class )
  with open(ip_path,'w')as fd:
  for ip_class,ip_list in group_dic.items():
  ip_class = '[' + ip_class + ']'
  #with open(ip_path,'a')as fd:
  fd.write(ip_class + '\n')
  for i in ip_list:
  fd.write(i + '\n')
  

  
if __name__ == "__main__":
  #server_ip = 'zmonitor.enn.cn'
  username = 'admin'
  passwd = 'zabbix'
  token_num = getToken(username,passwd)
  group = getGroupid(token_num)
  dict_group = getHost(token_num,group)
  dicIp = getIp(dict_group)
  writrIpfile(dicIp)
页: [1]
查看完整版本: 调用zabbix 分组api