Files
Raspberry_awx/playbooks/kernel-update.yml
T

100 lines
3.9 KiB
YAML

---
- 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