Обновить playbooks/kernel-update.yml
This commit is contained in:
+23
-66
@@ -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
|
when: kernel_updated
|
||||||
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