=== STEP_034E1 XSMAP ENDPOINT DRYRUN === timestamp=20260708-114540 mode=dry-run only final_admin_endpoint=wg-studio.secret-studio.ru:51820 final_wgpay_endpoint=wg-studio.secret-studio.ru:51830 remote_changes=none === DNS sanity === 95.165.105.4 wg-studio.secret-studio.ru === router-ops local candidates === ### LOCAL_FILE /opt/router-ops/inventory/access-map.yml hit_lines=26 proposed_change_lines=1 HIT 24: pve_wg_paid: HIT 92: current_test_endpoint: 192.168.30.218:51820 HIT 101: router_ops_to_pve_wg_paid: HIT 103: to: pve_wg_paid HIT 111: pve_wg_paid_to_mgts_vm100: HIT 112: from: pve_wg_paid HIT 118: pve_wg_paid_to_mgts_vm101: HIT 119: from: pve_wg_paid HIT 149: pve_wg_paid_lan: HIT 153: pve_wg_paid_admin_wg: HIT 332: wg_paid_live_peer_apply_20260706: HIT 336: interface: wg_paid HIT 338: listen_port: 51830 HIT 350: - ifdown wg_paid HIT 351: - ifup wg_paid HIT 354: conclusion: paid peer add/remove does not require wg_paid restart HIT 375: wg_paid_mgts_direct_vm121: HIT 392: role: "OpenWRT core; wg_remote; wg_paid server" HIT 410: wg_paid: HIT 412: interface: "wg_paid" HIT 414: listen_port_udp: 51830 HIT 425: wg_paid_vm121_direct_mgts_admin: HIT 448: role: "OpenWRT core; wg_remote; wg_paid" HIT 460: wg_paid: HIT 462: interface: "wg_paid" HIT 464: listen_port_udp: 51830 CHANGE 92: old: current_test_endpoint: 192.168.30.218:51820 new: current_test_endpoint: wg-studio.secret-studio.ru:51820 ### LOCAL_FILE /opt/router-ops/inventory/STATUS-WG-PAID-LIVE-PEER-NO-RESTART-OK.txt hit_lines=2 proposed_change_lines=0 HIT 4: wg_paid live peer add/remove verified on current home VM100. HIT 8: - wg_paid interface was not recreated ### LOCAL_FILE /opt/router-ops/inventory/access-map.yml.bak-20260706-134252 hit_lines=16 proposed_change_lines=1 HIT 24: pve_wg_paid: HIT 92: current_test_endpoint: 192.168.30.218:51820 HIT 101: router_ops_to_pve_wg_paid: HIT 103: to: pve_wg_paid HIT 111: pve_wg_paid_to_mgts_vm100: HIT 112: from: pve_wg_paid HIT 118: pve_wg_paid_to_mgts_vm101: HIT 119: from: pve_wg_paid HIT 149: pve_wg_paid_lan: HIT 153: pve_wg_paid_admin_wg: HIT 332: wg_paid_live_peer_apply_20260706: HIT 336: interface: wg_paid HIT 338: listen_port: 51830 HIT 350: - ifdown wg_paid HIT 351: - ifup wg_paid HIT 354: conclusion: paid peer add/remove does not require wg_paid restart CHANGE 92: old: current_test_endpoint: 192.168.30.218:51820 new: current_test_endpoint: wg-studio.secret-studio.ru:51820 ### LOCAL_FILE /opt/router-ops/inventory/access-map-wg-paid-mgts.md hit_lines=7 proposed_change_lines=0 HIT 29: MGTS VM100 wg_paid addr: 10.253.1.1/16 HIT 30: MGTS VM100 wg_paid port: UDP 51830 HIT 133: Temporary wg_paid client from VM121: 10.253.254.121/32 HIT 135: Handshake to MGTS VM100 wg_paid: OK HIT 137: Ping 1.1.1.1 through wg_paid: OK HIT 138: Ping 8.8.8.8 through wg_paid: OK HIT 139: External IP through wg_paid during test: 94.45.208.160 ### LOCAL_FILE /opt/router-ops/inventory/access-map.yml.before-extend-all-20260706_131706 hit_lines=8 proposed_change_lines=1 HIT 24: pve_wg_paid: HIT 92: current_test_endpoint: 192.168.30.218:51820 HIT 101: router_ops_to_pve_wg_paid: HIT 103: to: pve_wg_paid HIT 111: pve_wg_paid_to_mgts_vm100: HIT 112: from: pve_wg_paid HIT 118: pve_wg_paid_to_mgts_vm101: HIT 119: from: pve_wg_paid CHANGE 92: old: current_test_endpoint: 192.168.30.218:51820 new: current_test_endpoint: wg-studio.secret-studio.ru:51820 ### LOCAL_FILE /opt/router-ops/inventory/access-map.md hit_lines=2 proposed_change_lines=1 HIT 185: 192.168.30.218:51820 HIT 241: wg_paid live temp client smoke: CHANGE 185: old: 192.168.30.218:51820 new: wg-studio.secret-studio.ru:51820 ### LOCAL_FILE /opt/router-ops/inventory/access-map.yml.bak-20260706-134742 hit_lines=16 proposed_change_lines=1 HIT 24: pve_wg_paid: HIT 92: current_test_endpoint: 192.168.30.218:51820 HIT 101: router_ops_to_pve_wg_paid: HIT 103: to: pve_wg_paid HIT 111: pve_wg_paid_to_mgts_vm100: HIT 112: from: pve_wg_paid HIT 118: pve_wg_paid_to_mgts_vm101: HIT 119: from: pve_wg_paid HIT 149: pve_wg_paid_lan: HIT 153: pve_wg_paid_admin_wg: HIT 332: wg_paid_live_peer_apply_20260706: HIT 336: interface: wg_paid HIT 338: listen_port: 51830 HIT 350: - ifdown wg_paid HIT 351: - ifup wg_paid HIT 354: conclusion: paid peer add/remove does not require wg_paid restart CHANGE 92: old: current_test_endpoint: 192.168.30.218:51820 new: current_test_endpoint: wg-studio.secret-studio.ru:51820 ### LOCAL_FILE /opt/router-ops/instances/mgts-main/instance.yml hit_lines=2 proposed_change_lines=0 HIT 29: - vm101_dnat_udp_51830_to_vm100_wg_paid HIT 31: - vm100_wg_paid ### LOCAL_FILE /opt/router-ops/instances/mgts-main/networks.yml hit_lines=3 proposed_change_lines=0 HIT 21: wg_paid: HIT 23: interface: wg_paid HIT 26: listen_port: 51830 ### LOCAL_FILE /opt/router-ops/instances/mgts-main/hosts.yml hit_lines=1 proposed_change_lines=0 HIT 15: - wg_paid ### LOCAL_FILE /opt/router-ops/product/egress/adapters/hidemyname/hmn-load-egress-slot.sh hit_lines=9 proposed_change_lines=0 HIT 61: ENDPOINT="$(getv Endpoint)" HIT 64: ENDPOINT_HOST="${ENDPOINT%:*}" HIT 65: ENDPOINT_PORT="${ENDPOINT##*:}" HIT 67: if [ -z "$PRIVATE_KEY" ] || [ -z "$ADDRESS" ] || [ -z "$PUBLIC_KEY" ] || [ -z "$ENDPOINT_HOST" ] || [ -z "$ENDPOINT_PORT" ]; then HIT 71: echo "Endpoint=$ENDPOINT" >&2 HIT 78: echo "endpoint=$ENDPOINT" HIT 153: uci set network."$PEER".endpoint_host="$ENDPOINT_HOST" HIT 154: uci set network."$PEER".endpoint_port="$ENDPOINT_PORT" HIT 159: uci set network."$SLOT".hmn_endpoint="$ENDPOINT" ### LOCAL_FILE /opt/router-ops/product/egress/docs/OPERATIONS.md hit_lines=2 proposed_change_lines=0 HIT 9: - VM101 DNAT UDP 51830 to VM100 wg_paid. HIT 11: - VM100 wg_paid. ### LOCAL_FILE /opt/router-ops/product/egress/docs/ARCHITECTURE.md hit_lines=1 proposed_change_lines=0 HIT 28: - Do not touch DNAT to VM100 wg_remote/wg_paid unless a step explicitly says so. === VM121 candidates === ### VM121_FILE /etc/wireguard/wg-step019b.conf hit_lines=1 proposed_change_lines=0 HIT 8: Endpoint = 192.168.30.1:51830 ### VM121_FILE /etc/wireguard/wg-step020d.conf hit_lines=1 proposed_change_lines=0 HIT 8: Endpoint = 192.168.30.1:51830 ### VM121_FILE /etc/wireguard/wg-step017.conf hit_lines=1 proposed_change_lines=0 HIT 8: Endpoint = 192.168.30.1:51830 ### VM121_FILE /etc/wireguard/wg-step021c.conf hit_lines=1 proposed_change_lines=0 HIT 8: Endpoint = 192.168.30.1:51830 ### VM121_FILE /etc/wireguard/wg-step022b.conf hit_lines=1 proposed_change_lines=0 HIT 8: Endpoint = 192.168.30.1:51830 ### VM121_FILE /etc/wireguard/wg-mgts.conf hit_lines=1 proposed_change_lines=1 HIT 7: Endpoint = 192.168.30.218:51820 CHANGE 7: old: Endpoint = 192.168.30.218:51820 new: Endpoint = wg-studio.secret-studio.ru:51820 ### VM121_FILE /opt/wg-access/DEFERRED_TASKS.md hit_lines=2 proposed_change_lines=0 HIT 8: WG_CLIENT_ENDPOINT=10.71.100.1:51830 HIT 12: VM101 DNAT UDP 51830 -> MGTS VM100 10.71.100.1:51830 ### VM121_FILE /opt/wg-access/STATUS-STEP-013_WG_HANDSHAKE_VM121_TO_VM100_OK.txt hit_lines=5 proposed_change_lines=0 HIT 17: interface: wg_paid HIT 19: listen_port: 51830 HIT 23: 192.168.30.1:51830 HIT 29: - VM100 wg show wg_paid showed endpoint 192.168.30.83: HIT 30: - VM100 wg show wg_paid showed latest handshake ### VM121_FILE /opt/wg-access/.env hit_lines=1 proposed_change_lines=0 HIT 13: WG_CLIENT_ENDPOINT=10.71.100.1:51830 ### VM121_FILE /opt/wg-access/STATUS-STEP-016_CLIENT_CONFIG_RESPONSE_OK.txt hit_lines=3 proposed_change_lines=0 HIT 16: WG_CLIENT_ENDPOINT=192.168.30.1:51830 HIT 40: wg_paid contains peer: HIT 45: wg_paid is up ### VM121_FILE /opt/wg-access/STATUS-STEP-010_AGENT_SSH_TO_VM100_OK.txt hit_lines=5 proposed_change_lines=0 HIT 18: ip -br addr show wg_paid HIT 19: wg show wg_paid HIT 23: interface: wg_paid HIT 25: listen_port: 51830 HIT 31: - add real peers to VM100 wg_paid ### VM121_FILE /opt/wg-access/STATUS-STEP-020C_AGENT_TIMER_REAL_PERIODIC_OK.txt hit_lines=2 proposed_change_lines=0 HIT 44: VM100 wg_paid: HIT 46: route: 10.253.0.0/16 dev wg_paid ### VM121_FILE /opt/wg-access/STATUS-STEP-011_MANUAL_WG_SET_VM100_OK.txt hit_lines=7 proposed_change_lines=0 HIT 14: interface: wg_paid HIT 18: 2. Added peer to VM100 wg_paid using SSH + wg set. HIT 19: 3. Confirmed peer appeared in wg show wg_paid: HIT 22: wg set wg_paid peer remove HIT 23: 5. Confirmed wg_paid is clean again. HIT 25: Current VM100 wg_paid state: HIT 27: listen_port: 51830 ### VM121_FILE /opt/wg-access/STATUS-STEP-012_REAL_AGENT_PROVISION_VM100_OK.txt hit_lines=5 proposed_change_lines=0 HIT 13: 5. Agent executed wg set on VM100 wg_paid. HIT 14: 6. Peer appeared in VM100 wg_paid. HIT 32: interface: wg_paid HIT 34: listen_port: 51830 HIT 44: One real test peer remains active on VM100 wg_paid. ### VM121_FILE /opt/wg-access/STATUS-STEP-021C_ADMIN_SUBSCRIPTION_FLOW_OK.txt hit_lines=4 proposed_change_lines=0 HIT 34: node_id: ddn-test HIT 73: VM100 wg_paid: HIT 75: route: 10.253.0.0/16 dev wg_paid HIT 84: VM100 wg_paid clean. ### VM121_FILE /opt/wg-access/STATUS-STEP-019A_TEST_PEERS_CLEANED_OK.txt hit_lines=4 proposed_change_lines=0 HIT 23: removed all extra runtime peers from VM100 wg_paid HIT 28: wg_paid remains up HIT 30: route: 10.253.0.0/16 dev wg_paid HIT 37: Clean /16 wg_paid network. ### VM121_FILE /opt/wg-access/STATUS-STEP-025A_CANCEL_SUBSCRIPTION_OK.txt hit_lines=5 proposed_change_lines=0 HIT 54: node_id: ddn-test HIT 64: peer appeared on wg_paid: HIT 102: VM100 wg_paid: HIT 104: route: 10.253.0.0/16 dev wg_paid HIT 113: VM100 wg_paid clean. ### VM121_FILE /opt/wg-access/STATUS-STEP-020D_TIMER_AUTO_PROVISION_DEPROVISION_OK.txt hit_lines=4 proposed_change_lines=0 HIT 32: wg_paid had peer: HIT 70: VM100 wg_paid: HIT 72: route: 10.253.0.0/16 dev wg_paid HIT 77: VM100 wg_paid clean. ### VM121_FILE /opt/wg-access/STATUS-STEP-019B_CLEAN_POOL_SMOKE_OK.txt hit_lines=5 proposed_change_lines=0 HIT 10: VM100 wg_paid was clean: HIT 26: Agent added peer to VM100 wg_paid. HIT 56: Agent removed runtime peer from VM100 wg_paid. HIT 61: VM100 wg_paid: HIT 68: VM100 wg_paid is clean and ready. ### VM121_FILE /opt/wg-access/.env.BEFORE_MGTS_CLIENTCFG_20260706-185027 hit_lines=1 proposed_change_lines=0 HIT 13: WG_CLIENT_ENDPOINT=192.168.30.1:51830 ### VM121_FILE /opt/wg-access/STATUS-STEP-024A_ADMIN_USER_VIEW_OK.txt hit_lines=3 proposed_change_lines=0 HIT 77: VM100 wg_paid: HIT 79: route: 10.253.0.0/16 dev wg_paid HIT 88: VM100 wg_paid clean. ### VM121_FILE /opt/wg-access/STATUS-STEP-005_API_DB_OK.txt hit_lines=1 proposed_change_lines=0 HIT 32: GET /agent/jobs?node_id=... ### VM121_FILE /opt/wg-access/STATUS-STEP-017_GENERATED_CLIENT_CONFIG_HANDSHAKE_OK.txt hit_lines=4 proposed_change_lines=0 HIT 14: 5. Agent provisioned the peer to VM100 wg_paid. HIT 28: Endpoint = 192.168.30.1:51830 HIT 40: VM100 wg_paid is up. HIT 44: VM100 wg_paid has both peers. ### VM121_FILE /opt/wg-access/STATUS-STEP-023A_DEV_ENDPOINT_GUARD_OK.txt hit_lines=4 proposed_change_lines=0 HIT 34: node_id: ddn-test HIT 44: peer appeared on wg_paid: HIT 61: VM100 wg_paid: HIT 63: route: 10.253.0.0/16 dev wg_paid ### VM121_FILE /opt/wg-access/STATUS-STEP-022B_DEV_ENDPOINT_USES_SHARED_WG_SERVICE_OK.txt hit_lines=4 proposed_change_lines=0 HIT 31: node_id: ddn-test HIT 67: VM100 wg_paid: HIT 69: route: 10.253.0.0/16 dev wg_paid HIT 78: VM100 wg_paid clean. ### VM121_FILE /opt/wg-access/STATUS-STEP-028A_MGTS_WG_PAID_E2E_OK.txt hit_lines=9 proposed_change_lines=0 HIT 7: MGTS wg_paid production lifecycle and E2E routing smoke passed. HIT 12: REMOTE_WG_INTERFACE=wg_paid HIT 24: -> agent executed runtime wg set on MGTS VM100 wg_paid HIT 25: -> peer appeared on MGTS VM100 wg_paid HIT 30: endpoint used for internal smoke: 10.71.100.1:51830 HIT 49: -> peer removed from MGTS VM100 wg_paid HIT 55: WG_CLIENT_ENDPOINT=10.71.100.1:51830 HIT 61: internal smoke endpoint 10.71.100.1:51830, HIT 65: Replace WG_CLIENT_ENDPOINT=10.71.100.1:51830 with real external MGTS DNS/IP endpoint after MGTS static IP is known. ### VM121_FILE /opt/wg-access/STATUS-STEP-026A_EXPIRE_SUBSCRIPTIONS_OK.txt hit_lines=5 proposed_change_lines=0 HIT 50: node_id: ddn-test HIT 60: peer appeared on wg_paid: HIT 102: VM100 wg_paid: HIT 104: route: 10.253.0.0/16 dev wg_paid HIT 113: VM100 wg_paid clean. ### VM121_FILE /opt/wg-access/STATUS-STEP-018_POOL_16_AND_REUSE_ALLOCATOR_OK.txt hit_lines=7 proposed_change_lines=0 HIT 9: wg_paid address changed from: HIT 15: 10.253.0.0/16 dev wg_paid HIT 17: After wg_paid reload runtime peers disappeared as expected. HIT 22: uq_peers_node_tunnel_ip UNIQUE (node_id, tunnel_ip) HIT 26: ON peers (node_id, tunnel_ip) HIT 64: VM100 wg_paid contains enabled peers: HIT 70: VM100 wg_paid is /16 and up. ### VM121_FILE /opt/wg-access/STATUS-STEP-015_DISABLE_DEPROVISION_OK.txt hit_lines=4 proposed_change_lines=0 HIT 32: - agent removed runtime peer from VM100 wg_paid HIT 35: - VM100 wg_paid has no peers after agent run HIT 41: wg_paid is up HIT 42: wg_paid has no peers ### VM121_FILE /opt/wg-access/.env.BEFORE_MGTS_CLIENTCFG_20260706-185140 hit_lines=1 proposed_change_lines=0 HIT 13: WG_CLIENT_ENDPOINT=10.71.100.1:51830 ### VM121_FILE /opt/wg-access/STATUS-STEP-014_AGENT_RECONCILE_SYNC_OK.txt hit_lines=6 proposed_change_lines=0 HIT 9: VM100 wg_paid peers added with runtime wg set are not persistent across reboot, HIT 14: GET /agent/peers?node_id=ddn-test HIT 26: wg show wg_paid allowed-ips HIT 28: wg set wg_paid peer ... preshared-key ... allowed-ips ... HIT 33: 1. Manually removed real peer from VM100 wg_paid. HIT 50: - VM100 wg_paid contains the enabled real peer. ### VM121_FILE /opt/wg-access/STATUS-STEP-006_AGENT_PULL_API_OK.txt hit_lines=2 proposed_change_lines=0 HIT 8: - GET /agent/jobs?node_id=... HIT 14: - pending job fetched by node_id ### VM121_FILE /opt/wg-access/backend/app/models/core.py hit_lines=3 proposed_change_lines=0 HIT 85: # uq_peers_node_tunnel_ip_enabled (node_id, tunnel_ip) WHERE enabled = true, HIT 91: node_id: Mapped[str] = mapped_column(String(64), default="ddn-test", nullable=False, index=True) HIT 110: node_id: Mapped[str] = mapped_column(String(64), nullable=False, index=True) ### VM121_FILE /opt/wg-access/backend/app/services/wireguard.py hit_lines=4 proposed_change_lines=0 HIT 41: def next_tunnel_ip(db: Session, node_id: str) -> str: HIT 59: Peer.node_id == node_id, HIT 79: endpoint = os.environ.get("WG_CLIENT_ENDPOINT", "").strip() HIT 86: raise RuntimeError("WG_CLIENT_ENDPOINT is not configured") ### VM121_FILE /opt/wg-access/backend/app/api/admin.py hit_lines=15 proposed_change_lines=0 HIT 66: node_id: str HIT 88: node_id: str = "ddn-test" HIT 97: node_id: str HIT 127: tunnel_ip = next_tunnel_ip(db, payload.node_id) HIT 134: node_id=payload.node_id, HIT 145: node_id=payload.node_id, HIT 169: node_id=peer.node_id, HIT 219: node_id=peer.node_id, HIT 282: node_id=peer.node_id, HIT 313: node_id: str HIT 330: node_id=peer.node_id, HIT 348: node_id=peer.node_id, HIT 358: node_id: str HIT 392: node_id: str HIT 406: node_id: str ### VM121_FILE /opt/wg-access/backend/app/api/dev.py.BEFORE_CLIENT_CONFIG_RESPONSE.20260704-151636 hit_lines=6 proposed_change_lines=0 HIT 22: node_id: str = "ddn-test" HIT 63: def next_tunnel_ip(db: Session, node_id: str) -> str: HIT 66: select(func.count()).select_from(Peer).where(Peer.node_id == node_id) HIT 78: tunnel_ip = next_tunnel_ip(db, payload.node_id) HIT 85: node_id=payload.node_id, HIT 96: node_id=payload.node_id, ### VM121_FILE /opt/wg-access/backend/app/api/dev.py hit_lines=4 proposed_change_lines=0 HIT 29: node_id: str = "ddn-test" HIT 58: tunnel_ip = next_tunnel_ip(db, payload.node_id) HIT 66: node_id=payload.node_id, HIT 77: node_id=payload.node_id, ### VM121_FILE /opt/wg-access/backend/app/api/dev.py.BEFORE_REAL_WG_KEYS.20260704-132545 hit_lines=6 proposed_change_lines=0 HIT 19: node_id: str = "ddn-test" HIT 36: def next_tunnel_ip(db: Session, node_id: str) -> str: HIT 39: select(func.count()).select_from(Peer).where(Peer.node_id == node_id) HIT 51: tunnel_ip = next_tunnel_ip(db, payload.node_id) HIT 55: node_id=payload.node_id, HIT 66: node_id=payload.node_id, ### VM121_FILE /opt/wg-access/backend/app/api/agent.py hit_lines=6 proposed_change_lines=0 HIT 23: node_id: str HIT 36: node_id: str, HIT 42: .where(Peer.node_id == node_id) HIT 52: node_id: str HIT 70: node_id: str, HIT 77: .where(ProvisioningJob.node_id == node_id) ### VM121_FILE /opt/wg-access/backend/app/api/admin.py.BEFORE_DISABLE_PEER.20260704-151253 hit_lines=2 proposed_change_lines=0 HIT 59: node_id: str HIT 78: node_id: str ### VM121_FILE /opt/wg-access/backend/app/api/agent.py.BEFORE_AGENT_PEERS_SYNC.20260704-133954 hit_lines=3 proposed_change_lines=0 HIT 23: node_id: str HIT 41: node_id: str, HIT 48: .where(ProvisioningJob.node_id == node_id) ### VM121_FILE /opt/wg-access/backend/alembic/versions/0001_initial_schema.py hit_lines=5 proposed_change_lines=0 HIT 78: sa.Column("node_id", sa.String(length=64), nullable=False), HIT 86: sa.UniqueConstraint("node_id", "tunnel_ip", name="uq_peers_node_tunnel_ip"), HIT 89: op.create_index("ix_peers_node_id", "peers", ["node_id"]) HIT 96: sa.Column("node_id", sa.String(length=64), nullable=False), HIT 107: op.create_index("ix_provisioning_jobs_node_id", "provisioning_jobs", ["node_id"]) ### VM121_FILE /opt/wg-access/agent/agent.env.BEFORE_MGTS_REMOTE_HOST_20260706-183324 hit_lines=1 proposed_change_lines=0 HIT 9: REMOTE_WG_INTERFACE=wg_paid ### VM121_FILE /opt/wg-access/agent/wg_access_agent.py.BEFORE_RECONCILE_SYNC.20260704-134532 hit_lines=3 proposed_change_lines=0 HIT 84: "node_id": NODE_ID, HIT 94: state["node_id"] = NODE_ID HIT 229: query = parse.urlencode({"node_id": NODE_ID, "limit": 20}) ### VM121_FILE /opt/wg-access/agent/agent.env hit_lines=1 proposed_change_lines=0 HIT 9: REMOTE_WG_INTERFACE=wg_paid ### VM121_FILE /opt/wg-access/agent/wg_access_agent.py hit_lines=7 proposed_change_lines=0 HIT 84: "node_id": NODE_ID, HIT 94: state["node_id"] = NODE_ID HIT 124: "node_id": peer.get("node_id", NODE_ID), HIT 212: query = parse.urlencode({"node_id": NODE_ID}) HIT 265: "node_id": NODE_ID, HIT 318: # Reconciliation first: VM100 wg_paid runtime state must match backend enabled peers. HIT 321: query = parse.urlencode({"node_id": NODE_ID, "limit": 20}) ### VM121_FILE /opt/wg-access/agent/wg_access_agent.py.BEFORE_REAL_SSH_WG_SET.20260704-132120 hit_lines=3 proposed_change_lines=0 HIT 72: "node_id": NODE_ID, HIT 82: state["node_id"] = NODE_ID HIT 131: query = parse.urlencode({"node_id": NODE_ID, "limit": 20}) ### VM121_FILE /opt/wg-access/agent/logs/agent.log hit_lines=9936 proposed_change_lines=0 HIT 18: [2026-07-04T13:28:03.185365+00:00] remote stdout: interface: wg_paid HIT 21: listening port: 51830 HIT 31: [2026-07-04T13:47:56.696020+00:00] remote stdout: interface: wg_paid HIT 34: listening port: 51830 HIT 44: [2026-07-04T15:12:56.858872+00:00] remote stdout: interface: wg_paid HIT 47: listening port: 51830 HIT 57: [2026-07-04T15:13:42.700820+00:00] remote stdout: interface: wg_paid HIT 60: listening port: 51830 HIT 63: [2026-07-04T15:13:43.088872+00:00] remote stdout: interface: wg_paid HIT 66: listening port: 51830 HIT 72: [2026-07-04T15:19:05.259935+00:00] remote stdout: interface: wg_paid HIT 75: listening port: 51830 HIT 82: [2026-07-04T15:19:05.670060+00:00] remote stdout: interface: wg_paid HIT 85: listening port: 51830 HIT 97: [2026-07-04T15:26:17.542992+00:00] remote stdout: interface: wg_paid HIT 100: listening port: 51830 HIT 111: [2026-07-04T15:26:17.798383+00:00] remote stdout: interface: wg_paid HIT 114: listening port: 51830 HIT 129: [2026-07-04T15:35:53.621782+00:00] remote stdout: interface: wg_paid HIT 132: listening port: 51830 HIT 149: [2026-07-04T15:56:30.583337+00:00] remote stdout: interface: wg_paid HIT 152: listening port: 51830 HIT 167: [2026-07-04T15:56:30.796077+00:00] remote stdout: interface: wg_paid HIT 170: listening port: 51830 HIT 193: [2026-07-04T15:58:57.946401+00:00] remote stdout: interface: wg_paid HIT 196: listening port: 51830 HIT 199: [2026-07-04T15:58:58.173434+00:00] remote stdout: interface: wg_paid HIT 202: listening port: 51830 HIT 206: [2026-07-04T15:58:58.486826+00:00] remote stdout: interface: wg_paid HIT 209: listening port: 51830 HIT 213: [2026-07-04T15:58:58.786321+00:00] remote stdout: interface: wg_paid HIT 216: listening port: 51830 HIT 222: [2026-07-04T16:01:58.206415+00:00] remote stdout: interface: wg_paid HIT 225: listening port: 51830 HIT 232: [2026-07-04T16:01:58.417209+00:00] remote stdout: interface: wg_paid HIT 235: listening port: 51830 HIT 246: [2026-07-04T16:02:02.206011+00:00] remote stdout: interface: wg_paid HIT 249: listening port: 51830 HIT 252: [2026-07-04T16:02:02.421568+00:00] remote stdout: interface: wg_paid HIT 255: listening port: 51830 HIT 260: [2026-07-04T16:05:36.981360+00:00] remote stdout: interface: wg_paid HIT 263: listening port: 51830 HIT 267: [2026-07-04T16:06:57.870563+00:00] remote stdout: interface: wg_paid HIT 270: listening port: 51830 HIT 274: [2026-07-04T16:07:28.907526+00:00] remote stdout: interface: wg_paid HIT 277: listening port: 51830 HIT 281: [2026-07-04T16:08:03.909250+00:00] remote stdout: interface: wg_paid HIT 284: listening port: 51830 HIT 288: [2026-07-04T16:08:38.882492+00:00] remote stdout: interface: wg_paid HIT 291: listening port: 51830 HIT 295: [2026-07-04T16:09:13.896288+00:00] remote stdout: interface: wg_paid HIT 298: listening port: 51830 HIT 302: [2026-07-04T16:09:48.923712+00:00] remote stdout: interface: wg_paid HIT 305: listening port: 51830 HIT 309: [2026-07-04T16:10:23.873399+00:00] remote stdout: interface: wg_paid HIT 312: listening port: 51830 HIT 316: [2026-07-04T16:10:55.370577+00:00] remote stdout: interface: wg_paid HIT 319: listening port: 51830 HIT 323: [2026-07-04T16:11:31.534565+00:00] remote stdout: interface: wg_paid HIT 326: listening port: 51830 ### VM121_FILE /opt/wg-access/agent/state/active-peers.json hit_lines=1 proposed_change_lines=0 HIT 2: "node_id": "ddn-test", ### VM121_FILE /opt/wg-access/backups/step024a/admin.py.20260704-174718.bak hit_lines=11 proposed_change_lines=0 HIT 65: node_id: str HIT 87: node_id: str = "ddn-test" HIT 96: node_id: str HIT 126: tunnel_ip = next_tunnel_ip(db, payload.node_id) HIT 133: node_id=payload.node_id, HIT 144: node_id=payload.node_id, HIT 168: node_id=peer.node_id, HIT 181: node_id: str HIT 198: node_id=peer.node_id, HIT 216: node_id=peer.node_id, HIT 226: node_id: str ### VM121_FILE /opt/wg-access/backups/step022a/dev.py.20260704-163658.bak hit_lines=8 proposed_change_lines=0 HIT 24: node_id: str = "ddn-test" HIT 66: def next_tunnel_ip(db: Session, node_id: str) -> str: HIT 84: Peer.node_id == node_id, HIT 104: endpoint = os.environ.get("WG_CLIENT_ENDPOINT", "").strip() HIT 111: raise RuntimeError("WG_CLIENT_ENDPOINT is not configured") HIT 143: tunnel_ip = next_tunnel_ip(db, payload.node_id) HIT 151: node_id=payload.node_id, HIT 162: node_id=payload.node_id, ### VM121_FILE /opt/wg-access/backups/step022a/wireguard.py.20260704-163658.bak hit_lines=4 proposed_change_lines=0 HIT 41: def next_tunnel_ip(db: Session, node_id: str) -> str: HIT 59: Peer.node_id == node_id, HIT 79: endpoint = os.environ.get("WG_CLIENT_ENDPOINT", "").strip() HIT 86: raise RuntimeError("WG_CLIENT_ENDPOINT is not configured") ### VM121_FILE /opt/wg-access/backups/step021b/admin.py.20260704-162930.bak hit_lines=5 proposed_change_lines=0 HIT 59: node_id: str HIT 79: node_id: str HIT 96: node_id=peer.node_id, HIT 114: node_id=peer.node_id, HIT 124: node_id: str ### VM121_FILE /opt/wg-access/backups/step021b/dev.py.20260704-162930.bak hit_lines=8 proposed_change_lines=0 HIT 24: node_id: str = "ddn-test" HIT 66: def next_tunnel_ip(db: Session, node_id: str) -> str: HIT 84: Peer.node_id == node_id, HIT 104: endpoint = os.environ.get("WG_CLIENT_ENDPOINT", "").strip() HIT 111: raise RuntimeError("WG_CLIENT_ENDPOINT is not configured") HIT 143: tunnel_ip = next_tunnel_ip(db, payload.node_id) HIT 151: node_id=payload.node_id, HIT 162: node_id=payload.node_id, ### VM121_FILE /opt/wg-access/backups/step025a/admin.py.20260704-180655.bak hit_lines=13 proposed_change_lines=0 HIT 66: node_id: str HIT 88: node_id: str = "ddn-test" HIT 97: node_id: str HIT 127: tunnel_ip = next_tunnel_ip(db, payload.node_id) HIT 134: node_id=payload.node_id, HIT 145: node_id=payload.node_id, HIT 169: node_id=peer.node_id, HIT 182: node_id: str HIT 199: node_id=peer.node_id, HIT 217: node_id=peer.node_id, HIT 227: node_id: str HIT 261: node_id: str HIT 275: node_id: str ### VM121_FILE /opt/wg-access/backups/step026a/admin.py.20260704-182045.bak hit_lines=14 proposed_change_lines=0 HIT 66: node_id: str HIT 88: node_id: str = "ddn-test" HIT 97: node_id: str HIT 127: tunnel_ip = next_tunnel_ip(db, payload.node_id) HIT 134: node_id=payload.node_id, HIT 145: node_id=payload.node_id, HIT 169: node_id=peer.node_id, HIT 217: node_id=peer.node_id, HIT 248: node_id: str HIT 265: node_id=peer.node_id, HIT 283: node_id=peer.node_id, HIT 293: node_id: str HIT 327: node_id: str HIT 341: node_id: str ### VM121_FILE /opt/wg-access/backups/step023a/dev.py.20260704-172733.bak hit_lines=4 proposed_change_lines=0 HIT 23: node_id: str = "ddn-test" HIT 48: tunnel_ip = next_tunnel_ip(db, payload.node_id) HIT 56: node_id=payload.node_id, HIT 67: node_id=payload.node_id, ### VM121_FILE /opt/wg-access/backups/step018b/peers.20260704-155255.sql hit_lines=5 proposed_change_lines=0 HIT 32: node_id character varying(64) NOT NULL, HIT 49: COPY public.peers (id, user_id, node_id, public_key, preshared_key, tunnel_ip, paid_until, enabled, created_at, disabled_at) FROM stdin; HIT 73: ADD CONSTRAINT uq_peers_node_tunnel_ip UNIQUE (node_id, tunnel_ip); HIT 92: -- Name: ix_peers_node_id; Type: INDEX; Schema: public; Owner: wg_access HIT 95: CREATE INDEX ix_peers_node_id ON public.peers USING btree (node_id); ### VM121_FILE /opt/wg-access/backups/step018b/dev.py.20260704-155255.bak hit_lines=8 proposed_change_lines=0 HIT 23: node_id: str = "ddn-test" HIT 65: def next_tunnel_ip(db: Session, node_id: str) -> str: HIT 68: select(func.count()).select_from(Peer).where(Peer.node_id == node_id) HIT 75: endpoint = os.environ.get("WG_CLIENT_ENDPOINT", "").strip() HIT 82: raise RuntimeError("WG_CLIENT_ENDPOINT is not configured") HIT 114: tunnel_ip = next_tunnel_ip(db, payload.node_id) HIT 122: node_id=payload.node_id, HIT 133: node_id=payload.node_id, ### VM121_FILE /opt/wg-access/backups/step018b/core.py.20260704-155437.bak hit_lines=3 proposed_change_lines=0 HIT 84: UniqueConstraint("node_id", "tunnel_ip", name="uq_peers_node_tunnel_ip"), HIT 90: node_id: Mapped[str] = mapped_column(String(64), default="ddn-test", nullable=False, index=True) HIT 109: node_id: Mapped[str] = mapped_column(String(64), nullable=False, index=True) ### VM121_FILE /opt/wg-access/tmp/mgts-smoke-20260706-184120/client.mgts.conf hit_lines=1 proposed_change_lines=0 HIT 9: Endpoint = 10.71.100.1:51830 ### VM121_FILE /opt/wg-access/tmp/mgts-smoke-20260706-184120/client.conf hit_lines=1 proposed_change_lines=0 HIT 8: Endpoint = 192.168.30.1:51830 ### VM121_FILE /opt/wg-access/tmp/mgts-smoke-20260706-184120/create.json hit_lines=1 proposed_change_lines=0 HIT 1: {"user_id":"13783bf9-94bb-4c90-b1c6-685a956a5c43","subscription_id":"8adb06a9-713a-46b0-8759-d11c28a797fc","peer_id":"3d03a7a2-c009-48a4-b6ff-214326d26fc0","job_id":"814ba665-f6e5-4ba4-b1ba-8af1ec4954e6","node_id":"ddn-test","tunnel_ip":"10.253.1.10","paid_until":"2026-08-05T18:41:20.288079Z","private_key":"","public_key":"zUUEdc+Lac9C6fmMDVosuO3ZIYHIUDWi34UVgdjhbCU=","preshared_key":"jDmX4j1ipVr4r45cRb4nbKaeBqQYQeeaCpsBG4U2sMQ=","client_config":"[Interface]\nPrivateKey = ### VM121_FILE /opt/wg-access/tmp/mgts-smoke-20260706-183921/peers-before.json hit_lines=1 proposed_change_lines=0 HIT 1: [{"id":"0f808400-74ad-437b-a716-c6389aa3f057","user_id":"2cc7ce32-acc1-4258-92c6-bccd2febb7b6","node_id":"ddn-test","public_key":"Y9RXkNshIhljMAjSX9nyGZQLephRVV0TfIZfMhFn6R0=","tunnel_ip":"10.253.1.10","paid_until":"2026-07-03T10:37:18.258073Z","enabled":false,"created_at":"2026-07-05T10:37:15.949762Z"},{"id":"28aefe9e-25b0-434a-aedc-a4df15609e98","user_id":"a1957370-4921-4639-b4a9-6e6e05ab8c95","node_id":"ddn-test","public_key":"4U6GMvepAeuuXDaGryZQ9RSeomQfBCBbuKRdvNqbIQw=","tunnel_ip":"10.253.1.10","paid_until":"2026-07-03T10:35:48.458083Z","enabled":false,"created_at":"2026-07-05T10:35:47.463427Z"},{"id":"40b76a1d-e1ef-4a26-ac11-f39043a6a190","user_id":"07f03547-19ee-4068-ba4b-3ba504490337","node_id":"ddn-test","public_key":"7unzXkfaw3lD0tiSVT9UlMWesbD2OrzuT/CwLc10klE=","tunnel_ip":"10.253.1.10","paid_until":"2026-07-03T10:30:53.275935Z","enabled":false,"created_at":"2026-07-05T10:30:52.304156Z"},{"id":"f45a349d-25a7-426d-b88a-4479b28aec18","user_id":"7c1eb9f8-f220-43ae-840b-14f4cb362c1e","node_id":"ddn-test","public_key":"239TtHnxaJefv7kKJeNOVjW6YLchjRcTdctI3nJrAXE=","tunnel_ip":"10.253.1.10","paid_until":"2026-07-04T18:20:43.380875Z","enabled":false,"created_at":"2026-07-04T18:21:22.899633Z"},{"id":"3460b486-358c-44d6-8f47-c960d6254e3a","user_id":"1b42ec72-1f39-483d-ae1e-85669d3ecad2","node_id":"ddn-test","public_key":"dYuBNktWxl/PIqV49T9BIiHIvP4ZumswWZIEFD/Cwxg=","tunnel_ip":"10.253.1.10","paid_until":"2026-08-03T18:07:51.577444Z","enabled":false,"created_at":"2026-07-04T18:07:51.596325Z"},{"id":"486ee88e-2515-4203-8541-44f89cdaba89","user_id":"cd6b00a0-8cc5-48df-8413-8e645505db8c","node_id":"ddn-test","public_key":"WkjrGK7JKsYkhzFz5Bggunzlw5BNY+WxkcYp4D7IulA=","tunnel_ip":"10.253.1.10","paid_until":"2026-08-03T17:28:05.654224Z","enabled":false,"created_at":"2026-07-04T17:28:05.667811Z"},{"id":"da134a09-caa8-4209-bbfa-93dd06f310fb","user_id":"ead942f1-f354-496a-b2e6-857604fea5c3","node_id":"ddn-test","public_key":"OtlMSSUslhQufF939tNN3quNVY0Y+bqmfyohE1K6sBE=","tunnel_ip":"10.253.1.10","paid_until":"2026-09-02T17:22:24.372601Z","enabled":false,"created_at":"2026-07-04T17:22:24.373856Z"},{"id":"966f8262-b25c-4a13-ae1d-694b0378910a","user_id":"2096c7ba-76f1-4c39-8bb4-53d629e23387","node_id":"ddn-test","public_key":"lAQxl4ykPcSpXxFNfz+pGS5Pn+im/uXlVmc+fd3UPB8=","tunnel_ip":"10.253.1.10","paid_until":"2026-09-02T16:38:53.198957Z","enabled":false,"created_at":"2026-07-04T16:38:53.204965Z"},{"id":"00fde00e-a169-4397-841f-5cc99de475d5","user_id":"3303b0a8-450a-4154-9322-9ddfc5757208","node_id":"ddn-test","public_key":"H+yLpZTzxVq4o9RSD6b70hu6JTIY5WkH6Tx74qP1dwM=","tunnel_ip":"10.253.1.10","paid_until":"2026-09-02T16:32:01.766833Z","enabled":false,"created_at":"2026-07-04T16:32:01.782547Z"},{"id":"267835b6-84b6-4527-bd47-eee963e7a5c9","user_id":"6a7eeddb-d012-403c-bf31-ea29a82c1d13","node_id":"ddn-test","public_key":"gXUwVRUraYFaUDv1BJ6GdxbZi6IoliYNBUe8wYRNERU=","tunnel_ip":"10.253.1.10","paid_until":"2026-09-02T16:19:03.151534Z","enabled":false,"created_at":"2026-07-04T16:19:03.152686Z"},{"id":"6a5f1655-8ebe-435e-bba6-1af2412d40c2","user_id":"46a582e8-3822-4686-b9b9-8751061fde97","node_id":"ddn-test","public_key":"TuuRNB7urYUrpRq9gHqqMlqWfte0jSJooLXjZIIYKjs=","tunnel_ip":"10.253.1.10","paid_until":"2026-09-02T16:01:57.735658Z","enabled":false,"created_at":"2026-07-04T16:01:57.736841Z"},{"id":"9298ec04-26cf-44a7-8079-7a13664612fa","user_id":"9bc16072-f8e5-489f-8817-c6778237d6d0","node_id":"ddn-test","public_key":"CJMx+fPoiz5TUmUHKF7JcKo9IrxBZZMEDk7aS/Temwk=","tunnel_ip":"10.253.1.10","paid_until":"2026-09-02T15:56:30.168829Z","enabled":false,"created_at":"2026-07-04T15:56:30.178510Z"},{"id":"1b19ed83-1cad-4d57-be9f-fded5270213c","user_id":"2109fe84-fde0-4856-8268-030a43112782","node_id":"ddn-test","public_key":"mh6GsB55dOEZZCxiWy5PHGxcNSRcBLLNAUfgq4NV3jg=","tunnel_ip":"10.253.1.16","paid_until":"2026-09-02T15:26:17.089248Z","enabled":false,"created_at":"2026-07-04T15:26:17.090574Z"},{"id":"13543224-39f7-4cfc-917d-66a16e2e0e55","user_id":"d360d32e-c7db-4688-846b-ecef626f12db","node_id":"ddn-test","public_key":"cMqUn9gKKZo0oh7vNotjs7s/UtuKVbl081arn6BPKik=","tunnel_ip":"10.253.1.15","paid_until":"2026-09-02T15:17:46.085909Z","enabled":false,"created_at":"2026-07-04T15:17:46.096446Z"},{"id":"813515db-bf25-46c9-bc83-c9c45d51ba68","user_id":"ade5215e-4229-4e83-9012-f09f4691b4e6","node_id":"ddn-test","public_key":"TdYIwRgGjStiQW1gyZjgsaPP+/6WE1U0NcmK0eVEVXM=","tunnel_ip":"10.253.1.14","paid_until":"2026-09-02T13:28:02.954738Z","enabled":false,"created_at":"2026-07-04T13:28:02.964577Z"},{"id":"754b76bd-0e69-4184-ac0b-a9c5706dbf19","user_id":"8c8e9a3f-740d-4f24-baa1-801904b4b50e","node_id":"ddn-test","public_key":"pub_cdnODJUM3pZBIS_Z3dOyBsHVi-Jq-4j_WiDuve84qDw","tunnel_ip":"10.253.1.13","paid_until":"2026-08-03T10:41:13.816901Z","enabled":false,"created_at":"2026-07-04T10:41:13.818018Z"},{"id":"4b39aa87-4b59-4c71-950b-cf2dca3e606f","user_id":"1f0b0e4a-e3ea-4d11-89d1-18d0db370ba7","node_id":"ddn-test","public_key":"pub_BFUhgsp-ejx-tAwttmNzzPupN-c0-5sSS3YRaevqpes","tunnel_ip":"10.253.1.12","paid_until":"2026-08-03T10:37:34.525170Z","enabled":false,"created_at":"2026-07-04T10:37:34.530114Z"},{"id":"37361fae-0ad5-4a7a-8096-a59e1dde2d78","user_id":"abe41583-990e-4d08-9572-a586acaf816f","node_id":"ddn-test","public_key":"pub_X1c2s8NhHk-msYA4Pe25gvmnZmhSRSsmrVob-exBUaw","tunnel_ip":"10.253.1.11","paid_until":"2026-09-02T10:28:54.187046Z","enabled":false,"created_at":"2026-07-04T10:28:54.188090Z"},{"id":"1c152b56-8f35-4bee-bdd7-154ff551077e","user_id":"10de9cee-ffc9-4065-96fe-401ec593e250","node_id":"ddn-test","public_key":"pub_2aWI36SAPwbgiUQLZCVeTmoOAPSd2gjMX_uVNgYN1ag","tunnel_ip":"10.253.1.10","paid_until":"2026-09-02T10:28:02.539201Z","enabled":false,"created_at":"2026-07-04T10:28:02.545211Z"}] ### VM121_FILE /root/.bash_history hit_lines=26 proposed_change_lines=0 HIT 233: Endpoint = 10.71.100.1:51830 HIT 246: MGTS wg_paid production lifecycle and E2E routing smoke passed. HIT 266: REMOTE_WG_INTERFACE=wg_paid HIT 279: -> agent executed runtime wg set on MGTS VM100 wg_paid HIT 280: -> peer appeared on MGTS VM100 wg_paid HIT 291: endpoint used for internal smoke: 10.71.100.1:51830 HIT 302: 1.1.1.1 from 10.253.1.10 iif wg_paid mark 0x20000 HIT 305: 77.88.8.8 from 10.253.1.10 iif wg_paid mark 0x10000 HIT 316: -> peer removed from MGTS VM100 wg_paid HIT 319: wg show wg_paid allowed-ips HIT 327: old WG_CLIENT_ENDPOINT: 192.168.30.1:51830 HIT 333: WG_CLIENT_ENDPOINT=10.71.100.1:51830 HIT 341: Endpoint = 10.71.100.1:51830 HIT 348: WG_CLIENT_ENDPOINT=10.71.100.1:51830 HIT 352: VM101 DNAT UDP 51830 -> MGTS VM100 10.71.100.1:51830 HIT 371: WG_CLIENT_ENDPOINT=10.71.100.1:51830 HIT 375: VM101 DNAT UDP 51830 -> MGTS VM100 10.71.100.1:51830 HIT 399: MGTS wg_paid production lifecycle and E2E routing smoke passed. HIT 404: REMOTE_WG_INTERFACE=wg_paid HIT 416: -> agent executed runtime wg set on MGTS VM100 wg_paid HIT 417: -> peer appeared on MGTS VM100 wg_paid HIT 422: endpoint used for internal smoke: 10.71.100.1:51830 HIT 441: -> peer removed from MGTS VM100 wg_paid HIT 447: WG_CLIENT_ENDPOINT=10.71.100.1:51830 HIT 453: internal smoke endpoint 10.71.100.1:51830, HIT 457: Replace WG_CLIENT_ENDPOINT=10.71.100.1:51830 with real external MGTS DNS/IP endpoint after MGTS static IP is known. === VM121 runtime WG endpoints === interface: wg-mgts public key: DH9S3NewxZZjIhlshl9saO+5EdXafebWjxSkzNBkZEU= private key: listening port: 39845 peer: uTNh8zWnLbORIY2DZeKJMV+ygB+ii69hmDckI/T3h3Y= endpoint: 95.165.105.4:51820 allowed ips: 10.71.100.0/24, 10.250.100.1/32 latest handshake: 1 minute, 44 seconds ago transfer: 167.64 KiB received, 1.27 MiB sent persistent keepalive: every 25 seconds vm121_dryrun_done=1 === STEP_034E1 RESULT === dns_ok_lines=10 local_candidate_or_change_lines=19 vm121_candidate_or_change_lines=71 old_or_temp_admin_endpoint_lines=13 wgpay_endpoint_related_lines=270 vm121_dryrun_done_lines=1 package=/opt/router-ops/apply-packages/20260708-114540_step034e1_xsmap_endpoint_dryrun decision=PASS_XSMAP_ENDPOINT_DRYRUN_READY