aemo_fr/docker-dev/fabfile.py

77 lines
2.1 KiB
Python

import getpass
from fabric import task
from invoke import Context
DEV_COMPOSE_CMD = "docker-compose exec -T {container} /bin/bash -c '{command}'"
ENV_NAME = "prod"
REMOTE_DB_NAME = "aemo_fr"
@task
def download_remote_data(conn):
"""
Dump remote (production) data, download it and sync media files
Don't forget to set host in command line `fab -H <HOST> download-remote-data`
"""
local = Context()
conn.config["sudo"]["password"] = getpass.getpass(
"Enter the sudo password (on the server):"
)
local.run('echo "Dump DB: Start"')
conn.run(f"touch {REMOTE_DB_NAME}.backup && chmod o+rw {REMOTE_DB_NAME}.backup")
conn.sudo(
f'pg_dump --no-owner -Fc -b -f "{REMOTE_DB_NAME}.backup" {REMOTE_DB_NAME}',
user="postgres",
)
local.run('echo "Dump DB: End"')
local.run('echo "Download DB: Start"')
conn.get(f"{REMOTE_DB_NAME}.backup", f"./data/{ENV_NAME}/")
local.run('echo "Download DB: End"')
@task
def import_db_in_dev(conn):
local = Context()
local.run('echo "Import DB in dev: Start"')
local.run(
DEV_COMPOSE_CMD.format(
container="db",
command=(
"dropdb -U ${POSTGRES_USER} --if-exists --force ${POSTGRES_DB} && "
"createdb -U ${POSTGRES_USER} -O ${POSTGRES_USER} ${POSTGRES_DB}"
),
)
)
local.run(
DEV_COMPOSE_CMD.format(
container="db",
command=f'pg_restore -U ${{POSTGRES_USER}} -d ${{POSTGRES_DB}} --no-owner "/data/{ENV_NAME}/{REMOTE_DB_NAME}.backup"',
)
)
local.run('echo "Import DB in dev: End\n\n"')
@task
def create_admin_in_dev(conn):
local = Context()
local.run('echo "Create superuser: Start"')
local.run(
DEV_COMPOSE_CMD.format(
container="web",
command=(
"DJANGO_SUPERUSER_USERNAME=admin "
"DJANGO_SUPERUSER_PASSWORD=admin "
"DJANGO_SUPERUSER_EMAIL=admin@dev.dev "
"python3 ./manage.py createsuperuser --no-input"
),
)
)
local.run('echo "Create superuser: End\n\n"')