import requests import json import urllib3 # Kikapcsoljuk az SSL figyelmeztetéseket urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning) # --- KONFIGURÁCIÓ --- # Módosítva a kért IP-re: URL = "http://10.102.1.201:8080/monitoring/check_mk/api/1.0" USERNAME = "cmkadmin" PASSWORD = "cmkadmin123" FOLDER = "/" # A fő szülő (Parent) adatai GW_NAME = "SOPHOS-GW" GW_IP = "10.102.1.1" # A switchek adatai SWITCHES = { "NET-SW01": "10.220.1.84", "NET-SW02": "10.220.1.85", "NET-SW03": "172.16.71.6", "NET-SW04": "10.220.1.86", "NET-SW05": "10.220.1.87", "NET-SW06": "10.220.1.88", "NET-SW07": "10.220.1.90", "NET-SW08": "10.220.1.91", "NET-SW09": "10.220.1.92", "NET-SW10": "10.220.1.93", "NET-SW11": "10.220.1.94", "NET-SW12": "10.220.1.95", "NET-SW13": "10.220.1.96", "NET-SW14": "10.220.1.97", } session = requests.Session() session.auth = (USERNAME, PASSWORD) session.headers.update({"Accept": "application/json", "Content-Type": "application/json"}) def add_host(name, ip, parents=None): print(f"Adding host: {name} ({ip})...") attributes = { "ipaddress": ip, "tag_agent": "no-agent", } if parents: attributes["parents"] = parents payload = { "host_name": name, "folder": FOLDER, "attributes": attributes } response = session.post( f"{URL}/domain-types/host_config/collections/all", json=payload ) if response.status_code == 200: print(f" [OK] Host '{name}' successfully added.") elif response.status_code == 400 and "already exists" in response.text: print(f" [INFO] Host '{name}' already exists.") else: print(f" [ERROR] Failed to add {name}: {response.status_code} - {response.text}") def activate_changes(): print("Fetching pending changes to get ETag...") # Külön session az ETag lekéréshez a biztonság kedvéért etag_session = requests.Session() etag_session.auth = (USERNAME, PASSWORD) etag_session.headers.update({"Accept": "application/json"}) resp = etag_session.get(f"{URL}/domain-types/activation_run/collections/pending_changes") if resp.status_code != 200: print(f" [ERROR] Could not fetch pending changes: {resp.text}") return etag = resp.headers.get("ETag") # Ha nincs ETag vagy nincs függőben lévő változás, ne csináljunk semmit if not etag or resp.json().get('value') == []: print(" [INFO] No pending changes to activate.") return print(f"Activating changes with ETag: {etag}") # Az aktiváláshoz be kell állítani az If-Match fejlécet # Ezt az eredeti session headerjeihez adjuk hozzá session.headers.update({"If-Match": etag}) response = session.post( f"{URL}/domain-types/activation_run/actions/activate-changes/invoke", json={"redirect": False, "sites": ["monitoring"]} ) if response.status_code == 200: print(" [OK] Changes activated successfully.") else: print(f" [ERROR] Failed to activate changes: {response.status_code} - {response.text}") if __name__ == "__main__": # 1. Először a SOPHOS GW-t vesszük fel add_host(GW_NAME, GW_IP) # 2. Utána a switcheket a GW-vel szülőként for name, ip in SWITCHES.items(): add_host(name, ip, parents=[GW_NAME]) # 3. Aktiváljuk a változtatásokat activate_changes()