zenwalker
12/2/2016 - 4:22 PM

fabfile.py

from fabric.context_managers import prefix
from fabric.contrib.console import confirm
from fabric.operations import prompt, sudo
from fabric.api import run, task
from fabric.state import env
import os

env.user = 'root'


@task
def create_user(username, python='/usr/local/bin/python3.5'):
    run('useradd -m -s /bin/bash {}'.format(username))
    run_user = lambda x: sudo(x, user=username)

    run_user('mkdir ~/logs')
    run_user('mkdir ~/www')

    if confirm('Create virtualenv?'):
        run_user('{} -m venv --copies ~/venv'.format(python))

        with prefix('source ~/venv/bin/activate'):
            run_user('pip install --upgrade pip setuptools wheel')

    if confirm('Add ssh key?'):
        run_user('mkdir ~/.ssh')
        run_user('chmod 700 ~/.ssh')

        with open(os.path.expanduser('~/.ssh/id_rsa.pub'), 'r') as fp:
            ssh_key = fp.read().strip()
            run_user('echo "{}" >> ~/.ssh/authorized_keys'.format(ssh_key))

        run_user('chmod 600 ~/.ssh/authorized_keys')

    if confirm('Install project now?', default=False):
        configs = prompt('Configs to install: ').split('')

        for conf in configs:
            script_path = '/home/{user}/www/{conf}/system/install.sh'\
                          .format(user=username, conf=conf)

            run('chmod +x {}'.format(script_path))
            run('{} {}'.format(script_path, conf))


@task
def create_database():
    sql = lambda x: sudo('cd ~ && psql -c "{}"'.format(x), user='postgres')

    username = prompt('Username: ')
    password = prompt('Password: ')

    sql("CREATE USER {} WITH PASSWORD '{}'".format(username, password))
    dbnames = prompt('DB names: ').split(',')

    for dbname in dbnames:
        sql("CREATE DATABASE {};".format(dbname))
        sql("GRANT ALL PRIVILEGES ON DATABASE {} TO {}".format(dbname, username))