49 lines
1.6 KiB
YAML
49 lines
1.6 KiB
YAML
---
|
|
# Backup all docker-compose configs and data
|
|
- name: Backup Docker configurations
|
|
hosts: "{{ target_host | default('all') }}"
|
|
gather_facts: true
|
|
|
|
vars:
|
|
backup_dest: "{{ backup_path | default('/backup') }}"
|
|
backup_timestamp: "{{ ansible_date_time.date }}_{{ ansible_date_time.hour }}{{ ansible_date_time.minute }}"
|
|
|
|
tasks:
|
|
- name: Create backup directory
|
|
ansible.builtin.file:
|
|
path: "{{ backup_dest }}/{{ inventory_hostname }}"
|
|
state: directory
|
|
mode: '0755'
|
|
become: "{{ ansible_become | default(false) }}"
|
|
delegate_to: localhost
|
|
|
|
- name: Find all docker-compose files
|
|
ansible.builtin.find:
|
|
paths: "{{ docker_data_path }}"
|
|
patterns: "docker-compose.yml,docker-compose.yaml,.env"
|
|
recurse: true
|
|
register: compose_files
|
|
|
|
- name: Archive docker configs
|
|
ansible.builtin.archive:
|
|
path: "{{ docker_data_path }}"
|
|
dest: "/tmp/{{ inventory_hostname }}_configs_{{ backup_timestamp }}.tar.gz"
|
|
format: gz
|
|
exclude_path:
|
|
- "*/data/*"
|
|
- "*/logs/*"
|
|
- "*/cache/*"
|
|
become: "{{ ansible_become | default(false) }}"
|
|
|
|
- name: Fetch backup to control node
|
|
ansible.builtin.fetch:
|
|
src: "/tmp/{{ inventory_hostname }}_configs_{{ backup_timestamp }}.tar.gz"
|
|
dest: "{{ backup_dest }}/{{ inventory_hostname }}/"
|
|
flat: true
|
|
|
|
- name: Clean up remote archive
|
|
ansible.builtin.file:
|
|
path: "/tmp/{{ inventory_hostname }}_configs_{{ backup_timestamp }}.tar.gz"
|
|
state: absent
|
|
become: "{{ ansible_become | default(false) }}"
|