@installdoc/ansible-gas-station
Version:
An Ansible playbook that provisions your network with software from GitHub Awesome lists, developed with disaster recovery in mind ⛽🔥🤤
58 lines (52 loc) • 2.1 kB
YAML
- name: Ensure git repository folder exists
become: true
file:
path: "{{ project.folder }}"
owner: "{{ project.user | default(ansible_user | default(lookup('env', 'USER'))) }}"
mode: 0740
state: directory
- name: Check if git already exists
stat:
path: "{{ project.folder }}/.git"
register: git_folder
- name: Clone the repository if it does not already exist
become: true
become_user: "{{ project.user | default(ansible_user | default(lookup('env', 'USER'))) }}"
git:
depth: "1"
dest: "{{ project.folder }}"
repo: "{{ project.repo }}"
version: master
when: not git_folder.stat.exists
- name: Restore containers if the repository was freshly cloned
become: true
become_user: "{{ project.user | default(ansible_user | default(lookup('env', 'USER'))) }}"
command: docker-compose-backup restore
args:
chdir: "{{ project.folder }}"
when: not git_folder.stat.exists
- name: Backup containers if git repository was already present
become: true
become_user: "{{ project.user | default(ansible_user | default(lookup('env', 'USER'))) }}"
command: docker-compose-backup backup
args:
chdir: "{{ project.folder }}"
when: git_folder.stat.exists
- name: Ensure backup cron-job is in place
become: true
cron:
name: "{{ project.name }} Daily Backup Job"
minute: "0"
hour: "{{ git_docker_backup_time }}"
user: "{{ project.user | default(ansible_user | default(lookup('env', 'USER'))) }}"
job: |
{%if (healthcheck_endpoint is defined) and (project.healthcheck_id is defined) %}
curl -fsS -m 10 --retry 5 -o /dev/null https://{{ healthcheck_endpoint }}/ping/{{ project.healthcheck_id }}/start
{% endif %}
cd {{ project.folder }}
m=$(docker-compose-backup backup 2>&1)
{%if (healthcheck_endpoint is defined) and (project.healthcheck_id is defined) %}
curl -fsS -m 10 --retry 5 --data-raw "$m" "https://{{ healthcheck_endpoint }}/ping/{{ project.healthcheck_id }}$([ $? -ne 0 ] && echo -n /fail)"
{% endif %}
cron_file: "{{ project.name | lower }}-backup-job"