Skip to content

Commit 274299d

Browse files
stuggiclaude
andcommitted
[b/r] Create GaleraBackup CRs dynamically in backup role
Discover Galera instances from OpenStackControlPlane CR (spec.galera.templates keys) and create GaleraBackup CRs for each before triggering the backup jobs. Adds galerabackup.yaml.j2 template and configurable storage class/size defaults (cifmw_backup_restore_galera_storage_class, cifmw_backup_restore_galera_storage_request, cifmw_backup_restore_galera_transfer_storage_request). Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
1 parent 77416d8 commit 274299d

3 files changed

Lines changed: 52 additions & 0 deletions

File tree

docs/dev/backup-restore/role/cifmw_backup_restore/defaults/main.yml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,9 @@ cifmw_backup_restore_auto_ack: false
2828

2929
# Backup
3030
cifmw_backup_restore_galera_backup_timeout: 10m
31+
cifmw_backup_restore_galera_storage_class: ""
32+
cifmw_backup_restore_galera_storage_request: 5Gi
33+
cifmw_backup_restore_galera_transfer_storage_request: 5Gi
3134
cifmw_backup_restore_oadp_backup_timeout: 30m
3235
cifmw_backup_restore_storage_location: velero-1
3336
cifmw_backup_restore_backup_ttl: 720h

docs/dev/backup-restore/role/cifmw_backup_restore/tasks/backup.yml

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,42 @@
114114
- "Step 1: Trigger Galera Database Dumps"
115115
- "========================================"
116116

117+
- name: Get Galera instance names from OpenStackControlPlane
118+
ansible.builtin.shell: |
119+
oc get openstackcontrolplane -n {{ cifmw_backup_restore_namespace }} \
120+
-o jsonpath='{.items[0].spec.galera.templates}' | jq -r 'keys[]'
121+
register: _galera_instance_names
122+
changed_when: false
123+
124+
- name: Set Galera instance list
125+
ansible.builtin.set_fact:
126+
_galera_instances: "{{ _galera_instance_names.stdout_lines if _galera_instance_names.stdout != '' else [] }}"
127+
128+
- name: Get default StorageClass if not specified
129+
ansible.builtin.shell: |
130+
oc get storageclass -o jsonpath='{.items[?(@.metadata.annotations.storageclass\.kubernetes\.io/is-default-class=="true")].metadata.name}'
131+
register: _default_storage_class
132+
changed_when: false
133+
when: cifmw_backup_restore_galera_storage_class == ""
134+
135+
- name: Set Galera backup storage class
136+
ansible.builtin.set_fact:
137+
_galera_storage_class: "{{ cifmw_backup_restore_galera_storage_class if cifmw_backup_restore_galera_storage_class != '' else _default_storage_class.stdout }}"
138+
139+
- name: Render GaleraBackup CRs
140+
ansible.builtin.template:
141+
src: galerabackup.yaml.j2
142+
dest: "{{ _cifmw_backup_restore_rendered_dir.path }}/galerabackup-{{ item }}.yaml"
143+
vars:
144+
galera_instance_name: "{{ item }}"
145+
loop: "{{ _galera_instances }}"
146+
147+
- name: Create GaleraBackup CRs
148+
ansible.builtin.shell: |
149+
oc apply -f {{ _cifmw_backup_restore_rendered_dir.path }}/galerabackup-{{ item }}.yaml
150+
loop: "{{ _galera_instances }}"
151+
changed_when: true
152+
117153
- name: Get list of GaleraBackup cronjobs
118154
ansible.builtin.shell: |
119155
oc get cronjob -n {{ cifmw_backup_restore_namespace }} -l app=galera -o jsonpath='{.items[*].metadata.name}'
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
apiVersion: mariadb.openstack.org/v1beta1
2+
kind: GaleraBackup
3+
metadata:
4+
name: {{ galera_instance_name }}
5+
namespace: {{ cifmw_backup_restore_namespace }}
6+
spec:
7+
databaseInstance: {{ galera_instance_name }}
8+
{% if _galera_storage_class %}
9+
storageClass: {{ _galera_storage_class }}
10+
{% endif %}
11+
storageRequest: {{ cifmw_backup_restore_galera_storage_request }}
12+
transferStorage:
13+
storageRequest: {{ cifmw_backup_restore_galera_transfer_storage_request }}

0 commit comments

Comments
 (0)