diff --git a/playbooks/update.yml b/playbooks/update.yml new file mode 100644 index 0000000..2c3cec3 --- /dev/null +++ b/playbooks/update.yml @@ -0,0 +1,76 @@ +--- +- name: System update for all managed hosts + hosts: all + become: yes + gather_facts: yes + + tasks: + # 1. Показываем текущую версию ОС и ядра (для контекста) + - name: Show OS and kernel version + debug: + msg: + - "Host: {{ inventory_hostname }}" + - "OS: {{ ansible_distribution }} {{ ansible_distribution_version }}" + - "Kernel: {{ ansible_kernel }}" + + # 2. Обновляем кэш apt и запоминаем, изменился ли он + - name: Update apt cache + apt: + update_cache: yes + cache_valid_time: 3600 + register: apt_update_result + + - name: Show apt cache update status + debug: + msg: "Apt cache was {{ 'updated' if apt_update_result.changed else 'already up to date' }}" + + # 3. Получаем список пакетов, которые можно обновить (до обновления) + - name: Get list of upgradable packages + command: apt list --upgradable + register: upgradable_before + changed_when: false + ignore_errors: yes # если команда недоступна, продолжить + + - name: Show upgradable packages before update + debug: + var: upgradable_before.stdout_lines + when: upgradable_before.stdout_lines | length > 0 + + # 4. Выполняем полное обновление (dist-upgrade) + - name: Perform dist-upgrade (full upgrade) + apt: + upgrade: dist + autoremove: yes + autoclean: yes + register: apt_upgrade_result + + # 5. Показываем результат обновления (что изменилось) + - name: Show upgrade results + debug: + msg: + - "Packages upgraded: {{ apt_upgrade_result.results | default([]) | map(attribute='packages') | list | flatten | unique | join(', ') if apt_upgrade_result.results is defined else 'No package list available' }}" + when: apt_upgrade_result.changed + + # 6. Если изменений не было – сообщаем об этом + - name: No packages were upgraded + debug: + msg: "All packages are up to date." + when: not apt_upgrade_result.changed + + # 7. Проверяем, требуется ли перезагрузка (наличие /var/run/reboot-required) + - name: Check if reboot is required + stat: + path: /var/run/reboot-required + register: reboot_required_file + + # - name: Reboot if required + # reboot: + # reboot_timeout: 600 + # pre_reboot_delay: 30 + # post_reboot_delay: 30 + # when: reboot_required_file.stat.exists + + # - name: Reboot not required + # debug: + # msg: "No reboot required." + # when: not reboot_required_file.stat.exists \ No newline at end of file