Skip to content
Extraits de code Groupes Projets
Valider 32ab5c5e rédigé par Théo - Le Filament's avatar Théo - Le Filament
Parcourir les fichiers

change: improve docker compose and CRON for backups

parent 3a9c91ef
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
......@@ -2,6 +2,7 @@
- name: "Set empty lists to trigger actions on instances"
tags:
- "docker_metabase"
- "docker_metabase_restart"
- "docker_proxy"
set_fact:
......@@ -87,7 +88,7 @@
template_metabase_instance_setup: "{{ metabase_instance_setup }}"
ansible.builtin.template:
src: "backup.yaml.j2"
dest: "/home/docker/backups/backup-metabase_{{ template_metabase_instance.key }}{{ template_backup_account.key }}.yaml"
dest: "/home/docker/backups/backup-metabase_{{ template_metabase_instance.key }}_{{ template_backup_account.key }}.yaml"
owner: "root"
group: "root"
mode: "0400"
......@@ -107,15 +108,29 @@
item: "{{ item_account_instance.1 }}"
template_backup_account: "{{ item_account_instance.0 }}"
template_metabase_instance: "{{ metabase_instance }}"
# Compute a timestamp: time_start + index * (time_slot_duration - time_max_duration) / (#instance_to_backup - 1)
template_backup_timestamp: >
{{
(
('1970-01-01 ' + metabase_backup_config.time_start) | to_datetime
).timestamp()
+ ansible_loop.index0 * (
(
(metabase_backup_config.time_slot_duration | community.general.to_seconds)
- (metabase_backup_config.time_max_duration | community.general.to_seconds)
) / (ansible_loop.length - 1)
)
}}
ansible.builtin.cron:
name: "backup metabase_{{ template_metabase_instance.key }}{{ template_backup_account.key }}"
minute: "{{ '%H' | strftime((('1970-01-01 ' + backup_time_start) | to_datetime).timestamp() + (swift_metabase_accounts | length - template_backup_account.key) * ((backup_time_slot_duration | community.general.to_seconds - swift_metabase_accounts | length * backup_time_max_duration | community.general.to_seconds) / (swift_metabase_accounts | length - 1) + backup_time_max_duration | community.general.to_seconds) | int) }}"
hour: "{{ '%H' | strftime((('1970-01-01 ' + backup_time_start) | to_datetime).timestamp() + (swift_metabase_accounts | length - template_backup_account.key) * ((backup_time_slot_duration | community.general.to_seconds - swift_metabase_accounts | length * backup_time_max_duration | community.general.to_seconds) / (swift_metabase_accounts | length - 1) + backup_time_max_duration | community.general.to_seconds) | int) }}"
job: "/usr/bin/docker compose -f /home/docker/backups/backup-metabase_{{ template_metabase_instance.key }}{{ template_backup_account.key }}.yaml run --rm backup_metabase"
name: "backup metabase_{{ template_metabase_instance.key }}_{{ template_backup_account.key }}"
minute: "{{ '%M' | strftime(template_backup_timestamp | int) }}"
hour: "{{ '%H' | strftime(template_backup_timestamp | int) }}"
job: "/usr/bin/docker compose -f /home/docker/backups/backup-metabase_{{ template_metabase_instance.key }}_{{ template_backup_account.key }}.yaml run --rm backup_metabase"
loop: "{{ swift_metabase_accounts | dict2items | product(metabase_instances | dict2items) }}"
loop_control:
label: "account {{ template_backup_account.key }} for metabase {{ template_metabase_instance.key }}"
loop_var: item_account_instance
extended: true
when: >
(metabase_instance.value.backup.enabled | default(false))
and (inventory_hostname in groups.maintenance_contract)
{% set database_type = template_metabase_instance.value.database.type | default(default_metabase_database_type) %}
version: "2.1"
services:
backup_metabase:
image: ghcr.io/tecnativa/docker-duplicity-postgres:master
image: sources.le-filament.com:5050/lefilament/duplicity_image/duplicity:latest
hostname: {{ inventory_hostname_short | lower | regex_replace('_','') }}-metabase_{{ template_metabase_instance.key }}
environment:
SRC: "/mnt/backup/src"
DST: "swift://metabase_{{ template_metabase_instance.key }}_{{ inventory_hostname | lower }}"
{% if database_type == 'postgres' %}
PGHOST: "db"
PGDATABASE: "{{ template_metabase_instance.value.database.name }}"
PGUSER: "{{ template_metabase_instance.value.database.user }}"
PGPASSWORD: "{{ template_metabase_instance.value.database.password }}"
......@@ -19,27 +20,30 @@ services:
SWIFT_TENANTNAME: "{{ template_backup_account.value.tenantname }}"
SWIFT_TENANTID: "{{ template_backup_account.value.tenantid }}"
SWIFT_REGIONNAME: "{{ template_backup_account.value.regionname }}"
JOB_200_WHEN: "never"
{% if database_type == 'h2' %}
JOB_300_WHAT: "backup --full-if-older-than 6D"
{% endif %}
{% if database_type == 'postgres' %}
JOB_300_WHAT: "pg_dump --no-owner --format c --file $$SRC/$$PGDATABASE.pgdump && backup --full-if-older-than 6D"
{% endif %}
JOB_302_WHAT: "dup remove-all-but-n-full 5 --force $$DST $$@"
JOB_302_WHEN: "daily"
volumes:
- metabase_{{ template_metabase_instance.key }}{{ template_backup_account.key }}_backup_cache:/root/.cache/duplicity/:rw
- metabase_{{ template_metabase_instance.key }}_{{ template_backup_account.key }}_backup_cache:/root/.cache/duplicity/:rw
{% if database_type == 'h2' %}
- metabase_{{ template_metabase_instance.key }}_metabase:/mnt/backup/src/metabase:z
- metabase_{{ template_metabase_instance.key }}_metabase:/mnt/backup/src/metabase:ro
{% endif %}
networks:
{% if database_type == 'postgres' %}
- metabase_{{ template_metabase_instance.key }}_default
{% endif %}
- public
command:
- /etc/periodic/daily/jobrunner
command: >
/bin/ash -c "
echo \"info: start backuping\"
{% if database_type == 'postgres' %}
&& echo \"info: creating '$$SRC' directory...\"
&& mkdir --parents $$SRC
&& echo \"info: dumping '$$PGDATABASE' into '$$SRC/$$PGDATABASE.pgdump'...\"
&& pg_dump --no-owner --format c --file $$SRC/$$PGDATABASE.pgdump
{% endif %}
&& echo \"info: backuping '$$SRC' to '$$DST'...\"
&& duplicity backup --full-if-older-than 6D $$SRC $$DST
&& echo \"info: removing all but 5 full backups in '$$DST'\"
&& duplicity remove-all-but-n-full 5 --force $$DST
&& echo \"info: done\""
networks:
{% if database_type == 'postgres' %}
......@@ -51,7 +55,7 @@ networks:
encrypted: 1
volumes:
metabase_{{ template_metabase_instance.key }}{{ template_backup_account.key }}_backup_cache:
metabase_{{ template_metabase_instance.key }}_{{ template_backup_account.key }}_backup_cache:
{% if database_type == 'h2' %}
metabase_{{ template_metabase_instance.key }}_metabase:
external: true
......
{% set database_type = template_metabase_instance.value.database.type | default(default_metabase_database_type) %}
{% set default_database_setup = template_metabase_instance_setup.database[database_type] %}
version: "2.1"
services:
metabase:
image: "metabase/metabase"
......
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Veuillez vous inscrire ou vous pour commenter