*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
@@ -1,141 +1,13 @@
|
||||
---
|
||||
# Bits an pieces of this play are stolen from https://github.com/gavinwill/ansible-role-pfsense-backup/tree/main
|
||||
- name: PFSense Backups
|
||||
hosts: pfsense_nodes
|
||||
gather_facts: false
|
||||
collections:
|
||||
- ansible.posix
|
||||
tasks:
|
||||
- name: "Log first stage start time"
|
||||
ansible.builtin.debug:
|
||||
msg: "{{ now() }}"
|
||||
run_once: true
|
||||
delegate_to: blacktide
|
||||
|
||||
- name: Mount backup share
|
||||
ansible.posix.mount:
|
||||
path: /backup
|
||||
src: "10.42.0.3:/backups/pfsense"
|
||||
fstype: nfs
|
||||
opts: "hard,intr,nodev,nosuid,noexec"
|
||||
state: ephemeral
|
||||
delegate_to: blacktide
|
||||
run_once: true
|
||||
become: true
|
||||
become_method: sudo
|
||||
|
||||
- name: Get Cookies and CSRF Token
|
||||
ansible.builtin.uri:
|
||||
url: "http://{{ backup_url }}/diag_backup.php"
|
||||
validate_certs: false
|
||||
method: GET
|
||||
return_content: true
|
||||
register: pfsense_cookie_token
|
||||
no_log: "{{ pfsense_backup_disable_logging | default(false) }}"
|
||||
delegate_to: blacktide
|
||||
|
||||
- name: Set CSRF Token and Cookie Fact
|
||||
ansible.builtin.set_fact:
|
||||
pfsense_backup_csrf: "{{ pfsense_cookie_token.content | regex_search('var\\s+csrfMagicToken\\s+=\\s+\\\"([a-f0-9sidp:;,]+)\\\"', '\\1') }}"
|
||||
pfsense_backup_cookie: "{{ pfsense_cookie_token.set_cookie }}"
|
||||
no_log: "{{ pfsense_backup_disable_logging | default(false) }}"
|
||||
|
||||
- name: Authenticate with backup page and register backup CSRF
|
||||
ansible.builtin.uri:
|
||||
url: "http://{{ backup_url }}/diag_backup.php"
|
||||
validate_certs: false
|
||||
follow_redirects: false
|
||||
method: POST
|
||||
return_content: true
|
||||
body_format: form-urlencoded
|
||||
status_code: 302
|
||||
body:
|
||||
login: Login
|
||||
usernamefld: "{{ backup_user }}"
|
||||
passwordfld: "{{ backup_user_password }}"
|
||||
__csrf_magic: "{{ pfsense_backup_csrf }}"
|
||||
headers:
|
||||
Cookie: "{{ pfsense_backup_cookie }}"
|
||||
register: pfsense_cookie_token_2
|
||||
delegate_to: blacktide
|
||||
no_log: "{{ pfsense_backup_disable_logging | default(false) }}"
|
||||
|
||||
- name: Set Cookie Fact from Backup page
|
||||
ansible.builtin.set_fact:
|
||||
pfsense_backup_cookie_1: "{{ pfsense_cookie_token_2.set_cookie }}"
|
||||
no_log: "{{ pfsense_backup_disable_logging | default(false) }}"
|
||||
|
||||
- name: Fetch Target page for new CSRF token
|
||||
ansible.builtin.uri:
|
||||
url: "http://{{ backup_url }}/diag_backup.php"
|
||||
validate_certs: false
|
||||
follow_redirects: false
|
||||
method: GET
|
||||
return_content: true
|
||||
headers:
|
||||
Cookie: "{{ pfsense_backup_cookie_1 }}"
|
||||
register: pfsense_cookie_token_3
|
||||
delegate_to: blacktide
|
||||
no_log: "{{ pfsense_backup_disable_logging | default(false) }}"
|
||||
|
||||
- name: Set fact for CSRF Token and Cookie
|
||||
ansible.builtin.set_fact:
|
||||
pfsense_backup_csrf_1: "{{ pfsense_cookie_token_3.content | regex_search('var\\s+csrfMagicToken\\s+=\\s+\\\"([a-f0-9sidp:;,]+)\\\"', '\\1') }}"
|
||||
pfsense_backup_cookie_2: "{{ pfsense_cookie_token_3.set_cookie }}"
|
||||
no_log: "{{ pfsense_backup_disable_logging | default(false) }}"
|
||||
|
||||
- name: Download Backup Configuration
|
||||
ansible.builtin.uri:
|
||||
url: "http://{{ backup_url }}/diag_backup.php"
|
||||
validate_certs: false
|
||||
follow_redirects: false
|
||||
method: "POST"
|
||||
return_content: true
|
||||
body_format: form-urlencoded
|
||||
body:
|
||||
download: download
|
||||
backupssh: "yes"
|
||||
backupdata: "yes"
|
||||
donotbackuprrd: "yes"
|
||||
__csrf_magic: "{{ pfsense_backup_csrf_1 }}"
|
||||
headers:
|
||||
Cookie: "{{ pfsense_backup_cookie_2 }}"
|
||||
dest: "{{ backup_location }}/{{ inventory_hostname }}_{{ now().strftime('%Y%m%d%H%M%S') }}.xml"
|
||||
changed_when: false
|
||||
delegate_to: blacktide
|
||||
no_log: "{{ pfsense_backup_disable_logging | default(false) }}"
|
||||
|
||||
- name: Find all PFSense backups for the current host
|
||||
ansible.builtin.find:
|
||||
paths: "{{ backup_location }}"
|
||||
patterns: "{{ inventory_hostname }}*"
|
||||
register: all_pfsense_backups
|
||||
delegate_to: blacktide
|
||||
|
||||
- name: If too many backups kept
|
||||
when: all_pfsense_backups.files | length > backup_number_to_keep
|
||||
block:
|
||||
- name: Get the oldest file paths
|
||||
ansible.builtin.set_fact:
|
||||
oldest_file_paths: >-
|
||||
{{ (all_pfsense_backups.files | sort(attribute='mtime'))[:all_pfsense_backups.files | length - backup_number_to_keep] |
|
||||
map(attribute='path') | list }}
|
||||
|
||||
- name: Remove the files
|
||||
ansible.builtin.file:
|
||||
path: "{{ item }}"
|
||||
state: absent
|
||||
loop: "{{ oldest_file_paths }}"
|
||||
delegate_to: blacktide
|
||||
|
||||
- name: Docker Infrastructure Compose Backups
|
||||
hosts: docker_nodes,!publicworks
|
||||
hosts: docker_nodes
|
||||
become: true
|
||||
become_method: sudo
|
||||
gather_facts: false
|
||||
collections:
|
||||
- community.docker
|
||||
- community.general
|
||||
- ansible.mysql
|
||||
vars:
|
||||
env_backups_to_keep: 10
|
||||
tasks:
|
||||
@@ -154,7 +26,7 @@
|
||||
ansible.builtin.include_role:
|
||||
name: docker_backup
|
||||
vars:
|
||||
backup_rules: "{{ item }}"
|
||||
docker_backup_rules: "{{ item }}"
|
||||
when: docker_backup is defined and docker_backup | length != 0
|
||||
loop: "{{ docker_backup }}"
|
||||
|
||||
|
||||
Reference in new issue
Block a user