=== STEP_034F2 PRE TEST PEER SAFETY NODE MINI === timestamp=20260708-120310 mode=backup + read-only API inventory + package only final_wg_client_endpoint=wg-studio.secret-studio.ru:51830 forbidden: peer creation, peer disable, wg reload, postgres recreate === host === wg-access-dev Wed Jul 8 12:03:11 UTC 2026 === containers === NAMES CONTAINER ID STATUS PORTS wgaccess-backend 0f265f639e32 Up 5 minutes 0.0.0.0:18080->8000/tcp wgaccess-postgres 91c0111d2bca Up 41 hours (healthy) 127.0.0.1:15432->5432/tcp backend_container=wgaccess-backend postgres_container=wgaccess-postgres === backend env endpoint === WG_CLIENT_ALLOWED_IPS=0.0.0.0/0 WG_CLIENT_ENDPOINT=wg-studio.secret-studio.ru:51830 WG_CLIENT_FIRST_IP=10.253.1.10 WG_CLIENT_POOL_CIDR=10.253.0.0/16 WG_SERVER_PUBLIC_KEY=FD1J+KVZ965pCjgtO0YWxJsKANY9uz6v1P54JLkiZzY= === health === {"status":"ok","service":"wg-access-backend","environment":"dev"} {"status":"ok","db":1} === peers/jobs API save === peers_curl_rc=0 jobs_curl_rc=0 === peers/jobs summary === peer_count 20 PEER_NODE_COUNT ddn-test 20 job_count 36 JOB_NODE_COUNT ddn-test 36 PEER_SUMMARY id=3460b486-358c-44d6-8f47-c960d6254e3a node_id=ddn-test tunnel_ip=10.253.1.10 enabled=False PEER_SUMMARY id=486ee88e-2515-4203-8541-44f89cdaba89 node_id=ddn-test tunnel_ip=10.253.1.10 enabled=False PEER_SUMMARY id=da134a09-caa8-4209-bbfa-93dd06f310fb node_id=ddn-test tunnel_ip=10.253.1.10 enabled=False PEER_SUMMARY id=966f8262-b25c-4a13-ae1d-694b0378910a node_id=ddn-test tunnel_ip=10.253.1.10 enabled=False PEER_SUMMARY id=00fde00e-a169-4397-841f-5cc99de475d5 node_id=ddn-test tunnel_ip=10.253.1.10 enabled=False PEER_SUMMARY id=267835b6-84b6-4527-bd47-eee963e7a5c9 node_id=ddn-test tunnel_ip=10.253.1.10 enabled=False PEER_SUMMARY id=6a5f1655-8ebe-435e-bba6-1af2412d40c2 node_id=ddn-test tunnel_ip=10.253.1.10 enabled=False PEER_SUMMARY id=9298ec04-26cf-44a7-8079-7a13664612fa node_id=ddn-test tunnel_ip=10.253.1.10 enabled=False PEER_SUMMARY id=1b19ed83-1cad-4d57-be9f-fded5270213c node_id=ddn-test tunnel_ip=10.253.1.16 enabled=False PEER_SUMMARY id=13543224-39f7-4cfc-917d-66a16e2e0e55 node_id=ddn-test tunnel_ip=10.253.1.15 enabled=False PEER_SUMMARY id=813515db-bf25-46c9-bc83-c9c45d51ba68 node_id=ddn-test tunnel_ip=10.253.1.14 enabled=False PEER_SUMMARY id=754b76bd-0e69-4184-ac0b-a9c5706dbf19 node_id=ddn-test tunnel_ip=10.253.1.13 enabled=False PEER_SUMMARY id=4b39aa87-4b59-4c71-950b-cf2dca3e606f node_id=ddn-test tunnel_ip=10.253.1.12 enabled=False PEER_SUMMARY id=37361fae-0ad5-4a7a-8096-a59e1dde2d78 node_id=ddn-test tunnel_ip=10.253.1.11 enabled=False PEER_SUMMARY id=1c152b56-8f35-4bee-bdd7-154ff551077e node_id=ddn-test tunnel_ip=10.253.1.10 enabled=False JOB_SUMMARY id=279dd804-7951-47a0-876a-1262f27aa629 node_id=ddn-test action=disable_peer peer_id=None status=completed JOB_SUMMARY id=15b8a865-a437-4222-9f5b-6427aeaf75b3 node_id=ddn-test action=enable_peer peer_id=None status=completed JOB_SUMMARY id=6e273fdf-781f-4992-ad42-4bf83bc7b6f5 node_id=ddn-test action=disable_peer peer_id=None status=completed JOB_SUMMARY id=bb71b4cd-a615-45f5-9135-4aa0efca9cb7 node_id=ddn-test action=enable_peer peer_id=None status=completed JOB_SUMMARY id=9057b4c7-68b5-4b9e-8cf0-f624a07e30d0 node_id=ddn-test action=disable_peer peer_id=None status=completed JOB_SUMMARY id=1912c96e-bda5-4af1-a9ea-9a81a27344fd node_id=ddn-test action=enable_peer peer_id=None status=completed JOB_SUMMARY id=8b21d24d-d575-4224-a281-bd2456cccb37 node_id=ddn-test action=disable_peer peer_id=None status=completed JOB_SUMMARY id=cb23b57d-7ec7-4804-a045-495a23705f5d node_id=ddn-test action=enable_peer peer_id=None status=completed JOB_SUMMARY id=d607c313-cacd-4650-9d39-47c7d43817d6 node_id=ddn-test action=disable_peer peer_id=None status=completed JOB_SUMMARY id=652f82c5-4243-4618-bf17-ccfea3e44d54 node_id=ddn-test action=disable_peer peer_id=None status=completed JOB_SUMMARY id=fb2c12a5-3f22-4c55-94f1-091240e0019a node_id=ddn-test action=disable_peer peer_id=None status=completed JOB_SUMMARY id=bda6e96e-ef56-44f6-8bc0-867b91ac59bb node_id=ddn-test action=enable_peer peer_id=None status=completed JOB_SUMMARY id=7a8fe618-7dc9-4eea-80e7-c4fd09ac2172 node_id=ddn-test action=enable_peer peer_id=None status=completed JOB_SUMMARY id=ca3e15c1-91ba-435c-8a40-37faa9e101c9 node_id=ddn-test action=enable_peer peer_id=None status=completed JOB_SUMMARY id=8594e558-1c0d-4c49-872e-a1c47dc0f377 node_id=ddn-test action=disable_peer peer_id=None status=completed JOB_SUMMARY id=a16ef565-d195-4302-acb3-c7d963b2f3a5 node_id=ddn-test action=enable_peer peer_id=None status=completed JOB_SUMMARY id=338006fa-9b17-45ac-b53f-bc2383421e70 node_id=ddn-test action=enable_peer peer_id=None status=completed JOB_SUMMARY id=7196bb14-b3ba-4aaf-85f8-aa393fe1b4dc node_id=ddn-test action=enable_peer peer_id=None status=completed JOB_SUMMARY id=cf0a4771-2fc3-4ae1-9a11-c6417057d048 node_id=ddn-test action=enable_peer peer_id=None status=completed JOB_SUMMARY id=d2fe3317-bb1e-452e-ab29-6bdf6364c817 node_id=ddn-test action=enable_peer peer_id=None status=completed === node_id hints === /opt/wg-access/STATUS-STEP-005_API_DB_OK.txt:32: GET /agent/jobs?node_id=... /opt/wg-access/STATUS-STEP-005_API_DB_OK.txt:33: POST /agent/jobs/{job_id}/start /opt/wg-access/STATUS-STEP-005_API_DB_OK.txt:34: POST /agent/jobs/{job_id}/complete /opt/wg-access/STATUS-STEP-005_API_DB_OK.txt:35: POST /agent/jobs/{job_id}/fail /opt/wg-access/STATUS-STEP-006_AGENT_PULL_API_OK.txt:8: - GET /agent/jobs?node_id=... /opt/wg-access/STATUS-STEP-006_AGENT_PULL_API_OK.txt:9: - POST /agent/jobs/{job_id}/start /opt/wg-access/STATUS-STEP-006_AGENT_PULL_API_OK.txt:10: - POST /agent/jobs/{job_id}/complete /opt/wg-access/STATUS-STEP-006_AGENT_PULL_API_OK.txt:11: - POST /agent/jobs/{job_id}/fail /opt/wg-access/STATUS-STEP-006_AGENT_PULL_API_OK.txt:14: - pending job fetched by node_id /opt/wg-access/STATUS-STEP-010_AGENT_SSH_TO_VM100_OK.txt:18: ip -br addr show wg_paid /opt/wg-access/STATUS-STEP-010_AGENT_SSH_TO_VM100_OK.txt:19: wg show wg_paid /opt/wg-access/STATUS-STEP-010_AGENT_SSH_TO_VM100_OK.txt:23: interface: wg_paid /opt/wg-access/STATUS-STEP-010_AGENT_SSH_TO_VM100_OK.txt:31: - add real peers to VM100 wg_paid /opt/wg-access/STATUS-STEP-011_MANUAL_WG_SET_VM100_OK.txt:14: interface: wg_paid /opt/wg-access/STATUS-STEP-011_MANUAL_WG_SET_VM100_OK.txt:18: 2. Added peer to VM100 wg_paid using SSH + wg set. /opt/wg-access/STATUS-STEP-011_MANUAL_WG_SET_VM100_OK.txt:19: 3. Confirmed peer appeared in wg show wg_paid: /opt/wg-access/STATUS-STEP-011_MANUAL_WG_SET_VM100_OK.txt:22: wg set wg_paid peer remove /opt/wg-access/STATUS-STEP-011_MANUAL_WG_SET_VM100_OK.txt:23: 5. Confirmed wg_paid is clean again. /opt/wg-access/STATUS-STEP-011_MANUAL_WG_SET_VM100_OK.txt:25:Current VM100 wg_paid state: /opt/wg-access/STATUS-STEP-012_REAL_AGENT_PROVISION_VM100_OK.txt:13: 5. Agent executed wg set on VM100 wg_paid. /opt/wg-access/STATUS-STEP-012_REAL_AGENT_PROVISION_VM100_OK.txt:14: 6. Peer appeared in VM100 wg_paid. /opt/wg-access/STATUS-STEP-012_REAL_AGENT_PROVISION_VM100_OK.txt:32: interface: wg_paid /opt/wg-access/STATUS-STEP-012_REAL_AGENT_PROVISION_VM100_OK.txt:37: tunnel_ip: 10.253.1.14/32 /opt/wg-access/STATUS-STEP-012_REAL_AGENT_PROVISION_VM100_OK.txt:44: One real test peer remains active on VM100 wg_paid. /opt/wg-access/STATUS-STEP-013_WG_HANDSHAKE_VM121_TO_VM100_OK.txt:17: interface: wg_paid /opt/wg-access/STATUS-STEP-013_WG_HANDSHAKE_VM121_TO_VM100_OK.txt:29: - VM100 wg show wg_paid showed endpoint 192.168.30.83: /opt/wg-access/STATUS-STEP-013_WG_HANDSHAKE_VM121_TO_VM100_OK.txt:30: - VM100 wg show wg_paid showed latest handshake /opt/wg-access/STATUS-STEP-014_AGENT_RECONCILE_SYNC_OK.txt:9: VM100 wg_paid peers added with runtime wg set are not persistent across reboot, /opt/wg-access/STATUS-STEP-014_AGENT_RECONCILE_SYNC_OK.txt:14: GET /agent/peers?node_id=ddn-test /opt/wg-access/STATUS-STEP-014_AGENT_RECONCILE_SYNC_OK.txt:19: - tunnel_ip /opt/wg-access/STATUS-STEP-014_AGENT_RECONCILE_SYNC_OK.txt:26: wg show wg_paid allowed-ips /opt/wg-access/STATUS-STEP-014_AGENT_RECONCILE_SYNC_OK.txt:28: wg set wg_paid peer ... preshared-key ... allowed-ips ... /opt/wg-access/STATUS-STEP-014_AGENT_RECONCILE_SYNC_OK.txt:33: 1. Manually removed real peer from VM100 wg_paid. /opt/wg-access/STATUS-STEP-014_AGENT_RECONCILE_SYNC_OK.txt:39: tunnel_ip: 10.253.1.14/32 /opt/wg-access/STATUS-STEP-014_AGENT_RECONCILE_SYNC_OK.txt:44: sync set peer tunnel_ip=10.253.1.14 /opt/wg-access/STATUS-STEP-014_AGENT_RECONCILE_SYNC_OK.txt:50: - VM100 wg_paid contains the enabled real peer. /opt/wg-access/STATUS-STEP-015_DISABLE_DEPROVISION_OK.txt:10: POST /admin/peers/{peer_id}/disable /opt/wg-access/STATUS-STEP-015_DISABLE_DEPROVISION_OK.txt:20: tunnel_ip /opt/wg-access/STATUS-STEP-015_DISABLE_DEPROVISION_OK.txt:23: peer_id: 813515db-bf25-46c9-bc83-c9c45d51ba68 /opt/wg-access/STATUS-STEP-015_DISABLE_DEPROVISION_OK.txt:25: tunnel_ip: 10.253.1.14 /opt/wg-access/STATUS-STEP-015_DISABLE_DEPROVISION_OK.txt:32: - agent removed runtime peer from VM100 wg_paid /opt/wg-access/STATUS-STEP-015_DISABLE_DEPROVISION_OK.txt:35: - VM100 wg_paid has no peers after agent run /opt/wg-access/STATUS-STEP-015_DISABLE_DEPROVISION_OK.txt:41: wg_paid is up /opt/wg-access/STATUS-STEP-015_DISABLE_DEPROVISION_OK.txt:42: wg_paid has no peers /opt/wg-access/STATUS-STEP-016_CLIENT_CONFIG_RESPONSE_OK.txt:30: tunnel_ip: 10.253.1.15/32 /opt/wg-access/STATUS-STEP-016_CLIENT_CONFIG_RESPONSE_OK.txt:32: job_id: ca3e15c1-91ba-435c-8a40-37faa9e101c9 /opt/wg-access/STATUS-STEP-016_CLIENT_CONFIG_RESPONSE_OK.txt:40: wg_paid contains peer: /opt/wg-access/STATUS-STEP-016_CLIENT_CONFIG_RESPONSE_OK.txt:45: wg_paid is up /opt/wg-access/STATUS-STEP-017_GENERATED_CLIENT_CONFIG_HANDSHAKE_OK.txt:14: 5. Agent provisioned the peer to VM100 wg_paid. /opt/wg-access/STATUS-STEP-017_GENERATED_CLIENT_CONFIG_HANDSHAKE_OK.txt:21: peer_id: 1b19ed83-1cad-4d57-be9f-fded5270213c /opt/wg-access/STATUS-STEP-017_GENERATED_CLIENT_CONFIG_HANDSHAKE_OK.txt:22: job_id: 7a8fe618-7dc9-4eea-80e7-c4fd09ac2172 /opt/wg-access/STATUS-STEP-017_GENERATED_CLIENT_CONFIG_HANDSHAKE_OK.txt:23: tunnel_ip: 10.253.1.16/32 /opt/wg-access/STATUS-STEP-017_GENERATED_CLIENT_CONFIG_HANDSHAKE_OK.txt:40: VM100 wg_paid is up. /opt/wg-access/STATUS-STEP-017_GENERATED_CLIENT_CONFIG_HANDSHAKE_OK.txt:44: VM100 wg_paid has both peers. /opt/wg-access/STATUS-STEP-018_POOL_16_AND_REUSE_ALLOCATOR_OK.txt:9: wg_paid address changed from: /opt/wg-access/STATUS-STEP-018_POOL_16_AND_REUSE_ALLOCATOR_OK.txt:15: 10.253.0.0/16 dev wg_paid /opt/wg-access/STATUS-STEP-018_POOL_16_AND_REUSE_ALLOCATOR_OK.txt:17: After wg_paid reload runtime peers disappeared as expected. /opt/wg-access/STATUS-STEP-018_POOL_16_AND_REUSE_ALLOCATOR_OK.txt:22: uq_peers_node_tunnel_ip UNIQUE (node_id, tunnel_ip) /opt/wg-access/STATUS-STEP-018_POOL_16_AND_REUSE_ALLOCATOR_OK.txt:25: uq_peers_node_tunnel_ip_enabled /opt/wg-access/STATUS-STEP-018_POOL_16_AND_REUSE_ALLOCATOR_OK.txt:26: ON peers (node_id, tunnel_ip) /opt/wg-access/STATUS-STEP-018_POOL_16_AND_REUSE_ALLOCATOR_OK.txt:30: Disabled historical peers may keep old tunnel_ip values. /opt/wg-access/STATUS-STEP-018_POOL_16_AND_REUSE_ALLOCATOR_OK.txt:31: Enabled peers cannot duplicate tunnel_ip on the same node. /opt/wg-access/STATUS-STEP-018_POOL_16_AND_REUSE_ALLOCATOR_OK.txt:34: backend/app/api/dev.py next_tunnel_ip() changed from count-based allocation /opt/wg-access/STATUS-STEP-018_POOL_16_AND_REUSE_ALLOCATOR_OK.txt:46: backend/app/models/core.py old global tunnel_ip UniqueConstraint removed/commented. /opt/wg-access/STATUS-STEP-018_POOL_16_AND_REUSE_ALLOCATOR_OK.txt:51: tunnel_ip: 10.253.1.10 /opt/wg-access/STATUS-STEP-018_POOL_16_AND_REUSE_ALLOCATOR_OK.txt:55: peer_id: 9298ec04-26cf-44a7-8079-7a13664612fa /opt/wg-access/STATUS-STEP-018_POOL_16_AND_REUSE_ALLOCATOR_OK.txt:56: job_id: bda6e96e-ef56-44f6-8bc0-867b91ac59bb /opt/wg-access/STATUS-STEP-018_POOL_16_AND_REUSE_ALLOCATOR_OK.txt:57: tunnel_ip: 10.253.1.10 /opt/wg-access/STATUS-STEP-018_POOL_16_AND_REUSE_ALLOCATOR_OK.txt:64: VM100 wg_paid contains enabled peers: /opt/wg-access/STATUS-STEP-018_POOL_16_AND_REUSE_ALLOCATOR_OK.txt:70: VM100 wg_paid is /16 and up. /opt/wg-access/STATUS-STEP-019A_TEST_PEERS_CLEANED_OK.txt:10: peer_id: 9298ec04-26cf-44a7-8079-7a13664612fa /opt/wg-access/STATUS-STEP-019A_TEST_PEERS_CLEANED_OK.txt:11: disable_job_id: fb2c12a5-3f22-4c55-94f1-091240e0019a /opt/wg-access/STATUS-STEP-019A_TEST_PEERS_CLEANED_OK.txt:14: peer_id: 13543224-39f7-4cfc-917d-66a16e2e0e55 /opt/wg-access/STATUS-STEP-019A_TEST_PEERS_CLEANED_OK.txt:15: disable_job_id: 652f82c5-4243-4618-bf17-ccfea3e44d54 /opt/wg-access/STATUS-STEP-019A_TEST_PEERS_CLEANED_OK.txt:18: peer_id: 1b19ed83-1cad-4d57-be9f-fded5270213c /opt/wg-access/STATUS-STEP-019A_TEST_PEERS_CLEANED_OK.txt:19: disable_job_id: d607c313-cacd-4650-9d39-47c7d43817d6 /opt/wg-access/STATUS-STEP-019A_TEST_PEERS_CLEANED_OK.txt:23: removed all extra runtime peers from VM100 wg_paid /opt/wg-access/STATUS-STEP-019A_TEST_PEERS_CLEANED_OK.txt:28: wg_paid remains up /opt/wg-access/STATUS-STEP-019A_TEST_PEERS_CLEANED_OK.txt:30: route: 10.253.0.0/16 dev wg_paid /opt/wg-access/STATUS-STEP-019A_TEST_PEERS_CLEANED_OK.txt:37: Clean /16 wg_paid network. /opt/wg-access/STATUS-STEP-019B_CLEAN_POOL_SMOKE_OK.txt:10: VM100 wg_paid was clean: /opt/wg-access/STATUS-STEP-019B_CLEAN_POOL_SMOKE_OK.txt:16: peer_id: 6a5f1655-8ebe-435e-bba6-1af2412d40c2 /opt/wg-access/STATUS-STEP-019B_CLEAN_POOL_SMOKE_OK.txt:17: enable_job_id: cb23b57d-7ec7-4804-a045-495a23705f5d /opt/wg-access/STATUS-STEP-019B_CLEAN_POOL_SMOKE_OK.txt:18: tunnel_ip: 10.253.1.10 /opt/wg-access/STATUS-STEP-019B_CLEAN_POOL_SMOKE_OK.txt:26: Agent added peer to VM100 wg_paid. /opt/wg-access/STATUS-STEP-019B_CLEAN_POOL_SMOKE_OK.txt:49: peer_id: 6a5f1655-8ebe-435e-bba6-1af2412d40c2 /opt/wg-access/STATUS-STEP-019B_CLEAN_POOL_SMOKE_OK.txt:50: disable_job_id: 8b21d24d-d575-4224-a281-bd2456cccb37 /opt/wg-access/STATUS-STEP-019B_CLEAN_POOL_SMOKE_OK.txt:51: tunnel_ip: 10.253.1.10 /opt/wg-access/STATUS-STEP-019B_CLEAN_POOL_SMOKE_OK.txt:56: Agent removed runtime peer from VM100 wg_paid. /opt/wg-access/STATUS-STEP-019B_CLEAN_POOL_SMOKE_OK.txt:61: VM100 wg_paid: /opt/wg-access/STATUS-STEP-019B_CLEAN_POOL_SMOKE_OK.txt:68: VM100 wg_paid is clean and ready. /opt/wg-access/STATUS-STEP-020C_AGENT_TIMER_REAL_PERIODIC_OK.txt:44: VM100 wg_paid: /opt/wg-access/STATUS-STEP-020C_AGENT_TIMER_REAL_PERIODIC_OK.txt:46: route: 10.253.0.0/16 dev wg_paid /opt/wg-access/STATUS-STEP-020D_TIMER_AUTO_PROVISION_DEPROVISION_OK.txt:19: peer_id: 267835b6-84b6-4527-bd47-eee963e7a5c9 /opt/wg-access/STATUS-STEP-020D_TIMER_AUTO_PROVISION_DEPROVISION_OK.txt:20: enable_job_id: 1912c96e-bda5-4af1-a9ea-9a81a27344fd /opt/wg-access/STATUS-STEP-020D_TIMER_AUTO_PROVISION_DEPROVISION_OK.txt:21: tunnel_ip: 10.253.1.10 /opt/wg-access/STATUS-STEP-020D_TIMER_AUTO_PROVISION_DEPROVISION_OK.txt:32: wg_paid had peer: /opt/wg-access/STATUS-STEP-020D_TIMER_AUTO_PROVISION_DEPROVISION_OK.txt:55: peer_id: 267835b6-84b6-4527-bd47-eee963e7a5c9 /opt/wg-access/STATUS-STEP-020D_TIMER_AUTO_PROVISION_DEPROVISION_OK.txt:56: disable_job_id: 9057b4c7-68b5-4b9e-8cf0-f624a07e30d0 /opt/wg-access/STATUS-STEP-020D_TIMER_AUTO_PROVISION_DEPROVISION_OK.txt:57: tunnel_ip: 10.253.1.10 /opt/wg-access/STATUS-STEP-020D_TIMER_AUTO_PROVISION_DEPROVISION_OK.txt:70: VM100 wg_paid: /opt/wg-access/STATUS-STEP-020D_TIMER_AUTO_PROVISION_DEPROVISION_OK.txt:72: route: 10.253.0.0/16 dev wg_paid /opt/wg-access/STATUS-STEP-020D_TIMER_AUTO_PROVISION_DEPROVISION_OK.txt:77: VM100 wg_paid clean. /opt/wg-access/STATUS-STEP-021C_ADMIN_SUBSCRIPTION_FLOW_OK.txt:31: subscription_id: 54b8c5b7-430d-425a-8fc0-909eeb0cab9d /opt/wg-access/STATUS-STEP-021C_ADMIN_SUBSCRIPTION_FLOW_OK.txt:32: peer_id: 00fde00e-a169-4397-841f-5cc99de475d5 /opt/wg-access/STATUS-STEP-021C_ADMIN_SUBSCRIPTION_FLOW_OK.txt:33: enable_job_id: bb71b4cd-a615-45f5-9135-4aa0efca9cb7 /opt/wg-access/STATUS-STEP-021C_ADMIN_SUBSCRIPTION_FLOW_OK.txt:34: node_id: ddn-test /opt/wg-access/STATUS-STEP-021C_ADMIN_SUBSCRIPTION_FLOW_OK.txt:35: tunnel_ip: 10.253.1.10 /opt/wg-access/STATUS-STEP-021C_ADMIN_SUBSCRIPTION_FLOW_OK.txt:63: POST /admin/peers/{peer_id}/disable /opt/wg-access/STATUS-STEP-021C_ADMIN_SUBSCRIPTION_FLOW_OK.txt:66: disable_job_id: 6e273fdf-781f-4992-ad42-4bf83bc7b6f5 /opt/wg-access/STATUS-STEP-021C_ADMIN_SUBSCRIPTION_FLOW_OK.txt:73: VM100 wg_paid: /opt/wg-access/STATUS-STEP-021C_ADMIN_SUBSCRIPTION_FLOW_OK.txt:75: route: 10.253.0.0/16 dev wg_paid /opt/wg-access/STATUS-STEP-021C_ADMIN_SUBSCRIPTION_FLOW_OK.txt:84: VM100 wg_paid clean. /opt/wg-access/STATUS-STEP-022B_DEV_ENDPOINT_USES_SHARED_WG_SERVICE_OK.txt:18: next_tunnel_ip /opt/wg-access/STATUS-STEP-022B_DEV_ENDPOINT_USES_SHARED_WG_SERVICE_OK.txt:29: peer_id: da134a09-caa8-4209-bbfa-93dd06f310fb /opt/wg-access/STATUS-STEP-022B_DEV_ENDPOINT_USES_SHARED_WG_SERVICE_OK.txt:30: enable_job_id: 13a61a08-8eeb-4402-8a5c-624bc606c023 /opt/wg-access/STATUS-STEP-022B_DEV_ENDPOINT_USES_SHARED_WG_SERVICE_OK.txt:31: node_id: ddn-test /opt/wg-access/STATUS-STEP-022B_DEV_ENDPOINT_USES_SHARED_WG_SERVICE_OK.txt:32: tunnel_ip: 10.253.1.10 /opt/wg-access/STATUS-STEP-022B_DEV_ENDPOINT_USES_SHARED_WG_SERVICE_OK.txt:57: POST /admin/peers/{peer_id}/disable /opt/wg-access/STATUS-STEP-022B_DEV_ENDPOINT_USES_SHARED_WG_SERVICE_OK.txt:60: disable_job_id: ef0e8472-6e80-45eb-9bcb-ec0a9d7be598 /opt/wg-access/STATUS-STEP-022B_DEV_ENDPOINT_USES_SHARED_WG_SERVICE_OK.txt:67: VM100 wg_paid: /opt/wg-access/STATUS-STEP-022B_DEV_ENDPOINT_USES_SHARED_WG_SERVICE_OK.txt:69: route: 10.253.0.0/16 dev wg_paid /opt/wg-access/STATUS-STEP-022B_DEV_ENDPOINT_USES_SHARED_WG_SERVICE_OK.txt:78: VM100 wg_paid clean. /opt/wg-access/STATUS-STEP-023A_DEV_ENDPOINT_GUARD_OK.txt:32: peer_id: 486ee88e-2515-4203-8541-44f89cdaba89 /opt/wg-access/STATUS-STEP-023A_DEV_ENDPOINT_GUARD_OK.txt:33: enable_job_id: cef3e913-d69a-4f61-a5af-7d10eeb8b2da /opt/wg-access/STATUS-STEP-023A_DEV_ENDPOINT_GUARD_OK.txt:34: node_id: ddn-test /opt/wg-access/STATUS-STEP-023A_DEV_ENDPOINT_GUARD_OK.txt:35: tunnel_ip: 10.253.1.10 /opt/wg-access/STATUS-STEP-023A_DEV_ENDPOINT_GUARD_OK.txt:44: peer appeared on wg_paid: /opt/wg-access/STATUS-STEP-023A_DEV_ENDPOINT_GUARD_OK.txt:50: POST /admin/peers/{peer_id}/disable /opt/wg-access/STATUS-STEP-023A_DEV_ENDPOINT_GUARD_OK.txt:53: disable_job_id: de335c08-7807-465b-9065-bce2c77a955f /opt/wg-access/STATUS-STEP-023A_DEV_ENDPOINT_GUARD_OK.txt:61: VM100 wg_paid: /opt/wg-access/STATUS-STEP-023A_DEV_ENDPOINT_GUARD_OK.txt:63: route: 10.253.0.0/16 dev wg_paid /opt/wg-access/STATUS-STEP-024A_ADMIN_USER_VIEW_OK.txt:50: peer_id: 486ee88e-2515-4203-8541-44f89cdaba89 /opt/wg-access/STATUS-STEP-024A_ADMIN_USER_VIEW_OK.txt:52: tunnel_ip: 10.253.1.10 /opt/wg-access/STATUS-STEP-024A_ADMIN_USER_VIEW_OK.txt:57: job_id: de335c08-7807-465b-9065-bce2c77a955f /opt/wg-access/STATUS-STEP-024A_ADMIN_USER_VIEW_OK.txt:62: job_id: cef3e913-d69a-4f61-a5af-7d10eeb8b2da /opt/wg-access/STATUS-STEP-024A_ADMIN_USER_VIEW_OK.txt:77: VM100 wg_paid: /opt/wg-access/STATUS-STEP-024A_ADMIN_USER_VIEW_OK.txt:79: route: 10.253.0.0/16 dev wg_paid /opt/wg-access/STATUS-STEP-024A_ADMIN_USER_VIEW_OK.txt:88: VM100 wg_paid clean. /opt/wg-access/STATUS-STEP-025A_CANCEL_SUBSCRIPTION_OK.txt:12: POST /admin/subscriptions/{subscription_id}/cancel /opt/wg-access/STATUS-STEP-025A_CANCEL_SUBSCRIPTION_OK.txt:28: subscription_id /opt/wg-access/STATUS-STEP-025A_CANCEL_SUBSCRIPTION_OK.txt:33: job_ids /opt/wg-access/STATUS-STEP-025A_CANCEL_SUBSCRIPTION_OK.txt:40: POST /admin/subscriptions/{subscription_id}/cancel /opt/wg-access/STATUS-STEP-025A_CANCEL_SUBSCRIPTION_OK.txt:51: subscription_id: 26794caf-ab42-4cb7-8270-5e87e7b1d47d /opt/wg-access/STATUS-STEP-025A_CANCEL_SUBSCRIPTION_OK.txt:52: peer_id: 3460b486-358c-44d6-8f47-c960d6254e3a /opt/wg-access/STATUS-STEP-025A_CANCEL_SUBSCRIPTION_OK.txt:53: enable_job_id: 74ccc2cf-bbb2-4621-8bbe-ce3096d8366d /opt/wg-access/STATUS-STEP-025A_CANCEL_SUBSCRIPTION_OK.txt:54: node_id: ddn-test /opt/wg-access/STATUS-STEP-025A_CANCEL_SUBSCRIPTION_OK.txt:55: tunnel_ip: 10.253.1.10 /opt/wg-access/STATUS-STEP-025A_CANCEL_SUBSCRIPTION_OK.txt:64: peer appeared on wg_paid: /opt/wg-access/STATUS-STEP-025A_CANCEL_SUBSCRIPTION_OK.txt:69: subscription_id: 26794caf-ab42-4cb7-8270-5e87e7b1d47d /opt/wg-access/STATUS-STEP-025A_CANCEL_SUBSCRIPTION_OK.txt:74: job_ids: /opt/wg-access/STATUS-STEP-025A_CANCEL_SUBSCRIPTION_OK.txt:94: Second POST /admin/subscriptions/{subscription_id}/cancel returned: /opt/wg-access/STATUS-STEP-025A_CANCEL_SUBSCRIPTION_OK.txt:97: job_ids: [] /opt/wg-access/STATUS-STEP-025A_CANCEL_SUBSCRIPTION_OK.txt:102: VM100 wg_paid: /opt/wg-access/STATUS-STEP-025A_CANCEL_SUBSCRIPTION_OK.txt:104: route: 10.253.0.0/16 dev wg_paid /opt/wg-access/STATUS-STEP-025A_CANCEL_SUBSCRIPTION_OK.txt:113: VM100 wg_paid clean. /opt/wg-access/STATUS-STEP-026A_EXPIRE_SUBSCRIPTIONS_OK.txt:29: job_ids /opt/wg-access/STATUS-STEP-026A_EXPIRE_SUBSCRIPTIONS_OK.txt:30: subscription_ids /opt/wg-access/STATUS-STEP-026A_EXPIRE_SUBSCRIPTIONS_OK.txt:38: POST /admin/subscriptions/{subscription_id}/cancel /opt/wg-access/STATUS-STEP-026A_EXPIRE_SUBSCRIPTIONS_OK.txt:47: subscription_id: 7a3dfe11-ebf3-4f5e-966b-73fdbe464426 /opt/wg-access/STATUS-STEP-026A_EXPIRE_SUBSCRIPTIONS_OK.txt:48: peer_id: f45a349d-25a7-426d-b88a-4479b28aec18 /opt/wg-access/STATUS-STEP-026A_EXPIRE_SUBSCRIPTIONS_OK.txt:49: enable_job_id: 838a2aaf-64ed-4346-9996-1ef7889fda2f /opt/wg-access/STATUS-STEP-026A_EXPIRE_SUBSCRIPTIONS_OK.txt:50: node_id: ddn-test /opt/wg-access/STATUS-STEP-026A_EXPIRE_SUBSCRIPTIONS_OK.txt:51: tunnel_ip: 10.253.1.10 /opt/wg-access/STATUS-STEP-026A_EXPIRE_SUBSCRIPTIONS_OK.txt:60: peer appeared on wg_paid: /opt/wg-access/STATUS-STEP-026A_EXPIRE_SUBSCRIPTIONS_OK.txt:71: job_ids: /opt/wg-access/STATUS-STEP-026A_EXPIRE_SUBSCRIPTIONS_OK.txt:73: subscription_ids: /opt/wg-access/STATUS-STEP-026A_EXPIRE_SUBSCRIPTIONS_OK.txt:96: job_ids: [] /opt/wg-access/STATUS-STEP-026A_EXPIRE_SUBSCRIPTIONS_OK.txt:97: subscription_ids: [] /opt/wg-access/STATUS-STEP-026A_EXPIRE_SUBSCRIPTIONS_OK.txt:102: VM100 wg_paid: /opt/wg-access/STATUS-STEP-026A_EXPIRE_SUBSCRIPTIONS_OK.txt:104: route: 10.253.0.0/16 dev wg_paid /opt/wg-access/STATUS-STEP-026A_EXPIRE_SUBSCRIPTIONS_OK.txt:113: VM100 wg_paid clean. /opt/wg-access/STATUS-STEP-028A_MGTS_WG_PAID_E2E_OK.txt:7: MGTS wg_paid production lifecycle and E2E routing smoke passed. /opt/wg-access/STATUS-STEP-028A_MGTS_WG_PAID_E2E_OK.txt:12: REMOTE_WG_INTERFACE=wg_paid /opt/wg-access/STATUS-STEP-028A_MGTS_WG_PAID_E2E_OK.txt:24: -> agent executed runtime wg set on MGTS VM100 wg_paid /opt/wg-access/STATUS-STEP-028A_MGTS_WG_PAID_E2E_OK.txt:25: -> peer appeared on MGTS VM100 wg_paid /opt/wg-access/STATUS-STEP-028A_MGTS_WG_PAID_E2E_OK.txt:49: -> peer removed from MGTS VM100 wg_paid /opt/wg-access/tmp/mgts-smoke-20260706-184120/smoke.env:1:WORK=/opt/wg-access/tmp/mgts-smoke-20260706-184120 /opt/wg-access/tmp/mgts-smoke-20260706-184120/create.json: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 /opt/wg-access/tmp/mgts-smoke-20260706-183921/peers-before.json: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"}] /opt/wg-access/tmp/mgts-smoke-20260706-183921/create.json:1:{"detail":[{"type":"value_error","loc":["body","email"],"msg":"value is not a valid email address: The part after the @-sign is a special-use or reserved name that cannot be used with email.","input":"wg-paid-mgts-smoke-20260706-183921@example.invalid","ctx":{"reason":"The part after the @-sign is a special-use or reserved name that cannot be used with email."}}]} /opt/wg-access/backend/app/models/core.py:84: # tunnel_ip uniqueness is enforced in PostgreSQL by partial unique index: /opt/wg-access/backend/app/models/core.py:85: # uq_peers_node_tunnel_ip_enabled (node_id, tunnel_ip) WHERE enabled = true, /opt/wg-access/backend/app/models/core.py:91: node_id: Mapped[str] = mapped_column(String(64), default="ddn-test", nullable=False, index=True) /opt/wg-access/backend/app/models/core.py:94: tunnel_ip: Mapped[str] = mapped_column(String(64), nullable=False) /opt/wg-access/backend/app/models/core.py:110: node_id: Mapped[str] = mapped_column(String(64), nullable=False, index=True) /opt/wg-access/backend/app/models/core.py:112: peer_id: Mapped[uuid.UUID | None] = mapped_column(UUID(as_uuid=True), ForeignKey("peers.id"), nullable=True, index=True) /opt/wg-access/backend/app/services/wireguard.py:41:def next_tunnel_ip(db: Session, node_id: str) -> str: /opt/wg-access/backend/app/services/wireguard.py:58: select(Peer.tunnel_ip).where( /opt/wg-access/backend/app/services/wireguard.py:59: Peer.node_id == node_id, /opt/wg-access/backend/app/services/wireguard.py:77:def build_client_config(private_key: , tunnel_ip: str, preshared_key: str) -> str: /opt/wg-access/backend/app/services/wireguard.py:91: f"Address = {tunnel_ip}/32", /opt/wg-access/backend/app/api/admin.py:16: next_tunnel_ip, /opt/wg-access/backend/app/api/admin.py:66: node_id: str /opt/wg-access/backend/app/api/admin.py:68: tunnel_ip: str /opt/wg-access/backend/app/api/admin.py:88: node_id: str = "ddn-test" /opt/wg-access/backend/app/api/admin.py:94: subscription_id: UUID /opt/wg-access/backend/app/api/admin.py:95: peer_id: UUID /opt/wg-access/backend/app/api/admin.py:96: job_id: UUID /opt/wg-access/backend/app/api/admin.py:97: node_id: str /opt/wg-access/backend/app/api/admin.py:98: tunnel_ip: str /opt/wg-access/backend/app/api/admin.py:127: tunnel_ip = next_tunnel_ip(db, payload.node_id) /opt/wg-access/backend/app/api/admin.py:130: client_config = build_client_config(private_key, tunnel_ip, preshared_key) /opt/wg-access/backend/app/api/admin.py:134: node_id=payload.node_id, /opt/wg-access/backend/app/api/admin.py:137: tunnel_ip=tunnel_ip, /opt/wg-access/backend/app/api/admin.py:145: node_id=payload.node_id, /opt/wg-access/backend/app/api/admin.py:147: peer_id=peer.id, /opt/wg-access/backend/app/api/admin.py:151: "tunnel_ip": peer.tunnel_ip, /opt/wg-access/backend/app/api/admin.py:166: subscription_id=subscription.id, /opt/wg-access/backend/app/api/admin.py:167: peer_id=peer.id, /opt/wg-access/backend/app/api/admin.py:168: job_id=job.id, /opt/wg-access/backend/app/api/admin.py:169: node_id=peer.node_id, /opt/wg-access/backend/app/api/admin.py:170: tunnel_ip=peer.tunnel_ip, /opt/wg-access/backend/app/api/admin.py:184: job_ids: list[UUID] /opt/wg-access/backend/app/api/admin.py:185: subscription_ids: list[UUID] /opt/wg-access/backend/app/api/admin.py:219: node_id=peer.node_id, /opt/wg-access/backend/app/api/admin.py:221: peer_id=peer.id, /opt/wg-access/backend/app/api/admin.py:224: "tunnel_ip": peer.tunnel_ip, /opt/wg-access/backend/app/api/admin.py:240: job_ids=[job.id for job in jobs], /opt/wg-access/backend/app/api/admin.py:241: subscription_ids=[subscription.id for subscription in expired_subscriptions], === app/config backup tar === tar_rc=0 tar_path=/root/router-ops-backups/pre-test-peer-safety-mini-20260708-120311/wg-access-app-state-pre-test-peer.tar.gz -rw-r--r-- 1 root root 42K Jul 8 12:03 /root/router-ops-backups/pre-test-peer-safety-mini-20260708-120311/wg-access-app-state-pre-test-peer.tar.gz tar: Removing leading `/' from member names tar: Removing leading `/' from hard link targets === pg_dump backup === pg_dump_rc=0 pg_dump_path=/root/router-ops-backups/pre-test-peer-safety-mini-20260708-120311/wg-access-db-pre-test-peer.dump -rw-r--r-- 1 root root 24K Jul 8 12:03 /root/router-ops-backups/pre-test-peer-safety-mini-20260708-120311/wg-access-db-pre-test-peer.dump === no forbidden action proof === no_peer_create=1 no_peer_disable=1 no_wg_reload=1 no_postgres_recreate=1 pre_test_peer_safety_done=1 remote_backup_dir=/root/router-ops-backups/pre-test-peer-safety-mini-20260708-120311 === STEP_034F2 RESULT === remote_rc=0 backend_endpoint_final_lines=1 backend_health_ok_lines=2 peers_api_ok_lines=1 jobs_api_ok_lines=1 peer_count=20 job_count=36 tar_backup_ok_lines=1 pgdump_backup_ok_lines=1 node_candidate_count=3 top_node_candidate=ddn-test package=/opt/router-ops/apply-packages/20260708-120310_step034f2_pre_test_peer_safety_node_mini local_backup_dir=/opt/router-ops/state/pre-test-peer-safety-mini-20260708-120310 decision=PASS_PRE_TEST_PEER_SAFETY_NODE_MINI