ansible-linux-updater/patch_servers.yml

88 lines
3.0 KiB
YAML

---
- name: Patch servers to the latest patch level and check if reboot is required
hosts: all
become: yes
gather_facts: yes
tasks:
- name: Determine if the system is RPM or Debian based
ansible.builtin.shell: |
if [ -f /etc/redhat-release ]; then
echo "rpm"
elif [ -f /etc/debian_version ]; then
echo "deb"
else
echo "unknown"
fi
register: distro_type
changed_when: false
- name: Update systems and check for reboot requirement
block:
- name: Update RPM based systems and check for reboot
when: ansible_facts['os_family'] == "RedHat"
block:
- name: Update RPM based systems
ansible.builtin.dnf:
name: '*'
state: latest
- name: Check if reboot is required (RPM based systems)
ansible.builtin.shell: needs-restarting -r
register: reboot_needed_rpm
failed_when: reboot_needed_rpm.rc not in [0, 1, 3]
changed_when: reboot_needed_rpm.rc == 1
ignore_errors: yes
- name: Set fact if reboot is required for RPM based systems
set_fact:
reboot_required: "{{ reboot_needed_rpm.rc == 1 }}"
- name: Update Debian based systems and check for reboot
when: ansible_facts['os_family'] == "Debian"
block:
- name: Update Debian based systems
ansible.builtin.apt:
upgrade: dist
update_cache: yes
- name: Check if reboot is required (Debian based systems)
stat:
path: /var/run/reboot-required
register: reboot_needed_deb
changed_when: reboot_needed_deb.stat.exists
ignore_errors: yes
- name: Set fact if reboot is required for Debian based systems
set_fact:
reboot_required: "{{ reboot_needed_deb.stat.exists }}"
- name: Check if Elasticsearch is installed
shell: |
if systemctl list-units --type=service --state=active | grep -q elasticsearch; then
echo "yes"
else
echo "no"
fi
register: elasticsearch_installed
changed_when: false
- name: Reboot the system if required
when: reboot_required | default(false) and elasticsearch_installed.stdout != "yes"
reboot:
- name: Notify user about required reboot (with Elasticsearch)
when: reboot_required | default(false) and elasticsearch_installed.stdout == "yes"
debug:
msg: "Server {{ inventory_hostname }} requires a reboot due to updates, but it has Elasticsearch installed. Please reboot manually."
- name: Print uptime of each server
ansible.builtin.command: uptime
register: uptime_result
changed_when: false
- name: Display uptime results
debug:
msg: "Uptime for {{ inventory_hostname }}: {{ uptime_result.stdout }}"