mirror of
https://github.com/ansible/awx-operator.git
synced 2026-03-26 21:33:14 +00:00
Added option to also delete backup directory on PVC when AWXBackup CRD object is deleted
This commit is contained in:
@@ -43,6 +43,9 @@ spec:
|
|||||||
backup_storage_class:
|
backup_storage_class:
|
||||||
description: Storage class to use when creating PVC for backup
|
description: Storage class to use when creating PVC for backup
|
||||||
type: string
|
type: string
|
||||||
|
clean_backup_on_delete:
|
||||||
|
description: Flag to indicate if backup should be deleted on PVC if AWXBackup object is deleted
|
||||||
|
type: boolean
|
||||||
postgres_label_selector:
|
postgres_label_selector:
|
||||||
description: Label selector used to identify postgres pod for backing up data
|
description: Label selector used to identify postgres pod for backing up data
|
||||||
type: string
|
type: string
|
||||||
|
|||||||
0
projects/.gitkeep
Executable file → Normal file
0
projects/.gitkeep
Executable file → Normal file
@@ -74,7 +74,12 @@ To check the name of this secret, look at the postgresConfigurationSecret status
|
|||||||
The postgresql pod for the old deployment is used when backing up data to the new postgresql pod. If your postgresql pod has a custom label,
|
The postgresql pod for the old deployment is used when backing up data to the new postgresql pod. If your postgresql pod has a custom label,
|
||||||
you can pass that via the `postgres_label_selector` variable to make sure the postgresql pod can be found.
|
you can pass that via the `postgres_label_selector` variable to make sure the postgresql pod can be found.
|
||||||
|
|
||||||
|
It is also possible to tie the lifetime of the backup files to that of the AWXBackup resource object. To do that you can set the
|
||||||
|
`clean_backup_on_delete` value to true. This will delete the `backupDirectory` on the pvc associated with the AWXBackup object deleted.
|
||||||
|
|
||||||
|
```
|
||||||
|
clean_backup_on_delete: true
|
||||||
|
```
|
||||||
Testing
|
Testing
|
||||||
----------------
|
----------------
|
||||||
|
|
||||||
|
|||||||
@@ -13,3 +13,9 @@ backup_storage_requirements: ''
|
|||||||
|
|
||||||
# Set no_log settings on certain tasks
|
# Set no_log settings on certain tasks
|
||||||
no_log: 'true'
|
no_log: 'true'
|
||||||
|
|
||||||
|
# Variable to set when you want backups to be cleaned up when the CRD object is deleted
|
||||||
|
clean_backup_on_delete: false
|
||||||
|
|
||||||
|
# Variable to signal that this role is being run as a finalizer
|
||||||
|
finalizer_run: false
|
||||||
|
|||||||
47
roles/backup/tasks/creation.yml
Normal file
47
roles/backup/tasks/creation.yml
Normal file
@@ -0,0 +1,47 @@
|
|||||||
|
---
|
||||||
|
- name: Patching labels to {{ kind }} kind
|
||||||
|
k8s:
|
||||||
|
state: present
|
||||||
|
definition:
|
||||||
|
apiVersion: "{{ api_version }}"
|
||||||
|
kind: "{{ kind }}"
|
||||||
|
name: "{{ ansible_operator_meta.name }}"
|
||||||
|
namespace: "{{ ansible_operator_meta.namespace }}"
|
||||||
|
metadata:
|
||||||
|
name: "{{ ansible_operator_meta.name }}"
|
||||||
|
namespace: "{{ ansible_operator_meta.namespace }}"
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: "{{ ansible_operator_meta.name }}"
|
||||||
|
app.kubernetes.io/part-of: "{{ ansible_operator_meta.name }}"
|
||||||
|
app.kubernetes.io/managed-by: "{{ deployment_type }}-operator"
|
||||||
|
app.kubernetes.io/component: "{{ deployment_type }}"
|
||||||
|
app.kubernetes.io/operator-version: '{{ lookup("env", "OPERATOR_VERSION") }}'
|
||||||
|
|
||||||
|
- name: Look up details for this backup object
|
||||||
|
k8s_info:
|
||||||
|
api_version: "{{ api_version }}"
|
||||||
|
kind: "{{ kind }}"
|
||||||
|
name: "{{ ansible_operator_meta.name }}"
|
||||||
|
namespace: "{{ ansible_operator_meta.namespace }}"
|
||||||
|
register: this_backup
|
||||||
|
|
||||||
|
- block:
|
||||||
|
- include_tasks: init.yml
|
||||||
|
|
||||||
|
- include_tasks: postgres.yml
|
||||||
|
|
||||||
|
- include_tasks: awx-cro.yml
|
||||||
|
|
||||||
|
- include_tasks: secrets.yml
|
||||||
|
|
||||||
|
- name: Set flag signifying this backup was successful
|
||||||
|
set_fact:
|
||||||
|
backup_complete: true
|
||||||
|
|
||||||
|
- include_tasks: cleanup.yml
|
||||||
|
|
||||||
|
when:
|
||||||
|
- this_backup['resources'][0]['status']['backupDirectory'] is not defined
|
||||||
|
|
||||||
|
- name: Update status variables
|
||||||
|
include_tasks: update_status.yml
|
||||||
7
roles/backup/tasks/delete_backup.yml
Normal file
7
roles/backup/tasks/delete_backup.yml
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
---
|
||||||
|
- name: Cleanup backup associated with this option if enabled
|
||||||
|
k8s_exec:
|
||||||
|
namespace: "{{ backup_pvc_namespace }}"
|
||||||
|
pod: "{{ ansible_operator_meta.name }}-db-management"
|
||||||
|
command: >-
|
||||||
|
bash -c 'rm -rf {{ backup_dir }}'
|
||||||
19
roles/backup/tasks/finalizer.yml
Normal file
19
roles/backup/tasks/finalizer.yml
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
---
|
||||||
|
- name: Look up details for this backup object
|
||||||
|
k8s_info:
|
||||||
|
api_version: "{{ api_version }}"
|
||||||
|
kind: "{{ kind }}"
|
||||||
|
name: "{{ ansible_operator_meta.name }}"
|
||||||
|
namespace: "{{ ansible_operator_meta.namespace }}"
|
||||||
|
register: this_backup
|
||||||
|
|
||||||
|
- block:
|
||||||
|
- include_tasks: init.yml
|
||||||
|
|
||||||
|
- include_tasks: delete_backup.yml
|
||||||
|
|
||||||
|
- include_tasks: cleanup.yml
|
||||||
|
vars:
|
||||||
|
backup_dir: "{{ this_backup['resources'][0]['status']['backupDirectory'] }}"
|
||||||
|
when:
|
||||||
|
- clean_backup_on_delete and backup_dir is defined
|
||||||
@@ -1,5 +1,4 @@
|
|||||||
---
|
---
|
||||||
|
|
||||||
- name: Delete any existing management pod
|
- name: Delete any existing management pod
|
||||||
k8s:
|
k8s:
|
||||||
name: "{{ ansible_operator_meta.name }}-db-management"
|
name: "{{ ansible_operator_meta.name }}-db-management"
|
||||||
@@ -57,8 +56,8 @@
|
|||||||
apiVersion: v1
|
apiVersion: v1
|
||||||
kind: PersistentVolumeClaim
|
kind: PersistentVolumeClaim
|
||||||
metadata:
|
metadata:
|
||||||
name: '{{ deployment_name }}-backup-claim'
|
name: "{{ deployment_name }}-backup-claim"
|
||||||
namespace: '{{ backup_pvc_namespace }}'
|
namespace: "{{ backup_pvc_namespace }}"
|
||||||
ownerReferences: null
|
ownerReferences: null
|
||||||
when:
|
when:
|
||||||
- backup_pvc == '' or backup_pvc is not defined
|
- backup_pvc == '' or backup_pvc is not defined
|
||||||
|
|||||||
@@ -1,47 +1,8 @@
|
|||||||
---
|
---
|
||||||
- name: Patching labels to {{ kind }} kind
|
- name: Run creation tasks
|
||||||
k8s:
|
include_tasks: creation.yml
|
||||||
state: present
|
when: not finalizer_run
|
||||||
definition:
|
|
||||||
apiVersion: '{{ api_version }}'
|
|
||||||
kind: '{{ kind }}'
|
|
||||||
name: '{{ ansible_operator_meta.name }}'
|
|
||||||
namespace: '{{ ansible_operator_meta.namespace }}'
|
|
||||||
metadata:
|
|
||||||
name: '{{ ansible_operator_meta.name }}'
|
|
||||||
namespace: '{{ ansible_operator_meta.namespace }}'
|
|
||||||
labels:
|
|
||||||
app.kubernetes.io/name: '{{ ansible_operator_meta.name }}'
|
|
||||||
app.kubernetes.io/part-of: '{{ ansible_operator_meta.name }}'
|
|
||||||
app.kubernetes.io/managed-by: '{{ deployment_type }}-operator'
|
|
||||||
app.kubernetes.io/component: '{{ deployment_type }}'
|
|
||||||
app.kubernetes.io/operator-version: '{{ lookup("env", "OPERATOR_VERSION") }}'
|
|
||||||
|
|
||||||
- name: Look up details for this backup object
|
- name: Run finalizer tasks
|
||||||
k8s_info:
|
include_tasks: finalizer.yml
|
||||||
api_version: "{{ api_version }}"
|
when: finalizer_run
|
||||||
kind: "{{ kind }}"
|
|
||||||
name: "{{ ansible_operator_meta.name }}"
|
|
||||||
namespace: "{{ ansible_operator_meta.namespace }}"
|
|
||||||
register: this_backup
|
|
||||||
|
|
||||||
- block:
|
|
||||||
- include_tasks: init.yml
|
|
||||||
|
|
||||||
- include_tasks: postgres.yml
|
|
||||||
|
|
||||||
- include_tasks: awx-cro.yml
|
|
||||||
|
|
||||||
- include_tasks: secrets.yml
|
|
||||||
|
|
||||||
- name: Set flag signifying this backup was successful
|
|
||||||
set_fact:
|
|
||||||
backup_complete: true
|
|
||||||
|
|
||||||
- include_tasks: cleanup.yml
|
|
||||||
|
|
||||||
when:
|
|
||||||
- this_backup['resources'][0]['status']['backupDirectory'] is not defined
|
|
||||||
|
|
||||||
- name: Update status variables
|
|
||||||
include_tasks: update_status.yml
|
|
||||||
|
|||||||
@@ -11,6 +11,11 @@
|
|||||||
kind: AWXBackup
|
kind: AWXBackup
|
||||||
role: backup
|
role: backup
|
||||||
snakeCaseParameters: False
|
snakeCaseParameters: False
|
||||||
|
finalizer:
|
||||||
|
name: awx.ansible.com/finalizer
|
||||||
|
role: backup
|
||||||
|
vars:
|
||||||
|
finalizer_run: true
|
||||||
|
|
||||||
- version: v1beta1
|
- version: v1beta1
|
||||||
group: awx.ansible.com
|
group: awx.ansible.com
|
||||||
|
|||||||
Reference in New Issue
Block a user