Files

93 lines
3.6 KiB
YAML

---
# Ensure Ceph is healthy, before starting to patch
- name: Ensure Ceph is HEALTH_OK and no rebalancing
shell: |
ceph status | grep 'HEALTH_OK' && ! ceph status | grep -q -e 'degraded' -e 'remapped'
register: ceph_health
failed_when: ceph_health.rc != 0
delegate_to: "{{ play_hosts[0] }}"
# Ensure no node is in Maintenance Mode before patching
- name: Ensure no node is in mainteance mode
shell: ha-manager status | grep '^lrm ' | grep -e maintenance | wc -l
register: no_node_maintenance
failed_when: no_node_maintenance.stdout|int != 0
delegate_to: "{{ play_hosts[0] }}"
# Check that all VMs are in a HA Group, so they will be migrated when the host gets set to maintenance Mode
- name: Ensure all VMs are in a HA Group
shell: |
for res in $(pvesh get /cluster/resources -type vm --output-format json|jq '.[]|select(has("hastate")|not)|.vmid'); do ha-manager add $res ;done
- block:
# Set the noout flag to ensure no data on ceph is moved, while a host is unavailable
- name: Set Ceph noout flag (only first run)
shell: ceph osd set noout
# Enable the maintenance Mode of the Host
- name: Enable maintenance mode and migrate VMs
shell: ha-manager crm-command node-maintenance enable {{ inventory_hostname }}
ignore_errors: false
# Wait till all resources are migrate away
- name: Wait until no VMs are running on this host
shell: |
qm list | grep running | wc -l
register: vm_count
changed_when: false
retries: "{{ long_task.retries }}"
delay: "{{ long_task.delay }}"
until: vm_count.stdout|int == 0
- name: Wait until no LXCs are running on this host
shell: |
pct list | grep running | wc -l
register: lxc_count
changed_when: false
retries: "{{ long_task.retries }}"
delay: "{{ long_task.delay }}"
until: lxc_count.stdout|int == 0
# Install latest Packages
- name: Update apt packages
apt:
update_cache: yes
upgrade: dist
autoremove: yes
# Compare if the current running kernel is the same as the latest kernel
- name: Get expected boot kernel version
shell: |
grep vmlinuz /boot/grub/grub.cfg | head -1 | awk '{ print $2 }' | sed -e 's%/boot/vmlinuz-%%;s%/ROOT/pve-1@%%'
register: boot_kernel
changed_when: false
- name: Get currently running kernel version
shell: uname -r
register: running_kernel
changed_when: false
# If a newer kernel is on the system, then reboot
- name: Reboot if required
reboot:
reboot_timeout: 600
post_reboot_delay: 60
when: boot_kernel.stdout.strip() != running_kernel.stdout.strip()
# Disable Ceph noout, as soon as the host is online
- name: Unset Ceph noout flag
shell: ceph osd unset noout
- name: Ensure Ceph is HEALTH_OK again
shell: |
ceph status | grep 'HEALTH_OK' && ! ceph status | grep -q -e 'degraded' -e 'remapped'
register: ceph_health
retries: "{{ long_task.retries }}"
delay: "{{ long_task.delay }}"
failed_when: ceph_health.rc != 0
delegate_to: "{{ play_hosts[0] }}"
- name: Disable maintenance mode and migrate VMs
shell: ha-manager crm-command node-maintenance disable {{ inventory_hostname }}
ignore_errors: false
- name: Ensure no node is in mainteance mode
shell: ha-manager status | grep '^lrm ' | grep -e maintenance | wc -l
register: no_node_maintenance
failed_when: no_node_maintenance.stdout|int != 0
retries: "{{ long_task.retries }}"
delay: "{{ long_task.delay }}"