例:excel文件由以下数据组成:主机名-可见名称-ip地址-端口号-主机组-挂载模板名称
Py代码如下:
from openpyxl import load_workbook
import json
import urllib.request
min_line = 2 #定义从第几行读取数据,需修改
max_line = 9 #定义从第几行数据结束,需修改
# 列的数量(即表头)应固定,本例中数据分为6类即6列,不再定义变量,根据列的数量调整GetHostInfo函数中使用到的数值 需修改
HostName_list = [] #定义主机Hostname列表
Visible_HostName_list = [] #定义主机可见名称列表
HostIP_list = [] #定义主机IP列表
HostPort_list = [] #定义主机端口列表
HostGroup_list = [] #定义主机组列表
HostTemplate_list = [] #定义主机模板列表
class ZabbixApi:
def __init__(self): # 初始化信息 修改
self.url = 'http://192.10.10.xx/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 GetHostInfo(self): # 将excel文件中的所有主机信息存放到对应列表中
wb = load_workbook('zabbix_host_add.xlsx')
ws = wb.active
for row in ws.iter_rows(min_row=min_line, max_col=6, max_row=max_line, values_only=True):
HostName_list.append(row[0])
Visible_HostName_list.append(row[1])
HostIP_list.append(row[2])
HostPort_list.append(row[3])
HostGroup_list.append(row[4])
HostTemplate_list.append(row[5])
def CreateHost(self): # 创建添加主机
rows_number = max_line - min_line + 1
for i in range(rows_number):
# 以下ID根据环境实际值修改
if HostGroup_list[i] == 'zabbix_test1':
GroupID = 18
if HostGroup_list[i] == 'zabbix_test2':
GroupID = 19
if HostTemplate_list[i] == 'Template App Zabbix Server':
TemplateID = 10047
if HostTemplate_list[i] == 'Template Module Linux CPU by Zabbix agent':
TemplateID = 10272
# 注意参数"interfaces"中所有必选项都要填,(dns不要忽略)否则会报错'data': 'Incorrect arguments passed to function.'
data = {
"jsonrpc": "2.0",
"method": "host.create",
"params": {
"host": HostName_list[i],
"name": Visible_HostName_list[i],
"groups": {
"name": HostGroup_list[i],
"groupid": GroupID
},
"interfaces": {
"main": 1,
"useip": 1,
"type": 1,
"dns": "",
"port": HostPort_list[i],
"ip": HostIP_list[i]
},
"templates": {
"host": HostTemplate_list[i],
"templateid": TemplateID
}
},
"auth": token,
"id": 1
}
status = self.UrlRequest(data)
if 'result' in status:
print(f"创建主机-{i}: {HostName_list[i]} 成功!")
else:
print(f"创建主机-{i}: {HostName_list[i]} 失败!!!")
if i == rows_number - 1:
return "所有主机已创建完成!"
if __name__ == '__main__':
zapi = ZabbixApi()
response = zapi.UserLogin()
token = response['result']
print(f'身份令牌为"{token}"')
zapi.GetHostInfo()
info = zapi.CreateHost()
print(info)
执行脚本后效果如下: