116 lines
3.4 KiB
Python
116 lines
3.4 KiB
Python
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()
|