diff --git a/group_vars/all.yml b/group_vars/all.yml index de26fe2..c0f6263 100644 --- a/group_vars/all.yml +++ b/group_vars/all.yml @@ -14,4 +14,8 @@ acme: # Other protonmail: - initialized: false \ No newline at end of file + initialized: false + +restore: + cloud: + nextcloud_archive: /home/florian/Documents/Projet/Perso/backup/cloud/nextcloud.latest.tar.gz \ No newline at end of file diff --git a/playbook.yml b/playbook.yml index 4777e50..6f314a9 100644 --- a/playbook.yml +++ b/playbook.yml @@ -4,6 +4,7 @@ roles: - { role: docker, tags: ["docker"] } + - { role: volume_restore, tags: ["volume_restore"] } - { role: ssh, tags: ["ssh"] } - { role: traefik, tags: ["traefik"] } - { role: whoami, tags: ["whoami"] } diff --git a/roles/cloud/tasks/main.yml b/roles/cloud/tasks/main.yml index 5282607..dd8bec7 100644 --- a/roles/cloud/tasks/main.yml +++ b/roles/cloud/tasks/main.yml @@ -4,4 +4,8 @@ name: base - ansible.builtin.import_tasks: cron.yml - name: cron \ No newline at end of file + name: cron + +- ansible.builtin.import_tasks: restore_nextcloud.yml + name: restore_nextcloud + when: restore.cloud.nextcloud_archive \ No newline at end of file diff --git a/roles/cloud/tasks/restore_nextcloud.yml b/roles/cloud/tasks/restore_nextcloud.yml new file mode 100644 index 0000000..be9d537 --- /dev/null +++ b/roles/cloud/tasks/restore_nextcloud.yml @@ -0,0 +1,36 @@ +--- + +- name: Copy archive + ansible.builtin.copy: + src: "{{ restore.cloud.nextcloud_archive }}" + dest: archive.tar.gz + +- name: Stop nextcloud container + community.docker.docker_compose: + project_src: cloud + state: absent + services: nextcloud + become: true + +- name: Restore backup + community.docker.docker_container: + name: volume_restore + image: volume_restore:latest + state: present + recreate: true + volumes: + - ./archive.tar.gz:/backup/archive.tar.gz + - cloud_nextcloud:/backup/dest + become: true + +- name: Start nextcloud container + community.docker.docker_compose: + project_src: cloud + state: present + services: nextcloud + become: true + +- name: Remove archive + ansible.builtin.file: + path: archive.tar.gz + state: absent \ No newline at end of file diff --git a/roles/volume_restore/files/Dockerfile b/roles/volume_restore/files/Dockerfile new file mode 100644 index 0000000..f7c0bff --- /dev/null +++ b/roles/volume_restore/files/Dockerfile @@ -0,0 +1,7 @@ +FROM alpine:latest + +RUN apk add --update --no-cache tar + +RUN mkdir -p /backup/dest + +CMD ["tar", "-xf", "/backup/archive.tar.gz", "--strip-components=1", "-C", "/backup/dest"] \ No newline at end of file diff --git a/roles/volume_restore/files/README.md b/roles/volume_restore/files/README.md new file mode 100644 index 0000000..11b62d6 --- /dev/null +++ b/roles/volume_restore/files/README.md @@ -0,0 +1,5 @@ +# HOW TO USE IT + +``` +docker run -v [PATH_TO_ARCHIVE]:/backup/archive.tar.gz -v [DIST_VOLUME]:/backup/dest volume_restore:latest +``` \ No newline at end of file diff --git a/roles/volume_restore/tasks/base.yml b/roles/volume_restore/tasks/base.yml new file mode 100644 index 0000000..9b10068 --- /dev/null +++ b/roles/volume_restore/tasks/base.yml @@ -0,0 +1,18 @@ +--- + +- name: Copy conf + ansible.builtin.copy: + backup: true + src: . + dest: volume_restore/ + register: volume_restore_copy + +- name: Build image + community.docker.docker_image: + name: volume_restore + tag: latest + build: + path: volume_restore + source: build + become: yes + when: volume_restore_copy.changed \ No newline at end of file diff --git a/roles/volume_restore/tasks/main.yml b/roles/volume_restore/tasks/main.yml new file mode 100644 index 0000000..3f670ac --- /dev/null +++ b/roles/volume_restore/tasks/main.yml @@ -0,0 +1,4 @@ +--- + +- ansible.builtin.import_tasks: base.yml + name: base \ No newline at end of file