Добавить playbooks/kernel-update.yml
This commit is contained in:
@@ -0,0 +1,100 @@
|
|||||||
|
---
|
||||||
|
- 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
|
||||||
Reference in New Issue
Block a user