From 724e05f3e9199b0022c1a3ac0b7fc1230b08d106 Mon Sep 17 00:00:00 2001 From: smolkik_adm Date: Mon, 4 May 2026 05:17:37 +0000 Subject: [PATCH] =?UTF-8?q?=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2=D0=B8=D1=82?= =?UTF-8?q?=D1=8C=20update.yml?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- update.yml | 130 +++++++++++++++++++++-------------------------------- 1 file changed, 50 insertions(+), 80 deletions(-) diff --git a/update.yml b/update.yml index b3a712a..d9a2082 100644 --- a/update.yml +++ b/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: "Обновление системы завершено!" \ No newline at end of file + - 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) \ No newline at end of file