matrix-backup-borg: integrate postgres backups, add extended borgmatic configuration
This commit is contained in:
parent
2df993977a
commit
d5f4c17146
@ -1081,13 +1081,33 @@ matrix_bot_mjolnir_systemd_required_services_list: |
|
|||||||
######################################################################
|
######################################################################
|
||||||
|
|
||||||
matrix_backup_borg_enabled: false
|
matrix_backup_borg_enabled: false
|
||||||
|
matrix_backup_borg_container_image_self_build: "{{ matrix_architecture not in ['amd64', 'arm32', 'arm64'] }}"
|
||||||
|
matrix_backup_borg_postgresql_enabled: "{{ matrix_postgres_enabled }}"
|
||||||
|
matrix_backup_borg_postgresql_databases_hostname: "{{ matrix_postgres_connection_hostname }}"
|
||||||
|
matrix_backup_borg_postgresql_databases_username: "{{ matrix_postgres_connection_username }}"
|
||||||
|
matrix_backup_borg_postgresql_databases_password: "{{ matrix_postgres_connection_password }}"
|
||||||
|
matrix_backup_borg_postgresql_databases_port: "{{ matrix_postgres_connection_port }}"
|
||||||
|
matrix_backup_borg_postgresql_databases: |
|
||||||
|
{{
|
||||||
|
(([{
|
||||||
|
'name': matrix_synapse_database_database
|
||||||
|
}] if (matrix_synapse_enabled and matrix_synapse_database_database == matrix_postgres_db_name and matrix_synapse_database_host == 'matrix-postgres') else [])
|
||||||
|
+
|
||||||
|
matrix_postgres_additional_databases)|map(attribute='name')|list
|
||||||
|
}}
|
||||||
matrix_backup_borg_location_source_directories:
|
matrix_backup_borg_location_source_directories:
|
||||||
- "{{ matrix_base_data_path }}"
|
- "{{ matrix_base_data_path }}"
|
||||||
matrix_backup_borg_location_exclude_patterns: |
|
matrix_backup_borg_location_exclude_patterns: |
|
||||||
{{
|
{{
|
||||||
{
|
([matrix_synapse_media_store_path + '/local_thumbnails', matrix_synapse_media_store_path + '/remote_thumbnail', matrix_synapse_media_store_path + '/url_cache', matrix_synapse_media_store_path + '/url_cache_thumbnails'] if matrix_homeserver_implementation == 'synapse' else [])
|
||||||
'synapse': ["{{ matrix_synapse_media_store_path }}/local_thumbnails", "{{ matrix_synapse_media_store_path }}/remote_thumbnail", "{{ matrix_synapse_media_store_path }}/url_cache", "{{ matrix_synapse_media_store_path }}/url_cache_thumbnails"],
|
+
|
||||||
}[matrix_homeserver_implementation]
|
([matrix_postgres_data_path] if matrix_postgres_enabled else [])
|
||||||
|
}}
|
||||||
|
matrix_backup_borg_systemd_required_services_list: |
|
||||||
|
{{
|
||||||
|
['docker.service']
|
||||||
|
+
|
||||||
|
(['matrix-postgres.service'] if matrix_postgres_enabled else [])
|
||||||
}}
|
}}
|
||||||
|
|
||||||
######################################################################
|
######################################################################
|
||||||
|
@ -1,18 +1,18 @@
|
|||||||
---
|
---
|
||||||
matrix_backup_borg_enabled: true
|
matrix_backup_borg_enabled: true
|
||||||
|
|
||||||
matrix_backup_borg_container_image_self_build: false
|
|
||||||
matrix_backup_borg_docker_repo: "https://github.com/borgmatic-collective/docker-borgmatic"
|
|
||||||
matrix_backup_borg_docker_src_files_path: "{{ matrix_base_data_path }}/borg/docker-src"
|
|
||||||
|
|
||||||
matrix_backup_borg_version: latest
|
|
||||||
matrix_backup_borg_docker_image: "{{ matrix_backup_borg_docker_image_name_prefix }}etke.cc/borgmatic:{{ matrix_backup_borg_version }}"
|
|
||||||
matrix_backup_borg_docker_image_name_prefix: "{{ 'localhost/' if matrix_backup_borg_container_image_self_build else 'registry.gitlab.com/' }}"
|
|
||||||
matrix_backup_borg_docker_image_force_pull: "{{ matrix_backup_borg_docker_image.endswith(':latest') }}"
|
|
||||||
|
|
||||||
matrix_backup_borg_base_path: "{{ matrix_base_data_path }}/backup-borg"
|
matrix_backup_borg_base_path: "{{ matrix_base_data_path }}/backup-borg"
|
||||||
matrix_backup_borg_config_path: "{{ matrix_backup_borg_base_path }}/config"
|
matrix_backup_borg_config_path: "{{ matrix_backup_borg_base_path }}/config"
|
||||||
|
|
||||||
|
matrix_backup_borg_container_image_self_build: false
|
||||||
|
matrix_backup_borg_docker_repo: "https://github.com/borgmatic-collective/docker-borgmatic"
|
||||||
|
matrix_backup_borg_docker_src_files_path: "{{ matrix_backup_borg_base_path }}/docker-src"
|
||||||
|
|
||||||
|
matrix_backup_borg_version: ""
|
||||||
|
matrix_backup_borg_docker_image: "{{ matrix_backup_borg_docker_image_name_prefix }}etke.cc/borgmatic:{{ matrix_backup_borg_version }}"
|
||||||
|
matrix_backup_borg_docker_image_name_prefix: "{{ 'localhost/' if matrix_backup_borg_container_image_self_build else 'registry.gitlab.com/' }}"
|
||||||
|
matrix_backup_borg_docker_image_force_pull: "{{ matrix_backup_borg_docker_image.endswith(':latest') or matrix_backup_borg_version|default('') == '' }}"
|
||||||
|
|
||||||
# A list of extra arguments to pass to the container
|
# A list of extra arguments to pass to the container
|
||||||
matrix_backup_borg_container_extra_arguments: []
|
matrix_backup_borg_container_extra_arguments: []
|
||||||
|
|
||||||
@ -28,6 +28,14 @@ matrix_backup_borg_schedule: "*-*-* 04:00:00"
|
|||||||
# what directories should be added to backup
|
# what directories should be added to backup
|
||||||
matrix_backup_borg_location_source_directories: []
|
matrix_backup_borg_location_source_directories: []
|
||||||
|
|
||||||
|
# postgres db backup
|
||||||
|
matrix_backup_borg_postgresql_enabled: true
|
||||||
|
matrix_backup_borg_postgresql_databases: []
|
||||||
|
matrix_backup_borg_postgresql_databases_hostname: "matrix-postgres"
|
||||||
|
matrix_backup_borg_postgresql_databases_username: "matrix"
|
||||||
|
matrix_backup_borg_postgresql_databases_password: ""
|
||||||
|
matrix_backup_borg_postgresql_databases_port: 5432
|
||||||
|
|
||||||
# target repositories
|
# target repositories
|
||||||
matrix_backup_borg_location_repositories: []
|
matrix_backup_borg_location_repositories: []
|
||||||
|
|
||||||
@ -61,3 +69,25 @@ matrix_backup_borg_retention_keep_yearly: 2
|
|||||||
|
|
||||||
# retention prefix
|
# retention prefix
|
||||||
matrix_backup_borg_retention_prefix: "matrix-"
|
matrix_backup_borg_retention_prefix: "matrix-"
|
||||||
|
|
||||||
|
# Default borgmatic configuration template which covers the generic use case.
|
||||||
|
# You can customize it by controlling the various variables inside it.
|
||||||
|
#
|
||||||
|
# For a more advanced customization, you can extend the default (see `matrix_backup_borg_configuration_extension_yaml`)
|
||||||
|
# or completely replace this variable with your own template.
|
||||||
|
matrix_backup_borg_configuration_yaml: "{{ lookup('template', 'templates/config.yaml.j2') }}"
|
||||||
|
|
||||||
|
matrix_backup_borg_configuration_extension_yaml: |
|
||||||
|
# Your custom YAML configuration for borgmatic goes here.
|
||||||
|
# This configuration extends the default starting configuration (`matrix_borg_configuration_yaml`).
|
||||||
|
#
|
||||||
|
# You can override individual variables from the default configuration, or introduce new ones.
|
||||||
|
#
|
||||||
|
# If you need something more special, you can take full control by
|
||||||
|
# completely redefining `matrix_backup_borg_configuration_yaml`.
|
||||||
|
|
||||||
|
matrix_backup_borg_configuration_extension: "{{ matrix_backup_borg_configuration_extension_yaml|from_yaml if matrix_backup_borg_configuration_extension_yaml|from_yaml is mapping else {} }}"
|
||||||
|
|
||||||
|
# Holds the final borgmatic configuration (a combination of the default and its extension).
|
||||||
|
# You most likely don't need to touch this variable. Instead, see `matrix_backup_borg_configuration_yaml`.
|
||||||
|
matrix_backup_borg_configuration: "{{ matrix_backup_borg_configuration_yaml|from_yaml|combine(matrix_backup_borg_configuration_extension, recursive=True) }}"
|
||||||
|
@ -1,4 +1,7 @@
|
|||||||
---
|
---
|
||||||
|
- import_tasks: "{{ role_path }}/tasks/util/detect_existing_postgres_version.yml"
|
||||||
|
when: 'matrix_backup_borg_enabled|bool and matrix_backup_borg_postgresql_enabled|bool and matrix_postgres_backup_postgres_data_path != ""'
|
||||||
|
|
||||||
- name: Ensure borg paths exist
|
- name: Ensure borg paths exist
|
||||||
file:
|
file:
|
||||||
path: "{{ item.path }}"
|
path: "{{ item.path }}"
|
||||||
@ -11,9 +14,9 @@
|
|||||||
- {path: "{{ matrix_backup_borg_docker_src_files_path }}", when: true}
|
- {path: "{{ matrix_backup_borg_docker_src_files_path }}", when: true}
|
||||||
when: "item.when|bool"
|
when: "item.when|bool"
|
||||||
|
|
||||||
- name: Ensure borg config is created
|
- name: Ensure borgmatic config is created
|
||||||
template:
|
copy:
|
||||||
src: "{{ role_path }}/templates/config.yaml.j2"
|
content: "{{ matrix_backup_borg_configuration|to_nice_yaml(indent=2, width=999999) }}"
|
||||||
dest: "{{ matrix_backup_borg_config_path }}/config.yaml"
|
dest: "{{ matrix_backup_borg_config_path }}/config.yaml"
|
||||||
owner: "{{ matrix_user_username }}"
|
owner: "{{ matrix_user_username }}"
|
||||||
group: "{{ matrix_user_groupname }}"
|
group: "{{ matrix_user_groupname }}"
|
||||||
|
@ -0,0 +1,42 @@
|
|||||||
|
---
|
||||||
|
|
||||||
|
# This utility aims to determine if there is some existing Postgres version in use or not.
|
||||||
|
# If there is, it also tries to detect the Docker image that corresponds to that version.
|
||||||
|
|
||||||
|
- name: Initialize Postgres version determination variables (default to empty)
|
||||||
|
set_fact:
|
||||||
|
matrix_backup_borg_postgresql_detection_pg_version_path: "{{ matrix_postgres_data_path }}/PG_VERSION"
|
||||||
|
matrix_backup_borg_postgresql_detected_existing: false
|
||||||
|
matrix_backup_borg_postgresql_detected_version: ""
|
||||||
|
matrix_backup_borg_version: ""
|
||||||
|
|
||||||
|
- name: Determine existing Postgres version (check PG_VERSION file)
|
||||||
|
stat:
|
||||||
|
path: "{{ matrix_backup_borg_postgresql_detection_pg_version_path }}"
|
||||||
|
register: result_pg_version_stat
|
||||||
|
|
||||||
|
- set_fact:
|
||||||
|
matrix_backup_borg_postgresql_detected_existing: true
|
||||||
|
when: "result_pg_version_stat.stat.exists"
|
||||||
|
|
||||||
|
- name: Determine existing Postgres version (read PG_VERSION file)
|
||||||
|
slurp:
|
||||||
|
src: "{{ matrix_backup_borg_postgresql_detection_pg_version_path }}"
|
||||||
|
register: result_pg_version
|
||||||
|
when: matrix_backup_borg_postgresql_detected_existing|bool
|
||||||
|
|
||||||
|
- name: Determine existing Postgres version (make sense of PG_VERSION file)
|
||||||
|
set_fact:
|
||||||
|
matrix_backup_borg_postgresql_detected_version: "{{ result_pg_version['content']|b64decode|replace('\n', '') }}"
|
||||||
|
when: matrix_backup_borg_postgresql_detected_existing|bool
|
||||||
|
|
||||||
|
- name: Determine corresponding Docker image version to detected version
|
||||||
|
set_fact:
|
||||||
|
matrix_backup_borg_version: "{{ matrix_backup_borg_postgresql_detected_version }}"
|
||||||
|
when: "matrix_backup_borg_postgresql_detected_version == '12' or matrix_backup_borg_postgresql_detected_version.startswith('12.') or matrix_backup_borg_postgresql_detected_version == '13' or matrix_backup_borg_postgresql_detected_version.startswith('13.') or matrix_backup_borg_postgresql_detected_version == '14' or matrix_backup_borg_postgresql_detected_version.startswith('14.')"
|
||||||
|
|
||||||
|
- name: Fail if existing Postgres version is not supported by borgmatic docker image
|
||||||
|
fail:
|
||||||
|
msg: >-
|
||||||
|
Your Postgres v{{ matrix_backup_borg_postgresql_detected_version }} is not supported.
|
||||||
|
when: "matrix_backup_borg_version == ''"
|
@ -26,6 +26,16 @@ consistency:
|
|||||||
- archives
|
- archives
|
||||||
|
|
||||||
hooks:
|
hooks:
|
||||||
|
{% if matrix_backup_borg_postgresql_enabled %}
|
||||||
|
postgresql_databases:
|
||||||
|
{% for database in matrix_backup_borg_postgresql_databases %}
|
||||||
|
- name: {{ database }}
|
||||||
|
hostname: {{ matrix_backup_borg_postgresql_databases_hostname }}
|
||||||
|
username: {{ matrix_backup_borg_postgresql_databases_username }}
|
||||||
|
password: {{ matrix_backup_borg_postgresql_databases_password }}
|
||||||
|
port: {{ matrix_backup_borg_postgresql_databases_port }}
|
||||||
|
{% endfor %}
|
||||||
|
{% endif %}
|
||||||
after_backup:
|
after_backup:
|
||||||
- echo "Backup created."
|
- echo "Backup created."
|
||||||
on_error:
|
on_error:
|
||||||
|
@ -13,7 +13,6 @@
|
|||||||
- matrix-postgres
|
- matrix-postgres
|
||||||
- matrix-redis
|
- matrix-redis
|
||||||
- matrix-corporal
|
- matrix-corporal
|
||||||
- matrix-backup-borg
|
|
||||||
- matrix-bridge-appservice-discord
|
- matrix-bridge-appservice-discord
|
||||||
- matrix-bridge-appservice-slack
|
- matrix-bridge-appservice-slack
|
||||||
- matrix-bridge-appservice-webhooks
|
- matrix-bridge-appservice-webhooks
|
||||||
@ -62,4 +61,5 @@
|
|||||||
- matrix-aux
|
- matrix-aux
|
||||||
- matrix-postgres-backup
|
- matrix-postgres-backup
|
||||||
- matrix-prometheus-postgres-exporter
|
- matrix-prometheus-postgres-exporter
|
||||||
|
- matrix-backup-borg
|
||||||
- matrix-common-after
|
- matrix-common-after
|
||||||
|
Loading…
Reference in New Issue
Block a user