diff --git a/bootstrap/templates/ansible/playbooks/cluster-rollout-update.yaml.j2 b/bootstrap/templates/ansible/playbooks/cluster-rollout-update.yaml.j2 index 39ef4fec..ca3a7e43 100644 --- a/bootstrap/templates/ansible/playbooks/cluster-rollout-update.yaml.j2 +++ b/bootstrap/templates/ansible/playbooks/cluster-rollout-update.yaml.j2 @@ -11,26 +11,26 @@ ansible.builtin.pause: seconds: 5 tasks: - - name: Get the node's details + - name: Details ansible.builtin.command: "kubectl get node {% raw %}{{ inventory_hostname }}{% endraw %} -o json" register: kubectl_get_node delegate_to: "{% raw %}{{ groups['master'][0] }}{% endraw %}" failed_when: false changed_when: false - - name: Update node + - name: Update when: # When status.conditions[x].type == Ready then check stats.conditions[x].status for True|False - kubectl_get_node['stdout'] | from_json | json_query("status.conditions[?type == 'Ready'].status") # If spec.unschedulable is defined then the node is cordoned - not (kubectl_get_node['stdout'] | from_json).spec.unschedulable is defined block: - - name: Cordon node + - name: Cordon ansible.builtin.command: "kubectl cordon {% raw %}{{ inventory_hostname }}{% endraw %}" delegate_to: "{% raw %}{{ groups['master'][0] }}{% endraw %}" changed_when: false - - name: Wait for node to cordon + - name: Wait for cordon ansible.builtin.command: "kubectl get node {% raw %}{{ inventory_hostname }}{% endraw %} -o json" register: wait_for_cordon retries: 10 @@ -39,30 +39,35 @@ changed_when: false until: (wait_for_cordon['stdout'] | from_json).spec.unschedulable - - name: Cordon & drain node + - name: Drain ansible.builtin.command: "kubectl drain --ignore-daemonsets --delete-emptydir-data --force {% raw %}{{ inventory_hostname }}{% endraw %}" - delegate_to: "{% raw %}{{ groups['master'][0] }}{% endraw %}" + delegate_to: "{{ groups['master'][0] }}" changed_when: false - - name: Update all packages + - name: Update ansible.builtin.apt: upgrade: dist update_cache: true + - name: Check if reboot is required + ansible.builtin.stat: + path: /var/run/reboot-required + register: reboot_required + - name: Reboot + when: reboot_required.stat.exists ansible.builtin.reboot: msg: Rebooting node post_reboot_delay: 60 reboot_timeout: 3600 - - name: Uncordon node + - name: Uncordon ansible.builtin.command: "kubectl uncordon {% raw %}{{ inventory_hostname }}{% endraw %}" delegate_to: "{% raw %}{{ groups['master'][0] }}{% endraw %}" changed_when: false - - name: Wait for node to uncordon + - name: Wait for uncordon ansible.builtin.command: "kubectl get node {% raw %}{{ inventory_hostname }}{% endraw %} -o json" - register: wait_for_uncordon retries: 10 delay: 10 delegate_to: "{% raw %}{{ groups['master'][0] }}{% endraw %}"