Обновить playbooks/kernel-update.yml

This commit is contained in:
2026-08-20 09:44:28 +03:00
parent 0d51677c67
commit b728ee3328
+22 -65
View File
@@ -1,62 +1,48 @@
--- ---
- name: Automatic kernel update with reboot (excluding AWX server) - name: Automatic kernel update with reboot (excluding AWX server)
hosts: all:!awx # исключаем группу awx hosts: all:!awx
become: yes become: yes
gather_facts: 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: tasks:
# 1. Узнаём текущую версию ядра # 1. Текущая версия ядра
- name: Get current kernel version - name: Get current kernel version
command: uname -r command: uname -r
register: kernel_before register: kernel_before
changed_when: false changed_when: false
# 2. Устанавливаем обновления ядра (обновляем все пакеты, но фокусируемся на ядре) # 2. Выводим в логи, что начинаем обновление
- name: Update all packages (including kernel) - name: Show current kernel
debug:
msg: "Current kernel on {{ inventory_hostname }}: {{ kernel_before.stdout }}"
# 3. Обновление всех пакетов (включая ядро)
- name: Update all packages (dist-upgrade)
apt: apt:
upgrade: dist upgrade: dist
autoremove: yes autoremove: yes
autoclean: yes autoclean: yes
register: apt_result register: apt_result
# 3. Узнаём новую версию ядра # 4. Новая версия ядра
- name: Get new kernel version after update - name: Get new kernel version after update
command: uname -r command: uname -r
register: kernel_after register: kernel_after
changed_when: false changed_when: false
ignore_errors: yes # если обновление не выполнялось, то uname -r выдаст ту же версию ignore_errors: yes
# 4. Определяем, было ли обновление ядра # 5. Проверяем, изменилось ли ядро
- name: Check if kernel version changed - name: Check if kernel version changed
set_fact: set_fact:
kernel_updated: "{{ kernel_before.stdout != kernel_after.stdout }}" kernel_updated: "{{ kernel_before.stdout != kernel_after.stdout }}"
# 5. Отправляем уведомление в Telegram (если ядро обновлено или если были другие изменения) # 6. Выводим информацию о результате
- name: Send Telegram notification (if kernel updated) - name: Show kernel update status
uri: debug:
url: "{{ api_url }}" msg: "Kernel on {{ inventory_hostname }} {{ 'was updated' if kernel_updated else 'is already up to date' }}"
method: POST when: kernel_after.stdout is defined
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. Перезагрузка, если ядро обновлено # 7. Перезагрузка, если ядро обновлено
- name: Reboot if kernel was updated - name: Reboot if kernel was updated
reboot: reboot:
reboot_timeout: 600 reboot_timeout: 600
@@ -64,37 +50,8 @@
post_reboot_delay: 60 post_reboot_delay: 60
when: kernel_updated when: kernel_updated
# 7. После ребута отправляем второе уведомление – подтверждение загрузки # 8. Сообщаем о завершении (опционально, для логов)
- name: Send reboot completion notification - name: Kernel update completed
uri: debug:
url: "{{ api_url }}" msg: "Kernel update process finished on {{ inventory_hostname }}"
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 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