=== STEP_034E4B WG CLIENT ENDPOINT SOURCE FIX === timestamp=20260708-115314 mode=source file patch only, no restart final_wg_client_endpoint=wg-studio.secret-studio.ru:51830 goal: replace internal WG_CLIENT_ENDPOINT=10.71.100.1:51830 source with public DNS endpoint forbidden: docker restart, backend restart, peer creation, wg reload === before source grep === /opt/wg-access/DEFERRED_TASKS.md:8: WG_CLIENT_ENDPOINT=10.71.100.1:51830 /opt/wg-access/DEFERRED_TASKS.md:12: VM101 DNAT UDP 51830 -> MGTS VM100 10.71.100.1:51830 /opt/wg-access/.env:13:WG_CLIENT_ENDPOINT=10.71.100.1:51830 /opt/wg-access/backend/app/services/wireguard.py:79: endpoint = os.environ.get("WG_CLIENT_ENDPOINT", "").strip() /opt/wg-access/backend/app/services/wireguard.py:86: raise RuntimeError("WG_CLIENT_ENDPOINT is not configured") /opt/wg-access/STATUS-STEP-016_CLIENT_CONFIG_RESPONSE_OK.txt:16: WG_CLIENT_ENDPOINT=192.168.30.1:51830 /opt/wg-access/backups/step022a/dev.py.20260704-163658.bak:104: endpoint = os.environ.get("WG_CLIENT_ENDPOINT", "").strip() /opt/wg-access/backups/step022a/dev.py.20260704-163658.bak:111: raise RuntimeError("WG_CLIENT_ENDPOINT is not configured") /opt/wg-access/backups/step022a/wireguard.py.20260704-163658.bak:79: endpoint = os.environ.get("WG_CLIENT_ENDPOINT", "").strip() /opt/wg-access/backups/step022a/wireguard.py.20260704-163658.bak:86: raise RuntimeError("WG_CLIENT_ENDPOINT is not configured") /opt/wg-access/backups/step021b/dev.py.20260704-162930.bak:104: endpoint = os.environ.get("WG_CLIENT_ENDPOINT", "").strip() /opt/wg-access/backups/step021b/dev.py.20260704-162930.bak:111: raise RuntimeError("WG_CLIENT_ENDPOINT is not configured") /opt/wg-access/backups/step018b/dev.py.20260704-155255.bak:75: endpoint = os.environ.get("WG_CLIENT_ENDPOINT", "").strip() /opt/wg-access/backups/step018b/dev.py.20260704-155255.bak:82: raise RuntimeError("WG_CLIENT_ENDPOINT is not configured") /opt/wg-access/.env.BEFORE_MGTS_CLIENTCFG_20260706-185027:13:WG_CLIENT_ENDPOINT=192.168.30.1:51830 /opt/wg-access/STATUS-STEP-028A_MGTS_WG_PAID_E2E_OK.txt:30: endpoint used for internal smoke: 10.71.100.1:51830 /opt/wg-access/STATUS-STEP-028A_MGTS_WG_PAID_E2E_OK.txt:55: WG_CLIENT_ENDPOINT=10.71.100.1:51830 /opt/wg-access/STATUS-STEP-028A_MGTS_WG_PAID_E2E_OK.txt:61: internal smoke endpoint 10.71.100.1:51830, /opt/wg-access/STATUS-STEP-028A_MGTS_WG_PAID_E2E_OK.txt:65: Replace WG_CLIENT_ENDPOINT=10.71.100.1:51830 with real external MGTS DNS/IP endpoint after MGTS static IP is known. /opt/wg-access/.env.BEFORE_MGTS_CLIENTCFG_20260706-185140:13:WG_CLIENT_ENDPOINT=10.71.100.1:51830 === patch source files === UPDATED_WG_CLIENT_ENDPOINT_SOURCE /opt/wg-access/.env --- /opt/wg-access/.env.before +++ /opt/wg-access/.env.after @@ -10,7 +10,7 @@ AGENT_TOKEN= WG_SERVER_PUBLIC_KEY=FD1J+KVZ965pCjgtO0YWxJsKANY9uz6v1P54JLkiZzY= -WG_CLIENT_ENDPOINT=10.71.100.1:51830 +WG_CLIENT_ENDPOINT=wg-studio.secret-studio.ru:51830 WG_CLIENT_ALLOWED_IPS=0.0.0.0/0 WG_CLIENT_POOL_CIDR=10.253.0.0/16 WG_CLIENT_FIRST_IP=10.253.1.10 INSPECT_ONLY_NO_CHANGE /opt/wg-access/backend/app/services/wireguard.py WG_CLIENT_ENDPOINT_SOURCE_CHANGED_FILES=1 === after source grep === /opt/wg-access/DEFERRED_TASKS.md:8: WG_CLIENT_ENDPOINT=10.71.100.1:51830 /opt/wg-access/DEFERRED_TASKS.md:12: VM101 DNAT UDP 51830 -> MGTS VM100 10.71.100.1:51830 /opt/wg-access/.env:13:WG_CLIENT_ENDPOINT=wg-studio.secret-studio.ru:51830 /opt/wg-access/backend/app/services/wireguard.py:79: endpoint = os.environ.get("WG_CLIENT_ENDPOINT", "").strip() /opt/wg-access/backend/app/services/wireguard.py:86: raise RuntimeError("WG_CLIENT_ENDPOINT is not configured") /opt/wg-access/STATUS-STEP-016_CLIENT_CONFIG_RESPONSE_OK.txt:16: WG_CLIENT_ENDPOINT=192.168.30.1:51830 /opt/wg-access/backups/step022a/dev.py.20260704-163658.bak:104: endpoint = os.environ.get("WG_CLIENT_ENDPOINT", "").strip() /opt/wg-access/backups/step022a/dev.py.20260704-163658.bak:111: raise RuntimeError("WG_CLIENT_ENDPOINT is not configured") /opt/wg-access/backups/step022a/wireguard.py.20260704-163658.bak:79: endpoint = os.environ.get("WG_CLIENT_ENDPOINT", "").strip() /opt/wg-access/backups/step022a/wireguard.py.20260704-163658.bak:86: raise RuntimeError("WG_CLIENT_ENDPOINT is not configured") /opt/wg-access/backups/step021b/dev.py.20260704-162930.bak:104: endpoint = os.environ.get("WG_CLIENT_ENDPOINT", "").strip() /opt/wg-access/backups/step021b/dev.py.20260704-162930.bak:111: raise RuntimeError("WG_CLIENT_ENDPOINT is not configured") /opt/wg-access/backups/step018b/dev.py.20260704-155255.bak:75: endpoint = os.environ.get("WG_CLIENT_ENDPOINT", "").strip() /opt/wg-access/backups/step018b/dev.py.20260704-155255.bak:82: raise RuntimeError("WG_CLIENT_ENDPOINT is not configured") /opt/wg-access/.env.BEFORE_MGTS_CLIENTCFG_20260706-185027:13:WG_CLIENT_ENDPOINT=192.168.30.1:51830 /opt/wg-access/STATUS-STEP-028A_MGTS_WG_PAID_E2E_OK.txt:30: endpoint used for internal smoke: 10.71.100.1:51830 /opt/wg-access/STATUS-STEP-028A_MGTS_WG_PAID_E2E_OK.txt:55: WG_CLIENT_ENDPOINT=10.71.100.1:51830 /opt/wg-access/STATUS-STEP-028A_MGTS_WG_PAID_E2E_OK.txt:61: internal smoke endpoint 10.71.100.1:51830, /opt/wg-access/STATUS-STEP-028A_MGTS_WG_PAID_E2E_OK.txt:65: Replace WG_CLIENT_ENDPOINT=10.71.100.1:51830 with real external MGTS DNS/IP endpoint after MGTS static IP is known. /opt/wg-access/.env.BEFORE_MGTS_CLIENTCFG_20260706-185140:13:WG_CLIENT_ENDPOINT=10.71.100.1:51830 === running backend env, expected still old until restart === backend_container=wgaccess-backend WG_CLIENT_ENDPOINT=10.71.100.1:51830 === health after source patch, no restart === {"status":"ok","service":"wg-access-backend","environment":"dev"} {"status":"ok","db":1} === no forbidden actions proof === no_docker_restart=1 no_backend_restart=1 no_wg_reload=1 no_peer_create=1 vm121_wg_client_endpoint_source_fix_done=1 vm121_remote_backup_dir=/root/router-ops-backups/wg-client-endpoint-source-backup-20260708-115314 === STEP_034E4B RESULT === changed_source_files=1 final_source_endpoint_lines=1 old_source_endpoint_remaining_lines=4 running_backend_old_endpoint_lines=1 running_backend_final_endpoint_lines=0 backend_health_ok_lines=2 no_docker_restart_lines=1 no_wg_reload_lines=1 no_peer_create_lines=1 decision=BLOCK_OLD_SOURCE_REMAINS