--- - name: Update AdGuard VPN exclusions hosts: your_nuc gather_facts: no vars: exclusions_url: "https://raw.githubusercontent.com/lib4u/amnezia-tunneling-ru/main/amnezia.json" # альтернативный список: https://raw.githubusercontent.com/Internet-Helper/Unblock-for-Russia/main/for-AGH.txt telegram_token: "{{ telegram_token }}" # задать в AWX как extra_var или credential telegram_chat_id: "{{ telegram_chat_id }}" tasks: - name: Download current exclusion list ansible.builtin.uri: url: "{{ exclusions_url }}" return_content: yes register: exclusions_raw - name: Extract domains from JSON (if JSON) ansible.builtin.set_fact: domains: "{{ exclusions_raw.content | from_json | json_query('domains') }}" when: exclusions_raw.content | from_json | type_debug == 'dict' ignore_errors: yes - name: Extract domains from plain text (if not JSON) ansible.builtin.set_fact: domains: "{{ exclusions_raw.content | split('\n') | reject('match', '^#') | reject('match', '^$') | list }}" when: domains is not defined - name: Count domains ansible.builtin.debug: msg: "Found {{ domains | length }} domains to exclude" - name: Clear existing exclusions ansible.builtin.command: cmd: adguardvpn-cli site-exclusions clear changed_when: true - name: Set exclusion mode to GENERAL ansible.builtin.command: cmd: adguardvpn-cli site-exclusions mode general changed_when: true - name: Add each domain as exclusion ansible.builtin.command: cmd: "adguardvpn-cli site-exclusions add {{ item }}" loop: "{{ domains }}" when: domains | length > 0 loop_control: pause: 0.1 # небольшая задержка, чтобы не перегрузить CLI changed_when: true - name: Restart VPN to apply changes ansible.builtin.command: cmd: "adguardvpn-cli disconnect && adguardvpn-cli connect" changed_when: true - name: Send Telegram notification community.general.telegram: token: "{{ telegram_token }}" api_args: chat_id: "{{ telegram_chat_id }}" text: "✅ Список исключений обновлён. Добавлено {{ domains | length }} доменов." delegate_to: localhost when: telegram_token is defined and telegram_chat_id is defined