# Узлы подключаются к домашней сети (vars/wifi.yml) ради интернета для apt. # Проводная сеть 11.0.0.0/24 без шлюза, поэтому маршрут по умолчанию # и DNS приходят от Wi-Fi. В конце каждый узел обязан достучаться до интернета. - name: Wi-Fi включить и подключить к домашней сети hosts: all gather_facts: false vars_files: - vars/wifi.yml vars: wifi_con: fleet-wifi tasks: - name: Радио Wi-Fi включено become: true ansible.builtin.shell: | if [ "$(nmcli radio wifi)" = enabled ]; then echo OK; else nmcli radio wifi on && echo CHANGED; fi register: radio changed_when: "'CHANGED' in radio.stdout" - name: Профиль {{ wifi_con }} с актуальными SSID и паролем become: true community.general.nmcli: conn_name: "{{ wifi_con }}" ifname: wlan0 type: wifi ssid: "{{ wifi_ssid }}" wifi_sec: key-mgmt: wpa-psk psk: "{{ wifi_psk }}" autoconnect: true state: present register: profile - name: Переподключение после смены SSID или пароля become: true ansible.builtin.command: nmcli con down {{ wifi_con }} when: profile.changed failed_when: false - name: Подключение активно become: true ansible.builtin.shell: | state=$(nmcli -t -f GENERAL.STATE con show {{ wifi_con }} | cut -d: -f2) if [ "$state" = activated ]; then echo OK; else nmcli con up {{ wifi_con }} >/dev/null && echo CHANGED; fi register: up changed_when: "'CHANGED' in up.stdout" - name: Интернет доступен (DNS и HTTPS) ansible.builtin.uri: url: https://deb.debian.org/ register: inet retries: 6 delay: 5 until: inet.status == 200 - name: Адрес в домашней сети ansible.builtin.command: nmcli -t -f IP4.ADDRESS con show {{ wifi_con }} register: addr changed_when: false - name: Итог по узлу ansible.builtin.debug: msg: "[+] {{ inventory_hostname }}: {{ addr.stdout | regex_replace('^IP4.ADDRESS\\[1\\]:', '') }}, интернет есть"