--- - name: Automatic kernel update with reboot (excluding AWX server) hosts: all:!awx # исключаем группу awx become: yes gather_facts: yes vars: # Telegram bot variables – лучше передавать через AWX Credentials или переменные telegram_token: "{{ telegram_bot_token }}" # задать в AWX telegram_chat_id: "{{ telegram_chat_id }}" # задать в AWX api_url: "https://api.telegram.org/bot{{ telegram_token }}/sendMessage" tasks: # 1. Узнаём текущую версию ядра - name: Get current kernel version command: uname -r register: kernel_before changed_when: false # 2. Устанавливаем обновления ядра (обновляем все пакеты, но фокусируемся на ядре) - name: Update all packages (including kernel) apt: upgrade: dist autoremove: yes autoclean: yes register: apt_result # 3. Узнаём новую версию ядра - name: Get new kernel version after update command: uname -r register: kernel_after changed_when: false ignore_errors: yes # если обновление не выполнялось, то uname -r выдаст ту же версию # 4. Определяем, было ли обновление ядра - name: Check if kernel version changed set_fact: kernel_updated: "{{ kernel_before.stdout != kernel_after.stdout }}" # 5. Отправляем уведомление в Telegram (если ядро обновлено или если были другие изменения) - name: Send Telegram notification (if kernel updated) uri: url: "{{ api_url }}" method: POST body_format: json body: chat_id: "{{ telegram_chat_id }}" text: | 🐧 Kernel update on {{ inventory_hostname }} Before: {{ kernel_before.stdout }} After: {{ kernel_after.stdout }} Host: {{ inventory_hostname }} ({{ ansible_distribution }} {{ ansible_distribution_version }}) Status: ✅ Kernel updated. Rebooting in 30 seconds. disable_notification: false when: kernel_updated delegate_to: localhost run_once: false # отправляем с каждого хоста, уведомление будет от каждого хоста # 6. Перезагрузка, если ядро обновлено - name: Reboot if kernel was updated reboot: reboot_timeout: 600 pre_reboot_delay: 30 post_reboot_delay: 60 when: kernel_updated # 7. После ребута отправляем второе уведомление – подтверждение загрузки - name: Send reboot completion notification uri: url: "{{ api_url }}" method: POST body_format: json body: chat_id: "{{ telegram_chat_id }}" text: | 🔄 Reboot completed on {{ inventory_hostname }} New kernel: {{ kernel_after.stdout }} Host: {{ inventory_hostname }} All services are up. disable_notification: false when: kernel_updated delegate_to: localhost run_once: false # 8. Если обновления ядра не было – отправим уведомление об этом - name: Send no-kernel-update notification uri: url: "{{ api_url }}" method: POST body_format: json body: chat_id: "{{ telegram_chat_id }}" text: | ⏭️ No kernel update on {{ inventory_hostname }} Current kernel: {{ kernel_before.stdout }} Host: {{ inventory_hostname }} disable_notification: false when: not kernel_updated delegate_to: localhost run_once: false