186 lines
4.7 KiB
YAML
186 lines
4.7 KiB
YAML
---
|
|
# Set the cluster into maintenance mode
|
|
- hosts: all
|
|
remote_user: deploy
|
|
become: yes
|
|
become_user: root
|
|
gather_facts: yes
|
|
tasks:
|
|
- name: set PVC maintenance mode
|
|
command: pvc cluster maintenance on
|
|
run_once: yes
|
|
ignore_errors: yes
|
|
|
|
# Run the PVC daemon role against the system (update pvc.conf)
|
|
- hosts: all
|
|
remote_user: deploy
|
|
become: yes
|
|
become_user: root
|
|
gather_facts: yes
|
|
tasks:
|
|
- set_fact:
|
|
this_node: "{{ inventory_hostname.split('.')[0] }}"
|
|
|
|
- set_fact:
|
|
is_coordinator: "{% for node in pvc_nodes if node.hostname == this_node %}{{ node.is_coordinator }}{% endfor %}"
|
|
|
|
- set_fact:
|
|
new_host: no
|
|
|
|
- name: import PVC daemon role
|
|
include_role:
|
|
name: pvc
|
|
tasks_from: pvc/main.yml
|
|
|
|
# Install the latest PVC packages & restart daemons to apply
|
|
- hosts: all
|
|
remote_user: deploy
|
|
become: yes
|
|
become_user: root
|
|
gather_facts: yes
|
|
serial: 1
|
|
tasks:
|
|
- name: install latest PVC packages
|
|
apt:
|
|
update_cache: yes
|
|
autoremove: yes
|
|
autoclean: yes
|
|
package:
|
|
- gunicorn
|
|
- python3-gunicorn
|
|
- python3-setuptools
|
|
- pvc-client-cli
|
|
- pvc-daemon-common
|
|
- pvc-daemon-api
|
|
- pvc-daemon-node
|
|
- pvc-daemon-health
|
|
- pvc-daemon-worker
|
|
state: latest
|
|
dpkg_options: "force-all"
|
|
register: packages
|
|
|
|
- name: clean apt archives
|
|
file:
|
|
dest: /var/cache/apt/archives
|
|
state: absent
|
|
|
|
- name: clean pycaches
|
|
command: 'find /usr/share/pvc -name "__pycache__" -exec rm -r {} \;'
|
|
ignore_errors: true
|
|
|
|
- name: restart daemons cleanly
|
|
block:
|
|
- name: secondary node
|
|
command: 'pvc node secondary --wait {{ ansible_hostname }}'
|
|
ignore_errors: true
|
|
|
|
- name: wait 15 seconds for system to stabilize
|
|
pause:
|
|
seconds: 15
|
|
become: no
|
|
connection: local
|
|
|
|
- name: restart PVC node daemons
|
|
service:
|
|
name: "{{ item }}"
|
|
state: restarted
|
|
enabled: yes
|
|
with_items:
|
|
- pvcnoded
|
|
- pvcworkerd
|
|
- pvchealthd
|
|
|
|
- name: wait 30 seconds for system to stabilize
|
|
pause:
|
|
seconds: 30
|
|
become: no
|
|
connection: local
|
|
|
|
- name: get service facts
|
|
service_facts:
|
|
|
|
- name: fail if PVC daemons are not running
|
|
fail:
|
|
msg: "PVC daemons are not running"
|
|
when: ansible_facts.services[item] is not defined or ansible_facts.services[item]["state"] != "running"
|
|
with_items:
|
|
- pvcnoded.service
|
|
- pvcworkerd.service
|
|
|
|
- name: reset any systemd failures
|
|
command: systemctl reset-failed
|
|
when: packages.changed
|
|
|
|
- name: wait 30 seconds for system to stabilize
|
|
pause:
|
|
seconds: 30
|
|
become: no
|
|
connection: local
|
|
|
|
# Set the cluster out of maintenance mode
|
|
- hosts: all
|
|
remote_user: deploy
|
|
become: yes
|
|
become_user: root
|
|
gather_facts: yes
|
|
tasks:
|
|
- name: restart PVC supplemental node daemons for schema updates
|
|
service:
|
|
name: "{{ item }}"
|
|
state: restarted
|
|
with_items:
|
|
- pvcworkerd
|
|
- pvchealthd
|
|
|
|
- name: become primary on first node
|
|
command: pvc node primary --wait
|
|
run_once: yes
|
|
|
|
- name: apply database migrations on first node (safe upgrades prevented this in dpkg)
|
|
command: /usr/share/pvc/pvc-api-db-upgrade
|
|
run_once: yes
|
|
|
|
- name: restart API daemon to apply database migrations
|
|
service:
|
|
name: "{{ item }}"
|
|
state: restarted
|
|
with_items:
|
|
- pvcapid
|
|
run_once: yes
|
|
|
|
- name: wait 30 seconds for system to stabilize
|
|
pause:
|
|
seconds: 30
|
|
become: no
|
|
connection: local
|
|
|
|
- name: unset PVC maintenance mode on first node
|
|
command: pvc cluster maintenance off
|
|
run_once: yes
|
|
|
|
# Clean up legacy configs if safe to do so
|
|
- hosts: all
|
|
remote_user: deploy
|
|
become: yes
|
|
become_user: root
|
|
gather_facts: yes
|
|
tasks:
|
|
- name: check if new configuration exists
|
|
stat:
|
|
path: /etc/pvc/pvc.conf
|
|
register: pvc_config_check
|
|
|
|
- name: check if installed PVC version is above 0.9.82
|
|
shell: "dpkg --compare-versions $(dpkg-query --showformat='${Version}' --show pvc-daemon-node) gt 0.9.82"
|
|
register: pvc_version_check
|
|
|
|
- name: remove obsolete PVC daemon configurations
|
|
file:
|
|
dest: "/etc/pvc/{{ item }}"
|
|
state: absent
|
|
with_items:
|
|
- pvcnoded.yaml
|
|
- pvcapid.yaml
|
|
- autobackup.yaml
|
|
when: pvc_config_check.stat.exists and pvc_version_check.rc == 0
|