import urllib.request import urllib.parse import ssl import json import paramiko ctx = ssl.create_default_context() ctx.check_hostname = False ctx.verify_mode = ssl.CERT_NONE # 1. Add DNS A records for snarfhome.snarfnet.net -> 14.4.4.20 on Technitium DNS for dns_host in ["dns1.snarfnet.net", "dns2.snarfnet.net"]: try: login_url = f"https://{dns_host}/api/user/login?user=admin&pass=snarfnetadmin&includeInfo=true" with urllib.request.urlopen(urllib.request.Request(login_url), context=ctx, timeout=8) as resp: token = json.loads(resp.read().decode())['token'] for name in ["snarfhome", "homeassistant"]: params = { "token": token, "domain": f"{name}.snarfnet.net", "zone": "snarfnet.net", "type": "A", "ipAddress": "14.4.4.20", "ptr": "true", "overwrite": "true", "ttl": 3600 } add_url = f"https://{dns_host}/api/zones/records/add?{urllib.parse.urlencode(params)}" with urllib.request.urlopen(urllib.request.Request(add_url), context=ctx, timeout=8) as resp: result = json.loads(resp.read().decode()) print(f"[{dns_host}] Added {name}.snarfnet.net -> 14.4.4.20: {result.get('status')}") except Exception as e: print(f"[{dns_host}] Error: {e}") # 2. Disable Redirection Host 1 in NPM DB and remove 1.conf client = paramiko.SSHClient() client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) client.connect("140.44.4.71", username="root", key_filename=r"C:\Users\Snarf\.ssh\id_ed25519_snarfnet", timeout=10) npm_cleanup = """python3 - << 'EOF' import sqlite3, os db = '/var/lib/docker/volumes/nginx-proxy-manager_nginx-data/_data/database.sqlite' conn = sqlite3.connect(db) conn.execute("UPDATE redirection_host SET enabled = 0, is_deleted = 1 WHERE id = 1") conn.commit() print("Updated database: redirection_host id 1 disabled and marked deleted") conf_file = '/var/lib/docker/volumes/nginx-proxy-manager_nginx-data/_data/nginx/redirection_host/1.conf' if os.path.exists(conf_file): os.remove(conf_file) print("Removed 1.conf") EOF """ stdin, stdout, stderr = client.exec_command(npm_cleanup) print(stdout.read().decode()) print(stderr.read().decode()) # 3. Reload nginx on both Swarm NPM nodes client.exec_command("for id in $(docker ps -q -f name=nginx-proxy-manager_app); do docker exec $id nginx -s reload; done") client.close() client2 = paramiko.SSHClient() client2.set_missing_host_key_policy(paramiko.AutoAddPolicy()) client2.connect("140.44.4.72", username="root", key_filename=r"C:\Users\Snarf\.ssh\id_ed25519_snarfnet", timeout=10) client2.exec_command("for id in $(docker ps -q -f name=nginx-proxy-manager_app); do docker exec $id nginx -s reload; done") client2.close() print("Reloaded Nginx across NPM swarm replicas")