Обновить update.yml

This commit is contained in:
2026-05-04 05:17:37 +00:00
parent af06a2141a
commit 724e05f3e9

View File

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