From 86aeefa3881eedbfca0deaadb8f693a2305d4d44 Mon Sep 17 00:00:00 2001 From: administrator Date: Thu, 20 Aug 2026 12:07:26 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2=D0=B8=D1=82?= =?UTF-8?q?=D1=8C=20playbooks/check=5Fvpn.yml?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- playbooks/check_vpn.yml | 101 ++++++++++++++++++++++++++++++++++++---- 1 file changed, 91 insertions(+), 10 deletions(-) diff --git a/playbooks/check_vpn.yml b/playbooks/check_vpn.yml index bb556da..5956976 100644 --- a/playbooks/check_vpn.yml +++ b/playbooks/check_vpn.yml @@ -1,11 +1,92 @@ -- name: Check and reconnect AdGuard VPN - hosts: raspberry # или имя хоста из инвентори - tasks: - - name: Get VPN status - command: adguardvpn-cli status - register: vpn_status - changed_when: false +- name: Check and reconnect AdGuard VPN with fallback + hosts: raspberry + gather_facts: false + vars: + locations: + - Helsinki + - Tallinn + - Riga + - Vilnius + - Warsaw + - Stockholm + - Copenhagen + - Berlin + - Frankfurt + - Amsterdam + - London - - name: Reconnect if disconnected - command: adguardvpn-cli connect - when: "'Disconnected' in vpn_status.stdout" \ No newline at end of file + tasks: + - name: Get current VPN status + command: adguardvpn-cli status + register: status_output + changed_when: false + ignore_errors: true + + - name: Display current status + debug: + msg: "Current VPN status: {{ status_output.stdout | default('Unknown') }}" + + - name: Determine if connected + set_fact: + vpn_connected: "{{ 'Connected' in (status_output.stdout | default('')) }}" + + - name: Attempt to connect or reconnect with fallback + shell: | + # Функция для логирования с временем + log() { + echo "$(date '+%Y-%m-%d %H:%M:%S') - $1" + } + + # Если уже подключены – выходим + if echo "{{ vpn_connected }}" | grep -q "True"; then + log "Already connected, nothing to do." + exit 0 + fi + + # Функция проверки статуса + check_status() { + adguardvpn-cli status | grep -q "Connected" + } + + # Попытка простого подключения + log "Trying simple connect (without location)..." + timeout 30 adguardvpn-cli connect + sleep 5 + if check_status; then + log "Successfully connected via simple connect" + exit 0 + fi + log "Simple connect failed or timed out." + + # Перебор заданных локаций + for city in {{ locations | join(' ') }}; do + log "Trying to connect to '$city'..." + timeout 30 adguardvpn-cli connect -l "$city" + sleep 5 + if check_status; then + log "Successfully connected to $city" + exit 0 + fi + log "Connection to $city failed." + done + + log "All attempts failed." + exit 1 + when: not vpn_connected + register: reconnect_result + ignore_errors: true + timeout: 600 + + - name: Display full reconnect log + debug: + var: reconnect_result.stdout_lines # или stdout, но lines показывает по строкам + + - name: Final status check + command: adguardvpn-cli status + register: final_status + changed_when: false + ignore_errors: true + + - name: Display final status + debug: + msg: "Final VPN status: {{ final_status.stdout | default('Unknown') }}" \ No newline at end of file