- hosts: all vars: os_update_major_version: true # Can either be true or false | To toggle if systems need to be upgraded to newer codename os_update_version_codename: "trixie" # Change to switch major release (e.g. bookworm or trixie) | Used for jinja2 Template fill in as it determines the current codename of system where ansible is run on snapshot_name: "AUTO_before_major_{{ ansible_date_time.date }}" # Name of the snapshot to be created before major upgrade vars_files: # Load vault file for sensitive data like Proxmox API tokens - ../vault.yml tasks: - name: Verify if system is Debian debug: msg: "This playbook is running on a Debian system." when: ansible_os_family == "Debian" - name: Stop playbook if system is not Debian fail: msg: "This playbook only supports Debian." when: ansible_os_family != "Debian" - name: Read /etc/os-release ansible.builtin.slurp: src: /etc/os-release register: os_release when: ansible_os_family == "Debian" - name: Extract current codename ansible.builtin.set_fact: current_os_codename: >- {{ (os_release.content | b64decode).splitlines() | select('match','^VERSION_CODENAME=') | list | first | regex_replace('^VERSION_CODENAME=', '') | lower }} when: ansible_os_family == "Debian" - name: Show current and target codenames debug: msg: "Current codename: {{ current_os_codename }}, Target codename: {{ os_update_version_codename | lower }}" when: ansible_os_family == "Debian" - name: Include Proxmox Info task ansible.builtin.include_role: name: proxmox-automation tasks_from: get-vmid when: - ansible_os_family == "Debian" - current_os_codename | lower != os_update_version_codename | lower - name: Create Snapshot before Modifications ansible.builtin.include_role: name: proxmox-automation tasks_from: create-snapshots when: - ansible_os_family == "Debian" - current_os_codename | lower != os_update_version_codename | lower - name: Include OS update role ansible.builtin.include_role: name: os-updates tasks_from: update_major_version when: - ansible_os_family == "Debian" - current_os_codename | lower != os_update_version_codename | lower - name: Check if system is back online after reboot ansible.builtin.wait_for_connection: delay: 10 timeout: 300 when: - ansible_os_family == "Debian" - current_os_codename | lower != os_update_version_codename | lower