From 8fdb58c1c2b77bedb9ec8acb05848a395b013420 Mon Sep 17 00:00:00 2001 From: Claude Paroz Date: Thu, 16 Aug 2018 11:10:36 +0200 Subject: [PATCH] Copy fab script from epcstages --- .gitignore | 1 - common/settings.py | 3 ++ scripts/fabfile.py | 72 ++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 75 insertions(+), 1 deletion(-) create mode 100644 scripts/fabfile.py diff --git a/.gitignore b/.gitignore index 30f037e..28a99c8 100644 --- a/.gitignore +++ b/.gitignore @@ -6,6 +6,5 @@ common/local_settings.py db.eds db.* *.sql -scripts/* .idea/ diff --git a/common/settings.py b/common/settings.py index a121030..69e9b2b 100644 --- a/common/settings.py +++ b/common/settings.py @@ -111,6 +111,9 @@ DOMAINE_COULEURS = { 'D8': '#babdb6' } +FABRIC_HOST = 'stages.pierre-coullery.ch' +FABRIC_USERNAME = '' + TINYMCE_DEFAULT_CONFIG = { 'plugins': "table,spellchecker,paste,searchreplace", 'theme': "advanced", diff --git a/scripts/fabfile.py b/scripts/fabfile.py new file mode 100644 index 0000000..5d20f79 --- /dev/null +++ b/scripts/fabfile.py @@ -0,0 +1,72 @@ +# -*- coding: utf-8 -*- +import os +import sys + +from fabric.api import cd, env, get, local, prefix, prompt, run +from fabric.contrib import django +from fabric.utils import abort + +APP_DIR = '/var/www/eds' +VIRTUALENV_DIR = '/var/virtualenvs/eds/bin/activate' + +"""Read settings from Django settings""" +sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) +django.settings_module('common.settings') +from common import settings + +env.hosts = [settings.FABRIC_HOST] +env.user = settings.FABRIC_USERNAME + + +def clone_remote_db(): + """ + Copy remote data (JSON dump), download it locally and recreate a local + SQLite database with those data. + """ + db_name = settings.DATABASES['default']['NAME'] + is_sqlite = 'sqlite' in settings.DATABASES['default']['ENGINE'] + + def exist_local_db(): + if is_sqlite: + return os.path.exists(db_name) + else: # Assume postgres + db_list = local('psql --list', capture=True) + return (' ' + db_name + ' ') in db_list + + if exist_local_db(): + rep = prompt('A local database named "%s" already exists. Overwrite? (y/n)' % db_name) + if rep == 'y': + if is_sqlite: + os.remove(settings.DATABASES['default']['NAME']) + else: + local('''sudo -u postgres psql -c "DROP DATABASE %(db)s;"''' % {'db': db_name}) + else: + abort("Database not copied") + + # Dump remote data and download the file + with cd(APP_DIR): + with prefix('source %s' % VIRTUALENV_DIR): + run('python manage.py dumpdata --natural-foreign --indent 1 -e auth.Permission auth cms intranet > eds.json') + get('eds.json', '.') + + if not is_sqlite: + local('''sudo -u postgres psql -c "CREATE DATABASE %(db)s OWNER=%(owner)s;"''' % { + 'db': db_name, 'owner': settings.DATABASES['default']['USER']}) + + # Recreate a fresh DB with downloaded data + local("python ../manage.py migrate") + local("python ../manage.py flush --noinput") + local("python ../manage.py loaddata eds.json") + + +def deploy(): + """ + Deploy project with latest Github code + """ + with cd(APP_DIR): + run("git pull") + with prefix('source %s' % VIRTUALENV_DIR): + run("python manage.py migrate") + run("python manage.py collectstatic --noinput") + run("touch common/wsgi.py") +