68 lines
1.9 KiB
Python
Executable File
68 lines
1.9 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
import requests
|
|
import json
|
|
import time
|
|
|
|
# === CONFIGURATION ===
|
|
ZABBIX_URL = "http://10.0.0.101:8887/api_jsonrpc.php"
|
|
ZABBIX_TOKEN = "c785634354e760a6843055ba4581bc7b6cd6eb2ec75f7c2a79f251c1719933f7"
|
|
GROUP_ID = "19"
|
|
BATCH_SIZE = 100
|
|
HOST_PATTERN = "dummy-host-"
|
|
|
|
HEADERS = {
|
|
"Content-Type": "application/json-rpc",
|
|
"Authorization": f"Bearer {ZABBIX_TOKEN}"
|
|
}
|
|
|
|
def zbx_request(method, params):
|
|
payload = {
|
|
"jsonrpc": "2.0",
|
|
"method": method,
|
|
"params": params,
|
|
"id": int(time.time())
|
|
}
|
|
r = requests.post(ZABBIX_URL, headers=HEADERS, data=json.dumps(payload))
|
|
r.raise_for_status()
|
|
resp = r.json()
|
|
if "error" in resp:
|
|
raise Exception(f"API error: {resp['error']}")
|
|
return resp
|
|
|
|
def cleanup_hosts():
|
|
# Get all hosts in the group
|
|
resp = zbx_request("host.get", {
|
|
"groupids": [GROUP_ID],
|
|
"output": ["hostid", "host"]
|
|
})
|
|
|
|
# Filter hosts that contain the dummy pattern
|
|
hosts = [h for h in resp.get("result", []) if HOST_PATTERN in h["host"]]
|
|
|
|
if not hosts:
|
|
print("No dummy hosts found")
|
|
return
|
|
|
|
print(f"Deleting {len(hosts)} hosts")
|
|
|
|
# Delete in batches
|
|
host_ids = [h["hostid"] for h in hosts]
|
|
total_deleted = 0
|
|
|
|
for i in range(0, len(host_ids), BATCH_SIZE):
|
|
batch = host_ids[i:i + BATCH_SIZE]
|
|
try:
|
|
resp = zbx_request("host.delete", batch)
|
|
deleted = len(resp.get("result", {}).get("hostids", []))
|
|
total_deleted += deleted
|
|
print(f"Deleted batch {i//BATCH_SIZE + 1}: {deleted} hosts")
|
|
except Exception as e:
|
|
print(f"Error in batch {i//BATCH_SIZE + 1}: {e}")
|
|
|
|
if i + BATCH_SIZE < len(host_ids):
|
|
time.sleep(0.5)
|
|
|
|
print(f"Total deleted: {total_deleted}")
|
|
|
|
if __name__ == "__main__":
|
|
cleanup_hosts() |