diff --git a/playbooks/kernel-update.yml b/playbooks/kernel-update.yml index 5fac0fc..5fe67f0 100644 --- a/playbooks/kernel-update.yml +++ b/playbooks/kernel-update.yml @@ -1,62 +1,48 @@ --- - name: Automatic kernel update with reboot (excluding AWX server) - hosts: all:!awx # исключаем группу awx + hosts: all:!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. Узнаём текущую версию ядра + # 1. Текущая версия ядра - name: Get current kernel version command: uname -r register: kernel_before changed_when: false - # 2. Устанавливаем обновления ядра (обновляем все пакеты, но фокусируемся на ядре) - - name: Update all packages (including kernel) + # 2. Выводим в логи, что начинаем обновление + - name: Show current kernel + debug: + msg: "Current kernel on {{ inventory_hostname }}: {{ kernel_before.stdout }}" + + # 3. Обновление всех пакетов (включая ядро) + - name: Update all packages (dist-upgrade) apt: upgrade: dist autoremove: yes autoclean: yes register: apt_result - # 3. Узнаём новую версию ядра + # 4. Новая версия ядра - name: Get new kernel version after update command: uname -r register: kernel_after changed_when: false - ignore_errors: yes # если обновление не выполнялось, то uname -r выдаст ту же версию + ignore_errors: yes - # 4. Определяем, было ли обновление ядра + # 5. Проверяем, изменилось ли ядро - 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: Show kernel update status + debug: + msg: "Kernel on {{ inventory_hostname }} {{ 'was updated' if kernel_updated else 'is already up to date' }}" + when: kernel_after.stdout is defined - # 6. Перезагрузка, если ядро обновлено + # 7. Перезагрузка, если ядро обновлено - name: Reboot if kernel was updated reboot: reboot_timeout: 600 @@ -64,37 +50,8 @@ 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 \ No newline at end of file + # 8. Сообщаем о завершении (опционально, для логов) + - name: Kernel update completed + debug: + msg: "Kernel update process finished on {{ inventory_hostname }}" + when: kernel_updated \ No newline at end of file