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))