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