2014-07-10 17:21:34 +00:00
|
|
|
import click
|
|
|
|
from .utils import init as _init
|
|
|
|
from .utils import setup_env as _setup_env
|
2014-07-11 04:29:57 +00:00
|
|
|
from .utils import new_site as _new_site
|
|
|
|
from .utils import setup_backups as _setup_backups
|
|
|
|
from .utils import setup_auto_update as _setup_auto_update
|
|
|
|
from .utils import setup_sudoers as _setup_sudoers
|
2014-07-15 09:18:50 +00:00
|
|
|
from .utils import start as _start
|
|
|
|
from .utils import setup_procfile as _setup_procfile
|
2014-07-21 04:45:18 +00:00
|
|
|
from .utils import set_nginx_port as _set_nginx_port
|
2014-11-19 07:09:37 +00:00
|
|
|
from .utils import set_url_root as _set_url_root
|
2014-07-21 06:18:07 +00:00
|
|
|
from .utils import set_default_site as _set_default_site
|
2014-09-03 06:57:04 +00:00
|
|
|
from .utils import (build_assets, patch_sites, exec_cmd, update_bench, get_frappe, setup_logging,
|
2014-11-10 15:51:45 +00:00
|
|
|
get_config, update_config, restart_supervisor_processes, put_config, default_config, update_requirements,
|
|
|
|
backup_all_sites, backup_site, get_sites, prime_wheel_cache, is_root, set_mariadb_host, drop_privileges)
|
2014-07-10 17:21:34 +00:00
|
|
|
from .app import get_app as _get_app
|
|
|
|
from .app import new_app as _new_app
|
|
|
|
from .app import pull_all_apps
|
2014-07-21 04:45:18 +00:00
|
|
|
from .config import generate_nginx_config, generate_supervisor_config
|
2014-11-04 10:53:50 +00:00
|
|
|
from .production_setup import setup_production as _setup_production
|
2014-07-10 17:21:34 +00:00
|
|
|
import os
|
2014-07-11 07:40:33 +00:00
|
|
|
import sys
|
2014-07-11 09:33:07 +00:00
|
|
|
import logging
|
2014-08-27 11:53:04 +00:00
|
|
|
import copy
|
2014-11-07 14:42:42 +00:00
|
|
|
import pwd
|
2014-11-18 11:56:37 +00:00
|
|
|
import grp
|
2014-07-11 09:33:07 +00:00
|
|
|
|
|
|
|
logger = logging.getLogger('bench')
|
2014-07-11 07:40:33 +00:00
|
|
|
|
|
|
|
def cli():
|
2014-11-07 14:42:42 +00:00
|
|
|
check_uid()
|
|
|
|
change_dir()
|
|
|
|
change_uid()
|
2014-07-15 06:17:36 +00:00
|
|
|
if len(sys.argv) > 2 and sys.argv[1] == "frappe":
|
2014-07-11 07:40:33 +00:00
|
|
|
return frappe()
|
|
|
|
return bench()
|
|
|
|
|
2014-11-10 09:26:09 +00:00
|
|
|
def cmd_requires_root():
|
2014-11-10 11:39:05 +00:00
|
|
|
if len(sys.argv) > 2 and sys.argv[2] in ('production', 'sudoers'):
|
2014-11-10 09:26:09 +00:00
|
|
|
return True
|
|
|
|
if len(sys.argv) > 2 and sys.argv[1] in ('patch',):
|
|
|
|
return True
|
|
|
|
|
2014-11-07 14:42:42 +00:00
|
|
|
def check_uid():
|
2014-11-10 09:26:09 +00:00
|
|
|
if cmd_requires_root() and not is_root():
|
2014-11-07 14:42:42 +00:00
|
|
|
print 'superuser privileges required for this command'
|
|
|
|
sys.exit(1)
|
|
|
|
|
|
|
|
def change_uid():
|
2014-11-10 09:26:09 +00:00
|
|
|
if is_root() and not cmd_requires_root():
|
2014-11-07 14:42:42 +00:00
|
|
|
frappe_user = get_config().get('frappe_user')
|
|
|
|
if frappe_user:
|
2014-11-10 15:51:45 +00:00
|
|
|
drop_privileges(uid_name=frappe_user, gid_name=frappe_user)
|
2014-11-10 10:33:23 +00:00
|
|
|
os.environ['HOME'] = pwd.getpwnam(frappe_user).pw_dir
|
2014-11-07 14:42:42 +00:00
|
|
|
else:
|
|
|
|
print 'You should not run this command as root'
|
|
|
|
sys.exit(1)
|
|
|
|
|
|
|
|
def change_dir():
|
|
|
|
dir_path_file = '/etc/frappe_bench_dir'
|
|
|
|
if os.path.exists(dir_path_file):
|
|
|
|
with open(dir_path_file) as f:
|
|
|
|
dir_path = f.read().strip()
|
|
|
|
os.chdir(dir_path)
|
|
|
|
|
2014-07-11 07:40:33 +00:00
|
|
|
def frappe(bench='.'):
|
|
|
|
f = get_frappe(bench=bench)
|
|
|
|
os.chdir(os.path.join(bench, 'sites'))
|
|
|
|
os.execv(f, [f] + sys.argv[2:])
|
2014-07-10 17:21:34 +00:00
|
|
|
|
2014-08-27 11:53:04 +00:00
|
|
|
@click.command()
|
|
|
|
def shell(bench='.'):
|
|
|
|
if not os.environ.get('SHELL'):
|
|
|
|
print "Cannot get shell"
|
|
|
|
sys.exit(1)
|
|
|
|
if not os.path.exists('sites'):
|
|
|
|
print "sites dir doesn't exist"
|
|
|
|
sys.exit(1)
|
|
|
|
env = copy.copy(os.environ)
|
|
|
|
env['PS1'] = '(' + os.path.basename(os.path.dirname(os.path.abspath(__file__))) + ')' + env.get('PS1', '')
|
|
|
|
env['PATH'] = os.path.dirname(os.path.abspath(os.path.join('env','bin')) + ':' + env['PATH'])
|
|
|
|
os.chdir('sites')
|
|
|
|
os.execve(env['SHELL'], [env['SHELL']], env)
|
|
|
|
|
2014-07-10 17:21:34 +00:00
|
|
|
@click.group()
|
2014-07-11 09:33:07 +00:00
|
|
|
def bench(bench='.'):
|
2014-07-15 06:54:44 +00:00
|
|
|
"Bench manager for Frappe"
|
2014-07-11 09:33:07 +00:00
|
|
|
# TODO add bench path context
|
|
|
|
setup_logging(bench=bench)
|
2014-07-10 17:21:34 +00:00
|
|
|
|
|
|
|
@click.command()
|
|
|
|
@click.argument('path')
|
2014-07-21 06:10:03 +00:00
|
|
|
@click.option('--apps_path', default=None, help="path to json files with apps to install after init")
|
2014-07-31 06:12:00 +00:00
|
|
|
@click.option('--frappe-path', default=None, help="path to frappe repo")
|
2014-09-12 09:30:18 +00:00
|
|
|
@click.option('--frappe-branch', default=None, help="path to frappe repo")
|
2014-07-31 06:12:00 +00:00
|
|
|
@click.option('--no-procfile', flag_value=True, type=bool, help="Pull changes in all the apps in bench")
|
|
|
|
@click.option('--no-backups',flag_value=True, type=bool, help="Run migrations for all sites in the bench")
|
|
|
|
@click.option('--no-auto-update',flag_value=True, type=bool, help="Build JS and CSS artifacts for the bench")
|
2014-09-12 09:30:18 +00:00
|
|
|
def init(path, apps_path, frappe_path, frappe_branch, no_procfile, no_backups,
|
2014-07-31 06:12:00 +00:00
|
|
|
no_auto_update):
|
2014-07-15 06:54:44 +00:00
|
|
|
"Create a new bench"
|
2014-07-31 06:12:00 +00:00
|
|
|
_init(path, apps_path=apps_path, no_procfile=no_procfile, no_backups=no_backups,
|
2014-09-12 09:30:18 +00:00
|
|
|
no_auto_update=no_auto_update, frappe_path=frappe_path, frappe_branch=frappe_branch)
|
2014-07-10 17:21:34 +00:00
|
|
|
click.echo('Bench {} initialized'.format(path))
|
|
|
|
|
|
|
|
@click.command('get-app')
|
|
|
|
@click.argument('name')
|
|
|
|
@click.argument('git-url')
|
2014-09-12 09:30:18 +00:00
|
|
|
@click.option('--branch', default=None, help="branch to checkout")
|
|
|
|
def get_app(name, git_url, branch):
|
2014-07-15 06:54:44 +00:00
|
|
|
"clone an app from the internet and set it up in your bench"
|
2014-09-12 09:30:18 +00:00
|
|
|
_get_app(name, git_url, branch=branch)
|
2014-07-10 17:21:34 +00:00
|
|
|
|
|
|
|
@click.command('new-app')
|
|
|
|
@click.argument('app-name')
|
|
|
|
def new_app(app_name):
|
2014-07-15 06:54:44 +00:00
|
|
|
"start a new app"
|
2014-07-10 17:21:34 +00:00
|
|
|
_new_app(app_name)
|
|
|
|
|
|
|
|
@click.command('new-site')
|
2014-10-22 06:45:41 +00:00
|
|
|
@click.option('--mariadb-root-password', help="MariaDB root password")
|
|
|
|
@click.option('--admin-password', help="admin password to set for site")
|
2014-07-10 17:21:34 +00:00
|
|
|
@click.argument('site')
|
2014-10-22 06:45:41 +00:00
|
|
|
def new_site(site, mariadb_root_password=None, admin_password=None):
|
2014-07-15 06:54:44 +00:00
|
|
|
"Create a new site in the bench"
|
2014-10-22 06:45:41 +00:00
|
|
|
_new_site(site, mariadb_root_password=mariadb_root_password, admin_password=admin_password)
|
2014-07-10 17:21:34 +00:00
|
|
|
|
2014-09-17 06:28:27 +00:00
|
|
|
#TODO: Not DRY
|
2014-07-10 17:21:34 +00:00
|
|
|
@click.command('update')
|
2014-07-15 06:54:44 +00:00
|
|
|
@click.option('--pull', flag_value=True, type=bool, help="Pull changes in all the apps in bench")
|
|
|
|
@click.option('--patch',flag_value=True, type=bool, help="Run migrations for all sites in the bench")
|
|
|
|
@click.option('--build',flag_value=True, type=bool, help="Build JS and CSS artifacts for the bench")
|
|
|
|
@click.option('--bench',flag_value=True, type=bool, help="Update bench")
|
2014-07-22 06:38:17 +00:00
|
|
|
@click.option('--requirements',flag_value=True, type=bool, help="Update requirements")
|
2014-07-15 06:54:44 +00:00
|
|
|
@click.option('--restart-supervisor',flag_value=True, type=bool, help="restart supervisor processes after update")
|
2014-07-15 06:17:36 +00:00
|
|
|
@click.option('--auto',flag_value=True, type=bool)
|
2014-09-03 07:19:30 +00:00
|
|
|
@click.option('--no-backup',flag_value=True, type=bool)
|
|
|
|
def update(pull=False, patch=False, build=False, bench=False, auto=False, restart_supervisor=False, requirements=False, no_backup=False):
|
2014-07-15 06:54:44 +00:00
|
|
|
"Update bench"
|
2014-07-17 06:44:08 +00:00
|
|
|
|
2014-07-22 06:38:17 +00:00
|
|
|
if not (pull or patch or build or bench or requirements):
|
|
|
|
pull, patch, build, bench, requirements = True, True, True, True, True
|
2014-07-15 06:17:36 +00:00
|
|
|
|
|
|
|
conf = get_config()
|
2014-09-05 09:23:21 +00:00
|
|
|
if conf.get('release_bench'):
|
|
|
|
print 'Release bench, cannot update'
|
|
|
|
sys.exit(1)
|
2014-09-17 06:29:12 +00:00
|
|
|
if auto:
|
2014-07-15 06:17:36 +00:00
|
|
|
sys.exit(1)
|
|
|
|
if bench and conf.get('update_bench_on_update'):
|
2014-07-11 04:32:54 +00:00
|
|
|
update_bench()
|
2014-09-17 06:28:27 +00:00
|
|
|
restart_update({
|
|
|
|
'pull': pull,
|
|
|
|
'patch': patch,
|
|
|
|
'build': build,
|
|
|
|
'requirements': requirements,
|
|
|
|
'no-backup': no_backup,
|
|
|
|
'restart-supervisor': restart_supervisor
|
|
|
|
})
|
2014-07-10 17:21:34 +00:00
|
|
|
if pull:
|
|
|
|
pull_all_apps()
|
2014-07-22 06:38:17 +00:00
|
|
|
if requirements:
|
|
|
|
update_requirements()
|
2014-07-10 17:21:34 +00:00
|
|
|
if patch:
|
2014-09-03 07:19:30 +00:00
|
|
|
if not no_backup:
|
|
|
|
backup_all_sites()
|
2014-07-10 17:21:34 +00:00
|
|
|
patch_sites()
|
|
|
|
if build:
|
|
|
|
build_assets()
|
2014-07-22 06:38:17 +00:00
|
|
|
if restart_supervisor or conf.get('restart_supervisor_on_update'):
|
|
|
|
restart_supervisor_processes()
|
2014-07-17 06:44:08 +00:00
|
|
|
|
|
|
|
print "_"*80
|
|
|
|
print "https://frappe.io/buy - Donate to help make better free and open source tools"
|
|
|
|
print
|
2014-07-11 04:29:57 +00:00
|
|
|
|
2014-09-17 06:28:27 +00:00
|
|
|
def restart_update(kwargs):
|
|
|
|
args = ['--'+k for k, v in kwargs.items() if v]
|
|
|
|
print 'restarting '
|
|
|
|
os.execv(sys.argv[0], sys.argv[:2] + args)
|
|
|
|
|
2014-07-11 04:29:57 +00:00
|
|
|
@click.command('restart')
|
|
|
|
def restart():
|
2014-07-15 06:54:44 +00:00
|
|
|
"Restart supervisor processes"
|
2014-07-16 06:24:02 +00:00
|
|
|
restart_supervisor_processes()
|
2014-07-10 17:21:34 +00:00
|
|
|
|
2014-07-15 09:18:50 +00:00
|
|
|
@click.command('start')
|
|
|
|
def start():
|
|
|
|
"Start Frappe development processes"
|
|
|
|
_start()
|
|
|
|
|
2014-07-17 09:38:26 +00:00
|
|
|
@click.command('migrate-3to4')
|
|
|
|
@click.argument('path')
|
|
|
|
def migrate_3to4(path):
|
|
|
|
"Migrate from ERPNext v3.x"
|
2014-07-21 10:45:32 +00:00
|
|
|
exec_cmd("{python} {migrate_3to4} {site}".format(
|
|
|
|
python=os.path.join('env', 'bin', 'python'),
|
|
|
|
migrate_3to4=os.path.join(os.path.dirname(__file__), 'migrate3to4.py'),
|
|
|
|
site=path))
|
2014-07-17 09:38:26 +00:00
|
|
|
|
2014-07-21 04:45:18 +00:00
|
|
|
@click.command('set-nginx-port')
|
|
|
|
@click.argument('site')
|
|
|
|
@click.argument('port', type=int)
|
|
|
|
def set_nginx_port(site, port):
|
|
|
|
"Set nginx port for site"
|
|
|
|
_set_nginx_port(site, port)
|
|
|
|
|
2014-11-19 07:09:37 +00:00
|
|
|
@click.command('set-url-root')
|
|
|
|
@click.argument('site')
|
|
|
|
@click.argument('url-root')
|
|
|
|
def set_url_root(site, url_root):
|
|
|
|
"Set url root for site"
|
|
|
|
_set_url_root(site, port)
|
|
|
|
|
2014-11-07 14:49:13 +00:00
|
|
|
@click.command('set-mariadb-host')
|
|
|
|
@click.argument('host')
|
|
|
|
def _set_mariadb_host(host):
|
|
|
|
"Set MariaDB host for bench"
|
|
|
|
set_mariadb_host(host)
|
|
|
|
|
2014-07-21 06:18:07 +00:00
|
|
|
@click.command('set-default-site')
|
|
|
|
@click.argument('site')
|
|
|
|
def set_default_site(site):
|
|
|
|
"Set default site for bench"
|
|
|
|
_set_default_site(site)
|
|
|
|
|
2014-09-03 06:57:04 +00:00
|
|
|
@click.command('backup')
|
|
|
|
@click.argument('site')
|
|
|
|
def _backup_site(site):
|
|
|
|
"backup site"
|
|
|
|
if not site in get_sites(bench='.'):
|
|
|
|
print 'site not found'
|
|
|
|
sys.exit(1)
|
|
|
|
backup_site(site, bench='.')
|
|
|
|
|
|
|
|
@click.command('backup-all-sites')
|
|
|
|
def _backup_all_sites():
|
|
|
|
"backup all sites"
|
|
|
|
backup_all_sites(bench='.')
|
|
|
|
|
2014-09-04 07:38:43 +00:00
|
|
|
@click.command('prime-wheel-cache')
|
|
|
|
def _prime_wheel_cache():
|
|
|
|
"Update wheel cache"
|
|
|
|
prime_wheel_cache(bench='.')
|
|
|
|
|
2014-09-04 09:45:53 +00:00
|
|
|
@click.command('release')
|
|
|
|
@click.argument('app', type=click.Choice(['frappe', 'erpnext', 'shopping_cart']))
|
|
|
|
@click.argument('bump-type', type=click.Choice(['major', 'minor', 'patch']))
|
|
|
|
def _release(app, bump_type):
|
|
|
|
"Release app (internal to the Frappe team)"
|
2014-09-05 04:00:54 +00:00
|
|
|
from .release import release
|
2014-09-04 09:45:53 +00:00
|
|
|
repo = os.path.join('apps', app)
|
|
|
|
release(repo, bump_type)
|
|
|
|
|
2014-07-10 17:21:34 +00:00
|
|
|
## Setup
|
|
|
|
@click.group()
|
|
|
|
def setup():
|
2014-07-15 06:54:44 +00:00
|
|
|
"Setup bench"
|
2014-07-10 17:21:34 +00:00
|
|
|
pass
|
|
|
|
|
|
|
|
@click.command('sudoers')
|
2014-09-03 06:35:23 +00:00
|
|
|
@click.argument('user')
|
|
|
|
def setup_sudoers(user):
|
2014-07-15 06:54:44 +00:00
|
|
|
"Add commands to sudoers list for execution without password"
|
2014-09-03 06:35:23 +00:00
|
|
|
_setup_sudoers(user)
|
2014-07-10 17:21:34 +00:00
|
|
|
|
|
|
|
@click.command('nginx')
|
|
|
|
def setup_nginx():
|
2014-07-15 06:54:44 +00:00
|
|
|
"generate config for nginx"
|
2014-07-21 04:45:18 +00:00
|
|
|
generate_nginx_config()
|
2014-07-10 17:21:34 +00:00
|
|
|
|
|
|
|
@click.command('supervisor')
|
|
|
|
def setup_supervisor():
|
2014-07-15 06:54:44 +00:00
|
|
|
"generate config for supervisor"
|
2014-07-21 04:45:18 +00:00
|
|
|
generate_supervisor_config()
|
2014-11-04 10:53:50 +00:00
|
|
|
|
|
|
|
@click.command('production')
|
2014-11-18 10:37:46 +00:00
|
|
|
@click.argument('user')
|
|
|
|
def setup_production(user):
|
2014-11-04 10:53:50 +00:00
|
|
|
"setup bench for production"
|
2014-11-18 10:37:46 +00:00
|
|
|
_setup_production(user=user)
|
2014-07-10 17:21:34 +00:00
|
|
|
|
|
|
|
@click.command('auto-update')
|
|
|
|
def setup_auto_update():
|
2014-07-15 06:54:44 +00:00
|
|
|
"Add cronjob for bench auto update"
|
2014-07-11 04:29:57 +00:00
|
|
|
_setup_auto_update()
|
2014-07-10 17:21:34 +00:00
|
|
|
|
|
|
|
@click.command('backups')
|
|
|
|
def setup_backups():
|
2014-07-15 06:54:44 +00:00
|
|
|
"Add cronjob for bench backups"
|
2014-07-11 04:29:57 +00:00
|
|
|
_setup_backups()
|
2014-07-10 17:21:34 +00:00
|
|
|
|
|
|
|
@click.command('dnsmasq')
|
|
|
|
def setup_dnsmasq():
|
|
|
|
pass
|
|
|
|
|
|
|
|
@click.command('env')
|
|
|
|
def setup_env():
|
2014-07-15 06:54:44 +00:00
|
|
|
"Setup virtualenv for bench"
|
2014-07-10 17:21:34 +00:00
|
|
|
_setup_env()
|
|
|
|
|
2014-07-15 09:18:50 +00:00
|
|
|
@click.command('procfile')
|
|
|
|
def setup_procfile():
|
|
|
|
"Setup Procfile for bench start"
|
|
|
|
_setup_procfile()
|
|
|
|
|
2014-07-21 09:41:32 +00:00
|
|
|
@click.command('config')
|
|
|
|
def setup_config():
|
|
|
|
"overwrite or make config.json"
|
|
|
|
put_config(default_config)
|
|
|
|
|
2014-07-10 17:21:34 +00:00
|
|
|
setup.add_command(setup_nginx)
|
|
|
|
setup.add_command(setup_sudoers)
|
|
|
|
setup.add_command(setup_supervisor)
|
|
|
|
setup.add_command(setup_auto_update)
|
|
|
|
setup.add_command(setup_dnsmasq)
|
|
|
|
setup.add_command(setup_backups)
|
|
|
|
setup.add_command(setup_env)
|
2014-07-15 09:18:50 +00:00
|
|
|
setup.add_command(setup_procfile)
|
2014-07-21 09:41:32 +00:00
|
|
|
setup.add_command(setup_config)
|
2014-11-04 10:57:56 +00:00
|
|
|
setup.add_command(setup_production)
|
2014-07-10 17:21:34 +00:00
|
|
|
|
2014-07-15 06:17:36 +00:00
|
|
|
## Config
|
|
|
|
## Not DRY
|
|
|
|
@click.group()
|
|
|
|
def config():
|
2014-07-15 06:54:44 +00:00
|
|
|
"change bench configuration"
|
2014-07-15 06:17:36 +00:00
|
|
|
pass
|
|
|
|
|
|
|
|
@click.command('auto_update')
|
|
|
|
@click.argument('state', type=click.Choice(['on', 'off']))
|
|
|
|
def config_auto_update(state):
|
2014-07-15 06:54:44 +00:00
|
|
|
"Enable/Disable auto update for bench"
|
2014-07-15 06:17:36 +00:00
|
|
|
state = True if state == 'on' else False
|
|
|
|
update_config({'auto_update': state})
|
|
|
|
|
|
|
|
@click.command('restart_supervisor_on_update')
|
|
|
|
@click.argument('state', type=click.Choice(['on', 'off']))
|
|
|
|
def config_restart_supervisor_on_update(state):
|
2014-07-15 06:54:44 +00:00
|
|
|
"Enable/Disable auto restart of supervisor processes"
|
2014-07-15 06:17:36 +00:00
|
|
|
state = True if state == 'on' else False
|
|
|
|
update_config({'restart_supervisor_on_update': state})
|
|
|
|
|
|
|
|
@click.command('update_bench_on_update')
|
|
|
|
@click.argument('state', type=click.Choice(['on', 'off']))
|
|
|
|
def config_update_bench_on_update(state):
|
2014-07-15 06:54:44 +00:00
|
|
|
"Enable/Disable bench updates on running bench update"
|
2014-07-15 06:17:36 +00:00
|
|
|
state = True if state == 'on' else False
|
|
|
|
update_config({'update_bench_on_update': state})
|
|
|
|
|
2014-07-21 04:45:18 +00:00
|
|
|
@click.command('dns_multitenant')
|
|
|
|
@click.argument('state', type=click.Choice(['on', 'off']))
|
|
|
|
def config_dns_multitenant(state):
|
|
|
|
"Enable/Disable bench updates on running bench update"
|
|
|
|
state = True if state == 'on' else False
|
|
|
|
update_config({'dns_multitenant': state})
|
|
|
|
|
2014-07-25 06:45:16 +00:00
|
|
|
@click.command('serve_default_site')
|
|
|
|
@click.argument('state', type=click.Choice(['on', 'off']))
|
2014-07-25 09:50:01 +00:00
|
|
|
def config_serve_default_site(state):
|
2014-07-25 06:45:16 +00:00
|
|
|
"Configure nginx to serve the default site on port 80"
|
|
|
|
state = True if state == 'on' else False
|
|
|
|
update_config({'serve_default_site': state})
|
|
|
|
|
2014-07-25 09:50:01 +00:00
|
|
|
@click.command('rebase_on_pull')
|
|
|
|
@click.argument('state', type=click.Choice(['on', 'off']))
|
|
|
|
def config_rebase_on_pull(state):
|
|
|
|
"Rebase repositories on pulling"
|
|
|
|
state = True if state == 'on' else False
|
|
|
|
update_config({'rebase_on_pull': state})
|
|
|
|
|
2014-09-04 10:05:23 +00:00
|
|
|
@click.command('http_timeout')
|
|
|
|
@click.argument('seconds', type=int)
|
|
|
|
def config_http_timeout(seconds):
|
|
|
|
"set http timeout"
|
|
|
|
update_config({'http_timeout': seconds})
|
|
|
|
|
2014-07-15 06:17:36 +00:00
|
|
|
config.add_command(config_auto_update)
|
|
|
|
config.add_command(config_update_bench_on_update)
|
|
|
|
config.add_command(config_restart_supervisor_on_update)
|
2014-07-21 04:45:18 +00:00
|
|
|
config.add_command(config_dns_multitenant)
|
2014-07-25 09:50:01 +00:00
|
|
|
config.add_command(config_serve_default_site)
|
2014-09-04 10:05:23 +00:00
|
|
|
config.add_command(config_http_timeout)
|
2014-07-15 06:17:36 +00:00
|
|
|
|
2014-10-13 04:54:07 +00:00
|
|
|
|
|
|
|
@click.group()
|
|
|
|
def patch():
|
|
|
|
pass
|
|
|
|
|
2014-11-18 11:56:37 +00:00
|
|
|
@click.command('fix-perms')
|
|
|
|
def _fix_perms():
|
2014-11-18 12:03:36 +00:00
|
|
|
if os.path.exists("config/supervisor.conf"):
|
|
|
|
exec_cmd("supervisorctl stop frappe:")
|
|
|
|
|
2014-11-18 11:56:37 +00:00
|
|
|
"Fix permissions if supervisor processes were run as root"
|
|
|
|
files = [
|
|
|
|
"logs/web.error.log",
|
|
|
|
"logs/web.log",
|
|
|
|
"logs/workerbeat.error.log",
|
|
|
|
"logs/workerbeat.log",
|
|
|
|
"logs/worker.error.log",
|
|
|
|
"logs/worker.log",
|
|
|
|
"config/nginx.conf",
|
2014-11-18 12:03:36 +00:00
|
|
|
"config/supervisor.conf",
|
2014-11-18 11:56:37 +00:00
|
|
|
]
|
|
|
|
|
|
|
|
frappe_user = get_config().get('frappe_user')
|
|
|
|
if not frappe_user:
|
|
|
|
print "frappe user not set"
|
|
|
|
sys.exit(1)
|
|
|
|
|
|
|
|
for path in files:
|
|
|
|
if os.path.exists(path):
|
|
|
|
uid = pwd.getpwnam(frappe_user).pw_uid
|
|
|
|
gid = grp.getgrnam(frappe_user).gr_gid
|
|
|
|
os.chown(path, uid, gid)
|
|
|
|
|
2014-11-18 12:03:36 +00:00
|
|
|
if os.path.exists("config/supervisor.conf"):
|
|
|
|
exec_cmd("{bench} setup supervisor".format(bench=sys.argv[0]))
|
|
|
|
exec_cmd("supervisorctl reload")
|
|
|
|
|
2014-11-18 11:56:37 +00:00
|
|
|
|
|
|
|
patch.add_command(_fix_perms)
|
2014-10-13 04:54:07 +00:00
|
|
|
|
2014-07-10 17:21:34 +00:00
|
|
|
#Bench commands
|
|
|
|
|
|
|
|
bench.add_command(init)
|
|
|
|
bench.add_command(get_app)
|
|
|
|
bench.add_command(new_app)
|
|
|
|
bench.add_command(new_site)
|
|
|
|
bench.add_command(setup)
|
|
|
|
bench.add_command(update)
|
2014-07-11 04:29:57 +00:00
|
|
|
bench.add_command(restart)
|
2014-07-15 06:17:36 +00:00
|
|
|
bench.add_command(config)
|
2014-07-15 09:18:50 +00:00
|
|
|
bench.add_command(start)
|
2014-07-21 04:45:18 +00:00
|
|
|
bench.add_command(set_nginx_port)
|
2014-11-07 14:49:13 +00:00
|
|
|
bench.add_command(_set_mariadb_host)
|
2014-07-21 06:18:07 +00:00
|
|
|
bench.add_command(set_default_site)
|
2014-07-17 09:38:26 +00:00
|
|
|
bench.add_command(migrate_3to4)
|
2014-08-27 11:53:04 +00:00
|
|
|
bench.add_command(shell)
|
2014-09-03 06:57:04 +00:00
|
|
|
bench.add_command(_backup_all_sites)
|
|
|
|
bench.add_command(_backup_site)
|
2014-09-04 07:38:43 +00:00
|
|
|
bench.add_command(_prime_wheel_cache)
|
2014-09-04 09:45:53 +00:00
|
|
|
bench.add_command(_release)
|
2014-10-13 04:54:07 +00:00
|
|
|
bench.add_command(patch)
|
2014-11-19 07:09:37 +00:00
|
|
|
bench.add_command(set_url_root)
|