diff --git a/update.yml b/update.yml index 20932f3..dce6296 100644 --- a/update.yml +++ b/update.yml @@ -1,95 +1,141 @@ --- - name: Update system (APT + Flatpak) - hosts: all - become: yes - gather_facts: yes + hosts: all:!localhost + become: true + gather_facts: false serial: 5 tasks: + # --------------------------------------------------------- + # Connectivity + # --------------------------------------------------------- + - name: Ensure SSH is reachable (skip host if not) - delegate_to: localhost - wait_for: + ansible.builtin.wait_for: host: "{{ ansible_host | default(inventory_hostname) }}" port: 22 timeout: 5 + delegate_to: localhost register: ssh_check - ignore_errors: yes + ignore_errors: true + become: false - - meta: end_host + - name: Skip host if SSH is unreachable + ansible.builtin.meta: end_host when: ssh_check is failed + - name: Gather facts + ansible.builtin.setup: + - name: Ping with retries (handle intermittent flaps) - ping: + ansible.builtin.ping: register: ping_result retries: 5 delay: 5 until: ping_result is success - - name: Wait for apt lock to be released - shell: | - while fuser /var/lib/dpkg/lock-frontend >/dev/null 2>&1; do - echo "Waiting for apt lock..." - sleep 5 - done - changed_when: false + # --------------------------------------------------------- + # APT + # --------------------------------------------------------- - name: Update apt cache - apt: - update_cache: yes + ansible.builtin.apt: + update_cache: true + lock_timeout: 300 - name: Perform full upgrade - apt: + ansible.builtin.apt: upgrade: full - autoremove: yes - autoclean: yes + autoremove: true + autoclean: true + lock_timeout: 300 register: apt_upgrade retries: 3 delay: 10 until: apt_upgrade is succeeded - name: Fix broken packages - command: apt-get -f install -y + ansible.builtin.command: + cmd: apt-get -f install -y register: fix_result failed_when: false changed_when: "'Setting up' in fix_result.stdout" + # --------------------------------------------------------- + # Flatpak + # --------------------------------------------------------- + - name: Check if Flatpak is installed - command: which flatpak + ansible.builtin.command: + cmd: which flatpak register: flatpak_check changed_when: false failed_when: false - name: Update system Flatpaks - command: flatpak update -y --noninteractive --system - when: flatpak_check.rc == 0 + ansible.builtin.command: + cmd: flatpak update -y --noninteractive --system + register: flatpak_system_update + changed_when: "'Nothing to do' not in flatpak_system_update.stdout" failed_when: false + when: flatpak_check.rc == 0 - name: Update user Flatpaks - command: flatpak update -y --noninteractive --user + ansible.builtin.command: + cmd: flatpak update -y --noninteractive --user become: false - when: flatpak_check.rc == 0 + register: flatpak_user_update + changed_when: "'Nothing to do' not in flatpak_user_update.stdout" failed_when: false + when: flatpak_check.rc == 0 - name: Remove unused Flatpaks - command: flatpak uninstall -y --noninteractive --unused + ansible.builtin.command: + cmd: flatpak uninstall -y --noninteractive --unused + register: flatpak_unused + changed_when: "'Nothing unused to uninstall' not in flatpak_unused.stdout" + failed_when: false when: flatpak_check.rc == 0 + + # --------------------------------------------------------- + # Snap + # --------------------------------------------------------- + + - name: Check if Snap is installed + ansible.builtin.command: + cmd: which snap + register: snap_check + changed_when: false failed_when: false - + - name: Update snap packages - command: snap refresh + ansible.builtin.command: + cmd: snap refresh + register: snap_refresh + changed_when: "'All snaps up to date' not in snap_refresh.stdout" failed_when: false - + when: snap_check.rc == 0 + + # --------------------------------------------------------- + # Reboot check + # --------------------------------------------------------- + - name: Check if reboot is required - stat: + ansible.builtin.stat: path: /var/run/reboot-required register: reboot_required - name: Notify if reboot required - debug: + ansible.builtin.debug: msg: "Reboot required on {{ inventory_hostname }}" when: reboot_required.stat.exists + # --------------------------------------------------------- + # Portainer + # Only runs when --tags portainer is specified + # --------------------------------------------------------- + - name: Update Portainer containers ansible.builtin.include_role: name: update_portainer @@ -98,4 +144,4 @@ - portainer tags: - never - - portainer + - portainer \ No newline at end of file