Created
January 16, 2026 13:57
-
-
Save mtelvers/dbc3828eab622530a67d72535feb5908 to your computer and use it in GitHub Desktop.
Update Ubuntu machines to Noble
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| - hosts: all | |
| serial: 1 | |
| gather_facts: true | |
| vars: | |
| target_release: noble | |
| tasks: | |
| - name: Skip hosts that are not ARM64 workers | |
| meta: end_host | |
| when: builder_pool != 'linux-arm64' | |
| - name: Check current Ubuntu release | |
| debug: | |
| msg: "Current release: {{ ansible_distribution_release }}" | |
| - name: Skip hosts already on Noble | |
| meta: end_host | |
| when: ansible_distribution_release == target_release | |
| - name: Check for held packages | |
| shell: apt-mark showhold | |
| become: true | |
| register: held_packages | |
| - name: Show held packages | |
| debug: | |
| var: held_packages.stdout_lines | |
| when: held_packages.stdout_lines | length > 0 | |
| - name: Unhold all held packages | |
| shell: apt-mark unhold {{ held_packages.stdout_lines | join(' ') }} | |
| become: true | |
| when: held_packages.stdout_lines | length > 0 | |
| - name: Full system update | |
| shell: | | |
| apt-get update | |
| DEBIAN_FRONTEND=noninteractive apt-get -y -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" dist-upgrade | |
| apt-get -y autoremove --purge | |
| apt-get -y install update-manager-core | |
| become: true | |
| - name: Check what updates remain | |
| shell: apt list --upgradable 2>/dev/null | grep -v "Listing..." | |
| become: true | |
| register: remaining_updates | |
| failed_when: false | |
| - name: Show remaining updates | |
| debug: | |
| var: remaining_updates.stdout_lines | |
| when: remaining_updates.stdout_lines | length > 0 | |
| - name: Check if reboot is required after updates | |
| stat: | |
| path: /var/run/reboot-required | |
| register: reboot_required | |
| - name: Reboot if required after package updates | |
| reboot: | |
| reboot_timeout: 600 | |
| become: true | |
| when: reboot_required.stat.exists | |
| - name: Wait for system to come back online after pre-upgrade reboot | |
| wait_for_connection: | |
| delay: 30 | |
| timeout: 300 | |
| when: reboot_required.stat.exists | |
| - name: Re-gather facts after potential reboot | |
| setup: | |
| when: reboot_required.stat.exists | |
| - name: Run do-release-upgrade | |
| shell: do-release-upgrade -f DistUpgradeViewNonInteractive | |
| become: true | |
| register: upgrade_result | |
| - name: Display upgrade output | |
| debug: | |
| var: upgrade_result.stdout_lines | |
| - name: Reboot the machine after upgrade | |
| reboot: | |
| reboot_timeout: 600 | |
| become: true | |
| - name: Wait for system to come back online | |
| wait_for_connection: | |
| delay: 30 | |
| timeout: 300 | |
| - name: Gather facts after reboot | |
| setup: | |
| - name: Verify upgrade was successful | |
| assert: | |
| that: | |
| - ansible_distribution_release == target_release | |
| fail_msg: "Upgrade failed - system is on {{ ansible_distribution_release }} instead of {{ target_release }}" | |
| success_msg: "Successfully upgraded to Ubuntu {{ target_release }}" |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment