*untested* Revamp of backup protocol and some cleanup
This commit is contained in:
1 parent
dc23952921
commit
829f433656
8 files changed
+196
-193
No files matched your search
@@ -0,0 +1,64 @@
|
||||
---
|
||||
- name: Ensure backup rules contains the necessary fields
|
||||
ansible.builtin.fail:
|
||||
msg: "You must define {{ backup_rule_checker }} in the backup ruleset"
|
||||
when: not mysql_backup_rules[backup_rule_checker] is defined
|
||||
loop:
|
||||
- target
|
||||
- target_port
|
||||
- target_username
|
||||
- target_password
|
||||
- database_name
|
||||
- backup_dir
|
||||
- backup_name_prefix
|
||||
- max_backups_kept
|
||||
loop_control:
|
||||
loop_var: backup_rule_checker
|
||||
|
||||
- name: Ensure necessary packages are installed
|
||||
ansible.builtin.package:
|
||||
name:
|
||||
- "python3-PyMySQL"
|
||||
- "mysql_community_client"
|
||||
state: present
|
||||
|
||||
- name: Make sure backup dir exists
|
||||
ansible.builtin.file:
|
||||
path: "{{ mysql_backup_rules['backup_dir'] }}"
|
||||
state: directory
|
||||
recurse: true
|
||||
|
||||
- name: Take a backup of the specified database
|
||||
ansible.mysql.mysql_db:
|
||||
name: "{{ mysql_backup_rules['database_name'] }}"
|
||||
state: dump
|
||||
target: "{{ mysql_backup_rules['backup_dir'] }}/{{ mysql_backup_rules['backup_name_prefix'] }}_{{ now().strftime('%Y%m%d%H%M%S') }}.sql.gz"
|
||||
login_host: "{{ mysql_backup_rules['target'] }}"
|
||||
login_port: "{{ mysql_backup_rules['target_port'] }}"
|
||||
login_user: "{{ mysql_backup_rules['target_username'] }}"
|
||||
login_password: "{{ mysql_backup_rules['target_password'] }}"
|
||||
|
||||
- name: Find all files that start with the backup_name_prefix
|
||||
ansible.builtin.find:
|
||||
paths: "{{ mysql_backup_rules.backup_dir }}"
|
||||
patterns: "{{ mysql_backup_rules.backup_name_prefix }}*"
|
||||
register: all_backup_files
|
||||
|
||||
- name: If too many backups kept
|
||||
when: all_backup_files.files | length > mysql_backup_rules.max_backups_kept
|
||||
block:
|
||||
- name: Get the oldest file paths
|
||||
ansible.builtin.set_fact:
|
||||
oldest_file_paths: >-
|
||||
{{ (all_backup_files.files | sort(attribute='mtime'))[:all_backup_files.files | length - mysql_backup_rules.max_backups_kept] |
|
||||
map(attribute='path') | list }}
|
||||
|
||||
- name: Remove the files
|
||||
ansible.builtin.file:
|
||||
path: "{{ old_file_to_delete }}"
|
||||
state: absent
|
||||
loop: "{{ oldest_file_paths }}"
|
||||
loop_control:
|
||||
loop_var: old_file_to_delete
|
||||
|
||||
|
||||
Reference in new issue
Block a user