Allow more customization for backup app deployment

This commit is contained in:
Lance Edgar 2018-07-05 13:19:20 -05:00
parent 2a6b25215f
commit 2fcb81e0ae
4 changed files with 47 additions and 17 deletions

View file

@ -29,7 +29,7 @@ Fabric deployment and maintenance.
from __future__ import unicode_literals, absolute_import from __future__ import unicode_literals, absolute_import
from .core import put, upload_template, make_deploy, mkdir, rsync from .core import put, upload_template, make_deploy, mkdir, rsync, UNSPECIFIED
from .core import make_system_user, set_timezone, agent_sudo from .core import make_system_user, set_timezone, agent_sudo
from .core import get_debian_version, get_ubuntu_version from .core import get_debian_version, get_ubuntu_version

View file

@ -31,13 +31,24 @@ import datetime
from fabric.api import cd, sudo from fabric.api import cd, sudo
from fabric.contrib.files import exists from fabric.contrib.files import exists
from rattail_fabric import make_deploy, mkdir, python from rattail_fabric import make_deploy, mkdir, python, UNSPECIFIED
deploy_generic = make_deploy(__file__) deploy_generic = make_deploy(__file__)
def deploy_backup_app(deploy, envname, config=None, everything=None, crontab=None, user='rattail', runat=None): def deploy_backup_everything(**context):
"""
Deploy the generic `backup-everything` script
"""
context.setdefault('envname', 'backup')
context.setdefault('user', 'rattail')
deploy_generic('backup/backup-everything.mako', '/usr/local/bin/backup-everything', mode='0755',
context=context)
def deploy_backup_app(deploy, envname, mkvirtualenv=True, user='rattail',
config=None, everything=None, crontab=None, runat=UNSPECIFIED):
""" """
Make an app which can run backups for the server. Make an app which can run backups for the server.
""" """
@ -48,11 +59,12 @@ def deploy_backup_app(deploy, envname, config=None, everything=None, crontab=Non
else: else:
raise ValueError("Must provide config path for backup app") raise ValueError("Must provide config path for backup app")
if not runat: if runat is UNSPECIFIED:
runat = datetime.time(0) # defaults to midnight runat = datetime.time(0) # defaults to midnight
# virtualenv # virtualenv
python.mkvirtualenv(envname, python='/usr/bin/python3', upgrade_setuptools=False) if mkvirtualenv:
python.mkvirtualenv(envname, python='/usr/bin/python3', upgrade_setuptools=False)
envpath = '/srv/envs/{}'.format(envname) envpath = '/srv/envs/{}'.format(envname)
sudo('chown -R {}: {}'.format(user, envpath)) sudo('chown -R {}: {}'.format(user, envpath))
with cd(envpath): with cd(envpath):
@ -76,20 +88,23 @@ def deploy_backup_app(deploy, envname, config=None, everything=None, crontab=Non
sudo('bin/rattail -c app/rattail.conf make-config -T silent -O app/', user=user) sudo('bin/rattail -c app/rattail.conf make-config -T silent -O app/', user=user)
# backup-everything script # backup-everything script
everything_context = {'envname': envname} everything_context = {
'envname': envname,
'user': user,
}
if everything: if everything:
deploy(everything, '/usr/local/bin/backup-everything', mode='0755', context=everything_context) deploy(everything, '/usr/local/bin/backup-everything', mode='0755', context=everything_context)
else: else:
deploy_generic('backup/backup-everything.mako', '/usr/local/bin/backup-everything', mode='0755', deploy_backup_everything(**everything_context)
context=everything_context)
# crontab # crontab
crontab_context = { if runat:
'envname': envname, crontab_context = {
'pretty_time': runat.strftime('%I:%M %p'), 'envname': envname,
'cron_time': runat.strftime('%M %H'), 'pretty_time': runat.strftime('%I:%M %p'),
} 'cron_time': runat.strftime('%M %H'),
if crontab: }
deploy(crontab, '/etc/cron.d/backup', context=crontab_context) if crontab:
else: deploy(crontab, '/etc/cron.d/backup', context=crontab_context)
deploy_generic('backup/crontab.mako', '/etc/cron.d/backup', context=crontab_context) else:
deploy_generic('backup/crontab.mako', '/etc/cron.d/backup', context=crontab_context)

View file

@ -38,6 +38,9 @@ from fabric.contrib.files import exists, append, upload_template as fab_upload_t
from mako.template import Template from mako.template import Template
UNSPECIFIED = object()
def get_debian_version(): def get_debian_version():
""" """
Fetch the version of Debian running on the target system. Fetch the version of Debian running on the target system.

View file

@ -2,10 +2,12 @@
if [ "$1" = "-v" -o "$1" = "--verbose" ]; then if [ "$1" = "-v" -o "$1" = "--verbose" ]; then
VERBOSE='--verbose' VERBOSE='--verbose'
QUIET=
PROGRESS='--progress' PROGRESS='--progress'
CONFIG='app/rattail.conf' CONFIG='app/rattail.conf'
else else
VERBOSE= VERBOSE=
QUIET='--quiet'
PROGRESS= PROGRESS=
CONFIG='app/silent.conf' CONFIG='app/silent.conf'
fi fi
@ -14,5 +16,15 @@ fi
cd /srv/envs/${envname} cd /srv/envs/${envname}
RATTAIL="bin/rattail --config=$CONFIG $PROGRESS" RATTAIL="bin/rattail --config=$CONFIG $PROGRESS"
PIP='bin/pip'
export PIP_CONFIG_FILE=pip.conf
$PIP install --upgrade pip
cd src/rattail
sudo -u ${user} git pull $QUIET
sudo -u ${user} find . -name '*.pyc' -delete
cd -
$PIP install --upgrade --upgrade-strategy eager --editable src/rattail
$RATTAIL backup $RATTAIL backup