例:文件格式为 主机名|IP|端口号|主机群组|模板
test1|10.1.1.1|10050|远景|linux
test2|10.1.1.2|10050|远景|linux
test3|10.1.1.3|10050|远景|linux
test4|10.1.1.4|10050|远景|linux
Python脚本:
import json
import urllib.request
HostIP = [] #ip存放列表
HostName = [] #主机名存放列表
HostTemplate = [] #模板名称存放列表
HostGroup = [] #主机组存放列表
class ZabbixApi:
def __init__(self): # 初始化信息
self.url = 'http://192.10.10.188/zabbix/api_jsonrpc.php'
self.user = 'Admin'
self.passwd = 'zabbix'
self.header = {"Content-Type": "application/json-rpc"}
#self.auth = self.UserLogin()
def UserLogin(self): # api登录操作
data = {
"jsonrpc": "2.0",
"method": "user.login",
"params": {
"user": self.user,
"password": self.passwd
},
"id": 0,
}
return self.UrlRequest(data)
def UrlRequest(self,data): ##
request = urllib.request.Request(self.url,json.dumps(data).encode('utf-8'),self.header)
result = urllib.request.urlopen(request)
response = json.loads(result.read().decode('utf-8'))
return response
def HostInFo(self): #将文件主机信息分类加入每个列表中
host_info_path = "qsq.txt"
with open(host_info_path, encoding='utf-8', mode='r') as f:
qsq = f.readlines()
for list in qsq:
host_name = list.strip().split('|')[0]
HostName.append(host_name)
host_ip = list.strip().split('|')[1]
HostIP.append(host_ip)
# host_port = list.strip().split('|')[2]
host_group_name = list.strip().split('|')[3]
HostGroup.append(host_group_name)
template_name = list.strip().split('|')[4]
HostTemplate.append(template_name)
f.close()
def CreateHost(self): # 创建主机
for i in range(len(HostIP)):
ip = HostIP[i]
name = HostName[i]
temp = HostTemplate[i]
if temp == 'linux':
tempid = 10001
group = HostGroup[i]
if group == '远景':
groupid = 19
data = {
"jsonrpc": "2.0",
"method": "host.create",
"params": {
"host": name,
"interfaces": [
{
"type": 1,
"main": 1,
"useip": 1,
"ip": ip,
"dns": "",
"port": "10050"
}
],
"groups": [
{
"groupid": groupid
}
],
"templates": [
{
"templateid": tempid
}
],
},
"auth": auth,
"id": 1
}
self.UrlRequest(data)
if i == len(HostIP) - 1:
return '所有主机已创建完成!'
if __name__ == '__main__':
response = ZabbixApi().UserLogin()
auth = response['result']
print(f'身份令牌为"{auth}"')
ZabbixApi().HostInFo()
info = ZabbixApi().CreateHost()
print(info)
执行结果:
身份令牌为"ecafcb351e266af1bf8dcc77e3a8bc82"
所有主机已创建完成!