1. 程式人生 > 其它 >zabbix批量修改主機名

zabbix批量修改主機名

目錄

一.說明

通過zabbix開放的api進行批量操作,預設主機名是IP地址,尤其是自動發現的時候批量新增,如果挨個手動改會很累,這裡配置批量加入。

新建檔案ips.txt

主機名 IP
主機名 IP
主機名 IP

二.批量更新主機名

#!/usr/bin/python3
# _*_ coding:utf-8 _*_
import json
import requests
 
#zabbix伺服器的IP地址
zabbix_ip = "127.0.0.1"
#zabbix的使用者名稱
zabbix_user = "Admin"
#zabbix的密碼
zabbix_pass = "123456"
#zabbix api介面地址
url = "http://" + zabbix_ip + ":8000/api_jsonrpc.php"
#zabbix api定義的訪問頭部資訊
post_header = {'Content-Type': 'application/json'}
 
 
 
# 呼叫zabbix api需要身份令牌auth
def get_auth():
    post_data = {
        "jsonrpc": "2.0",
        "method": "user.login",
        "params": {
            "user": zabbix_user,
            "password": zabbix_pass
        },
        "id": "1"
    }
 
    ret = requests.post(url, data=json.dumps(post_data), headers=post_header)
    zabbix_ret = json.loads(ret.text)
    print(zabbix_ret)
    if 'result' not in zabbix_ret:
        print('login error')
    else:
        auth = zabbix_ret.get('result')
        return auth
 
 
# 以IP資訊獲取主機id
def get_hostid():
    hostid_get = {
        "jsonrpc": "2.0",
        "method": "host.get",
        "params": {
            "output": "extend",
            "filter": {
                "host": [
                    host_ip
                ]
            }
        },
        "auth": Token,
        "id": 2,
    }
 
    res2 = requests.post(url, data=json.dumps(hostid_get), headers=post_header)
    res3 = res2.json()
    #print(res3)
    res4 = res3['result']
    try:
        host_id = res4[0]['hostid']
        return host_id
    except:
        print("zabbix中不存在,跳過")
        return "不行"
 
# 以主機ID來修改主機名
def update_hostname():
    hostname_update = {
        "jsonrpc": "2.0",
        "method": "host.update",
        "params": {
            "hostid": host_id,
            "name": host_name
        },
        "auth": Token,
        "id": 3
    }
 
    res10 = requests.post(url, data=json.dumps(hostname_update), headers=post_header)
    res11 = res10.json()
    #print(res11)
 
if __name__ == '__main__':
    '''
    ips.txt裡的檔案內容:
    主機名1 ip1
    主機名2 ip2
    主機名3 ip3
    '''
    with open("ips.txt", "r", encoding="utf8") as f:
        for line in f:
            line = line.split(" ")
            host_name = line[0]
            host_ip = line[1].strip()
            #print(host_name)
            #print(host_ip)
 
            Token = get_auth()
            #print(Token)
            host_id = get_hostid()
            if host_id == "不行":
                continue
            #print(host_id)
            update_hostname()
            print(host_name,host_ip,"已新增完成")
本文版權歸作者所有,歡迎轉載,請務必新增原文連結。