|
|
@@ -6,26 +6,20 @@ from core.file_manager import load_panel_settings, load_adblock_lists, load_cust
|
|
|
|
|
|
def broadcast_to_cluster(action, domain):
|
|
|
def task():
|
|
|
- from core import dns # Import εδώ για αποφυγή circular import
|
|
|
+ from core import dns
|
|
|
+ import urllib.request, json
|
|
|
settings = load_panel_settings()
|
|
|
nodes = settings.get('cluster_nodes', [])
|
|
|
|
|
|
- # Βρίσκουμε ποιους masters πρέπει να στείλουμε
|
|
|
masters = dns.get_zone_masters_list(domain)
|
|
|
-
|
|
|
- # Αν η λίστα είναι κενή, σημαίνει ότι η ζώνη είναι Master στον Master μας,
|
|
|
- # οπότε στέλνουμε την Public IP αυτού του Server.
|
|
|
if not masters:
|
|
|
master_ip = settings.get('server_public_ip', '').strip()
|
|
|
- if master_ip:
|
|
|
- masters = [master_ip]
|
|
|
+ if master_ip: masters = [master_ip]
|
|
|
|
|
|
for node in nodes:
|
|
|
try:
|
|
|
url = f"{node['url'].rstrip('/')}/api/v1/cluster/zone"
|
|
|
headers = {"X-API-Key": node['api_key'], "Content-Type": "application/json"}
|
|
|
-
|
|
|
- # Στέλνουμε στο Payload και τις IPs των masters
|
|
|
payload = {"domain": domain, "masters": masters}
|
|
|
|
|
|
if action == 'add_slave':
|
|
|
@@ -34,9 +28,10 @@ def broadcast_to_cluster(action, domain):
|
|
|
req = urllib.request.Request(f"{url}/{domain}", headers=headers, method='DELETE')
|
|
|
|
|
|
urllib.request.urlopen(req, timeout=5, context=config.ssl_ctx)
|
|
|
- print(f"Cluster Sync OK: {node['name']} ({action} {domain} -> Masters: {masters})")
|
|
|
except Exception as e:
|
|
|
print(f"Cluster Sync FAIL: {node['name']} -> {e}")
|
|
|
+
|
|
|
+ import threading
|
|
|
threading.Thread(target=task, daemon=True).start()
|
|
|
|
|
|
def broadcast_adblock_to_cluster(action):
|