122 lines
3.7 KiB
YAML
Executable File
122 lines
3.7 KiB
YAML
Executable File
---
|
|
- 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
|