Add cluster safe update playbook
This playbook will perform a oneshot upgrade of the systems in the cluster, including performing a clean and safe reboot of the node(s) if required (either due to services needing a restart, or the kernel changing). It runs in serial=1 and only reboots if needed.
This commit is contained in:
parent
2d1b76ecdf
commit
b4ba4f9eda
|
@ -0,0 +1,107 @@
|
|||
---
|
||||
- hosts: all
|
||||
remote_user: deploy
|
||||
become: yes
|
||||
become_user: root
|
||||
gather_facts: yes
|
||||
serial: 1
|
||||
tasks:
|
||||
- name: set PVC maintenance mode
|
||||
command: pvc maintenance on
|
||||
|
||||
- name: aptitude full upgrade and cleanup
|
||||
apt:
|
||||
update_cache: "yes"
|
||||
autoremove: "yes"
|
||||
autoclean: "yes"
|
||||
upgrade: "full"
|
||||
|
||||
- name: clean apt archives
|
||||
file:
|
||||
dest: "/var/cache/apt/archives"
|
||||
state: "absent"
|
||||
|
||||
- name: check library freshness
|
||||
command: /usr/lib/check_mk_agent/plugins/freshness
|
||||
register: freshness
|
||||
changed_when: freshness.rc == 1
|
||||
failed_when: false
|
||||
|
||||
- name: check kernel version
|
||||
command: /usr/lib/check_mk_agent/plugins/kernelversion
|
||||
register: kernelversion
|
||||
changed_when: kernelversion.rc == 1
|
||||
failed_when: false
|
||||
|
||||
- name: restart system cleanly
|
||||
block:
|
||||
- name: secondary node
|
||||
command: 'pvc node secondary {{ ansible_hostname }}'
|
||||
ignore_errors: true
|
||||
|
||||
- name: wait 15 seconds for system to stabilize
|
||||
pause:
|
||||
seconds: "15"
|
||||
become: no
|
||||
connection: local
|
||||
|
||||
- name: flush node
|
||||
command: 'pvc node flush {{ ansible_hostname }} --wait'
|
||||
|
||||
- name: ensure VMs are migrated away
|
||||
shell: "virsh list | grep running | wc -l"
|
||||
register: virshcount
|
||||
failed_when: virshcount.stdout != "0"
|
||||
until: virshcount.stdout == "0"
|
||||
retries: 60
|
||||
delay: 10
|
||||
become: yes
|
||||
|
||||
- name: wait 15 seconds for system to stabilize
|
||||
pause:
|
||||
seconds: "15"
|
||||
become: no
|
||||
connection: local
|
||||
|
||||
- name: set OSD noout
|
||||
command: pvc storage osd set noout
|
||||
|
||||
- name: stop PVC flush daemon cleanly
|
||||
service:
|
||||
name: pvc-flush
|
||||
state: stopped
|
||||
|
||||
- name: stop PVC daemon cleanly
|
||||
service:
|
||||
name: pvcnoded
|
||||
state: stopped
|
||||
|
||||
- name: restart system
|
||||
reboot:
|
||||
post_reboot_delay: 15
|
||||
reboot_timeout: 1800
|
||||
|
||||
- name: unset OSD noout
|
||||
command: pvc storage osd unset noout
|
||||
|
||||
- name: unflush node
|
||||
command: 'pvc node ready {{ ansible_hostname }} --wait'
|
||||
|
||||
- name: wait 5 minutes for system to stabilize
|
||||
pause:
|
||||
seconds: "300"
|
||||
become: no
|
||||
connection: local
|
||||
|
||||
- name: reset any systemd failures
|
||||
command: systemctl reset-failed
|
||||
when: freshness.changed or kernelversion.changed
|
||||
|
||||
- name: set PVC maintenance mode
|
||||
command: pvc maintenance off
|
||||
|
||||
- name: wait 5 seconds for system to stabilize
|
||||
pause:
|
||||
seconds: "5"
|
||||
become: no
|
||||
connection: local
|
Loading…
Reference in New Issue