--- - name: Aerodrome K3s Control Plane Sequential Minor Version Upgrade hosts: k3s_aerodrome_masters gather_facts: false serial: 1 vars: target_k3s_version: "v1.27.16+k3s1" tasks: - name: Query pre-upgrade K3s version ansible.builtin.command: k3s --version register: pre_k3s_ver changed_when: false - name: Display pre-upgrade version ansible.builtin.debug: msg: "Upgrading {{ inventory_hostname }} from {{ pre_k3s_ver.stdout_lines[0] }} to {{ target_k3s_version }}" - name: Download target K3s release binary and replace executable ansible.builtin.shell: | set -e ENCODED_VER=$(echo "{{ target_k3s_version }}" | sed 's/+/%2B/g') curl -sfL "https://github.com/k3s-io/k3s/releases/download/${ENCODED_VER}/k3s-arm64" -o /usr/local/bin/k3s.new chmod +x /usr/local/bin/k3s.new mv /usr/local/bin/k3s.new /usr/local/bin/k3s register: k3s_download - name: Restart K3s systemd service ansible.builtin.systemd: name: k3s state: restarted - name: Wait for K3s systemd unit to report active ansible.builtin.command: systemctl is-active k3s register: k3s_active until: k3s_active.stdout == "active" retries: 20 delay: 4 changed_when: false - name: Wait for upgraded node to report Ready in Kubernetes ansible.builtin.command: kubectl get node {{ inventory_hostname }} -o jsonpath='{.status.conditions[?(@.type=="Ready")].status}' delegate_to: sninfr2lnxctl01 register: node_ready until: node_ready.stdout == "True" retries: 30 delay: 5 changed_when: false - name: Query post-upgrade K3s version ansible.builtin.command: k3s --version register: post_k3s_ver changed_when: false - name: Verify post-upgrade version matches target ansible.builtin.assert: that: - target_k3s_version in post_k3s_ver.stdout fail_msg: "Post-upgrade version does not match target {{ target_k3s_version }}" success_msg: "{{ inventory_hostname }} successfully upgraded to {{ target_k3s_version }}" - name: Settle etcd cluster state ansible.builtin.pause: seconds: 10