Обновить update.yml
This commit is contained in:
130
update.yml
130
update.yml
@@ -1,93 +1,63 @@
|
||||
- name: Обновить систему Linux
|
||||
---
|
||||
- name: Безопасное обновление системы Linux
|
||||
hosts: all
|
||||
become: yes
|
||||
vars:
|
||||
packages_to_update:
|
||||
- apt-get:
|
||||
release: stable
|
||||
apt:
|
||||
release: stable
|
||||
dnf:
|
||||
release: stable
|
||||
safe_packages:
|
||||
- sshd
|
||||
- openssh-server
|
||||
- ssh-client
|
||||
become: true
|
||||
gather_facts: true
|
||||
|
||||
tasks:
|
||||
- name: Проверить дистрибутив
|
||||
shell: cat /etc/*release
|
||||
register: distro_info
|
||||
changed_when: false
|
||||
|
||||
- name: Обновить списки пакетов
|
||||
block:
|
||||
- name: Обновить списки пакетов (APT)
|
||||
apt:
|
||||
update_cache: yes
|
||||
when: distro_info.stdout | regex_search("Ubuntu|Debian")
|
||||
|
||||
- name: Обновить списки пакетов (DNF)
|
||||
dnf:
|
||||
update_cache: yes
|
||||
when: distro_info.stdout | regex_search("CentOS|Fedora|RHEL|AlmaLinux|Rocky")
|
||||
|
||||
- name: Обновить списки пакетов (YUM)
|
||||
yum:
|
||||
update_cache: yes
|
||||
when: distro_info.stdout | regex_search("CentOS|Fedora|RHEL|AlmaLinux|Rocky")
|
||||
always:
|
||||
- name: Обновить списки пакетов (позитивное завершение)
|
||||
debug:
|
||||
msg: "Списки пакетов обновлены (или обновлены списки для вашей системы)"
|
||||
|
||||
- name: Обновить пакеты (APT)
|
||||
apt:
|
||||
upgrade: yes
|
||||
dist_upgrade: yes
|
||||
- name: Обновить кэш и пакеты (Debian/Ubuntu)
|
||||
ansible.builtin.apt:
|
||||
update_cache: yes
|
||||
cache_valid_time: 3600
|
||||
upgrade: full
|
||||
autoremove: yes
|
||||
auto_remove: yes
|
||||
when: distro_info.stdout | regex_search("Ubuntu|Debian")
|
||||
when: ansible_os_family == "Debian"
|
||||
register: apt_update
|
||||
|
||||
- name: Обновить пакеты (DNF/YUM)
|
||||
package:
|
||||
- name: Обновить кэш и пакеты (RHEL 8+/Fedora/Alma/Rocky)
|
||||
ansible.builtin.dnf:
|
||||
update_cache: yes
|
||||
name: '*'
|
||||
state: latest
|
||||
when: distro_info.stdout | regex_search("CentOS|Fedora|RHEL|AlmaLinux|Rocky")
|
||||
when: ansible_os_family == "RedHat" and ansible_pkg_mgr == "dnf"
|
||||
register: dnf_update
|
||||
|
||||
- name: Обновить безопасные пакеты
|
||||
package:
|
||||
name: '{{ safe_packages }}'
|
||||
- name: Обновить кэш и пакеты (Legacy RHEL/CentOS 7)
|
||||
ansible.builtin.yum:
|
||||
update_cache: yes
|
||||
name: '*'
|
||||
state: latest
|
||||
when: ansible_os_family == "RedHat" and ansible_pkg_mgr == "yum"
|
||||
register: yum_update
|
||||
|
||||
- name: Подсчитать обновленные пакеты
|
||||
command: apt --check-upgrade 2>&1 | grep -c 'Package'
|
||||
register: apt_package_count
|
||||
failed_when: false
|
||||
when: distro_info.stdout | regex_search("Ubuntu|Debian")
|
||||
|
||||
- name: Подсчитать обновленные пакеты (RHEL)
|
||||
command: dnf check-update 2>&1 | grep -c 'Package'
|
||||
register: dnf_package_count
|
||||
failed_when: false
|
||||
when: distro_info.stdout | regex_search("CentOS|Fedora|RHEL|AlmaLinux|Rocky")
|
||||
|
||||
- name: Вывести отчёт
|
||||
debug:
|
||||
msg: "Обновлено пакетов: {{ apt_package_count.stdout }} или {{ dnf_package_count.stdout }}"
|
||||
|
||||
- name: Проверить, есть ли обновления (APT)
|
||||
command: apt --dry-run upgrade
|
||||
register: apt_upgrades
|
||||
failed_when: false
|
||||
- name: Вывести отчёт об обновлении
|
||||
ansible.builtin.debug:
|
||||
msg: >-
|
||||
Система: {{ ansible_distribution }} {{ ansible_distribution_version }}
|
||||
Статус: {{ "Применены обновления" if (apt_update.changed | default(false)) or (dnf_update.changed | default(false)) or (yum_update.changed | default(false)) else "Всё актуально" }}
|
||||
changed_when: false
|
||||
when: distro_info.stdout | regex_search("Ubuntu|Debian")
|
||||
|
||||
- name: Вывести, какие пакеты будут обновлены
|
||||
debug:
|
||||
msg: "Пакеты, которые будут обновлены: {{ apt_upgrades.stdout_lines }}"
|
||||
when: apt_upgrades.rc == 0
|
||||
# Опционально: безопасная перезагрузка при обновлении ядра
|
||||
- name: Проверить необходимость перезагрузки (Debian)
|
||||
ansible.builtin.stat:
|
||||
path: /var/run/reboot-required
|
||||
register: reboot_deb
|
||||
when: ansible_os_family == "Debian"
|
||||
changed_when: false
|
||||
|
||||
- name: Завершить с сообщением об успехе
|
||||
debug:
|
||||
msg: "Обновление системы завершено!"
|
||||
- name: Проверить необходимость перезагрузки (RHEL)
|
||||
ansible.builtin.command: dnf needs-restarting -r
|
||||
register: reboot_rhel
|
||||
failed_when: reboot_rhel.rc not in [0, 1]
|
||||
changed_when: reboot_rhel.rc == 1
|
||||
when: ansible_os_family == "RedHat" and ansible_pkg_mgr == "dnf"
|
||||
|
||||
- name: Перезагрузить сервер при необходимости
|
||||
ansible.builtin.reboot:
|
||||
msg: "Обновление ядра/пакетов требует перезагрузки."
|
||||
pre_reboot_delay: 15
|
||||
test_command: whoami
|
||||
reboot_timeout: 600
|
||||
when: >
|
||||
(reboot_deb.stat.exists | default(false)) or
|
||||
(reboot_rhel.rc | default(0) == 1)
|
||||
Reference in New Issue
Block a user