{%- from "maas/map.jinja" import region with context %}

{%- set database = region.get("database", {}) %}

export PGHOST={{ database.get("host", "localhost") }}
export PGUSER={{ database.get("username", "maas") }}
export PGPASSFILE=/root/.pgpass

{%- set db_name = database.get("name", "maasdb") %}
{%- set backupninja_host = database.initial_data.get("host", grains.id ) %}
{%- if database.initial_data.age is defined %}
{%- set age = database.initial_data.get("age", "0") %}
{%- else %}{%- set age = "0" %}{%- endif %}
{%- set backupninja_source = database.initial_data.get("source", "cfg01.local")%}
{%- set source_name = db_name + ".pg_dump.gz" %}
{%- set dest_name = db_name + ".pg_dump.gz" %}
{%- set target = "/root/postgresql/restore_data/" %}

mkdir -p {{ target }}

scp backupninja@{{ backupninja_host }}:/srv/backupninja/{{ backupninja_source }}/var/backups/postgresql/postgresql.{{ age }}/{{ source_name }} {{ target }}{{ dest_name }} 
gunzip -d -1 -f {{ target }}{{ dest_name }}

scp -r backupninja@{{ backupninja_host }}:/srv/backupninja/{{ backupninja_source }}/etc/maas/maas.{{ age }} /etc/maas
scp -r backupninja@{{ backupninja_host }}:/srv/backupninja/{{ backupninja_source }}/var/lib/maas/maas.{{ age }} /var/lib/maas

sudo systemctl stop maas-dhcpd.service
sudo systemctl stop maas-rackd.service
sudo systemctl stop maas-regiond.service

pg_restore {{ target }}{{ db_name }}.pg_dump --dbname={{ db_name }} --no-password -c

mkdir -p /root/maas/flags
touch /root/maas/flags/{{ db_name }}-installed

sudo systemctl start maas-dhcpd.service
sudo systemctl start maas-rackd.service
sudo systemctl start maas-regiond.service