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() |