Files
homelab/playbooks/update-linux-os.yml
2025-03-25 00:55:59 -05:00

123 lines
3.7 KiB
YAML

---
- name: Linux OS Upgrade
hosts: all
gather_facts: true
become: true
tasks:
- name: Update all packages
ansible.builtin.package:
name: '*'
state: latest
update_cache: true
- name: Upgrade Debian and Ubuntu systems with apt
when: ansible_os_family == "Debian"
block:
- name: Dist-upgrade
ansible.builtin.apt:
upgrade: dist
update_cache: true
register: upgrade_result
- name: Debain check if reboot is required
ansible.builtin.shell: "[ -f /var/run/reboot-required ]"
failed_when: false
register: debian_reboot_required
changed_when: debian_reboot_required.rc == 0
notify:
- Reboot server
- name: Debian remove unneeded dependencies
ansible.builtin.apt:
autoremove: true
register: autoremove_result
- name: Debian print errors if upgrade failed
ansible.builtin.debug:
msg: |
Upgrade Result: {{ upgrade_result }}
Autoremove Result: {{ autoremove_result }}
- name: Upgrade RHEL systems with DNF
when: ansible_os_family == "RedHat" and not (ansible_distribution_major_version == "7")
block:
- name: Get packages that can be upgraded with DNF
ansible.builtin.dnf:
list: upgrades
state: latest
update_cache: true
register: reg_dnf_output_all
- name: List packages that can be upgraded with DNF
ansible.builtin.debug:
msg: "{{ reg_dnf_output_all.results | map(attribute='name') | list }}"
- name: Upgrade packages with DNF
become: true
ansible.builtin.dnf:
name: '*'
state: latest
update_cache: true
update_only: false
register: reg_upgrade_ok
- name: Print DNF errors if upgrade failed
ansible.builtin.debug:
msg: "Packages upgrade failed"
when: reg_upgrade_ok is not defined
- name: Install dnf-utils
when: reg_dnf_output_all is defined
become: true
ansible.builtin.dnf:
name: 'dnf-utils'
state: latest
update_cache: true
- name: Upgrade legacy RHEL systems with YUM
when: ansible_os_family == "RedHat" and ansible_distribution_major_version == "7"
block:
- name: Get packages that can be upgraded with YUM
ansible.builtin.yum:
list: upgrades
state: latest
update_cache: true
register: reg_yum_output_all
- name: List packages that can be upgraded with YUM
ansible.builtin.debug:
msg: "{{ reg_yum_output_all.results | map(attribute='name') | list }}"
- name: Upgrade packages with YUM
become: true
ansible.builtin.yum:
name: '*'
state: latest
update_cache: true
update_only: false
register: reg_yum_upgrade_ok
- name: Print YUM errors if upgrade failed
ansible.builtin.debug:
msg: "Packages upgrade failed"
when: reg_yum_upgrade_ok is not defined
- name: Check legacy RHEL system if a reboot is required
become: true
ansible.builtin.command: needs-restarting -r
register: reg_reboot_required
ignore_errors: true
failed_when: false
changed_when: reg_reboot_required.rc != 0
notify:
- Reboot server
handlers:
- name: Reboot server
ansible.builtin.reboot:
msg: "Reboot initiated by Ansible after OS update"
reboot_timeout: 3600
test_command: uptime