def __config_shredder(): require("user") env.appenv = 'default' # default packages env.apprepo = 'ssh://%[email protected]//home/ecsdev/hg-projects/ecs' % env.user env.appbranch = "default" # default branch (env.appname, env.appwsgi, env.apacheconf) = ("ecs", "main.wsgi", "apache.conf") # FIXME: is hardcoded, should go to ecs/application env.appconfdir = "config" env.appenvdir = "environment" env.appbaselinedir = "baseline" env.appsrcdir = "src" env.apphostname = "s.ecsdev.ep3.at" env.targetjoin = posixpath.join env.targetbasedir = env.targetjoin("/home", env.user) __config_common()
def __config_common(): ''' common to all config ''' env.targetconfdir = env.targetjoin(env.targetbasedir,env.appconfdir) env.targetenvdir = env.targetjoin(env.targetbasedir,env.appenvdir) env.targetbaselinedir = env.targetjoin(env.targetbasedir,env.appbaselinedir) env.targetsrcdir = env.targetjoin(env.targetbasedir,env.appsrcdir) env.targetappdir = env.targetjoin(env.targetsrcdir,env.appname) env.initialized = env.targetjoin(env.targetconfdir,"env.initialized") if env.targetjoin == ntpath.join: env.activate = "%s\\Scripts\\activate.bat" % env.targetenvdir env.manage = "python .\\manage.py" else: env.activate = ". %s/bin/activate" % env.targetenvdir env.manage = "./manage.py"
def __update(components=None): ''' __update[:component[(,components)+]], see fab help_update for details ''' with settings(warn_only=True): if not components: components = C_default_update warn("no components specified, using default: %s" % str(components)) if 'daemonsstop' in components: run("sudo /sbin/stop %s" % env.appname+ "-mailserver-"+ env.user) run("sudo /sbin/stop %s" % env.appname+ "-mainapp_celeryd-"+ env.user) if 'makedir' in components: if not exists(env.initialized): with cd(env.targetbasedir): run("mkdir %s; touch %s" % (env.targetconfdir, env.initialized)) run("mkdir %s; mkdir %s; mkdir log; mkdir public_html; mkdir .python-eggs" % \ (env.targetjoin(env.targetconfdir,"apache.wsgi"), env.targetjoin(env.targetconfdir,"apache.conf"))) if 'source' in components: # TODO: is hardcoded major version, autovm makes same thing in a different place, violates "single source" stampversion="""python -c "import sys; id,num,branch=sys.argv[1:4]; print ('ECS_VERSION= \\'0.9-%s-%s-%s\\'' % (num,id,branch))" `hg -q identify --id --num --branch` > ecs/version.py""" _repo_clone (env.targetbasedir, env.targetsrcdir, env.apprepo, env.appbranch, stampversion) if ('envbaseline' in components): abort("unfinished") if ('envclear' in components): # TODO: refactor whole function to object and run envboot,envupdate after envclear run("if test -d %s; then rm -r %s; fi" % (env.targetenvdir, env.targetenvdir)) run("if test -d %s; then rm -r %s; fi" % (env.targetjoin(env.targetsrcdir, 'download-cache'), env.targetjoin(env.targetsrcdir, 'download-cache'))) with cd(env.targetsrcdir): if ('envboot' in components): run("./bootstrap.py %s" % env.targetenvdir) if ('envupdate' in components): run("%s; fab appreq:ecs,flavor=%s,only_list=True; fab appenv:ecs,flavor=%s" % (env.activate, env.appenv, env.appenv)) if ('envupgrade' in components): run("%s; fab appenv:ecs,flavor=%s,upgrade=True" % (env.activate, env.appenv)) if 'daemonsconfig' in components: abort("unimplemented") if ('apacheconfig' in components): abort("needs refactoring") with cd(env.targetconfdir): # FIXME: apache.conf and apache.wsgi should be rendered as template and updated every time we get called here run("if test ! -e apache.conf/%s; then cp %s apache.conf/%s; fi" % \ ("".join((env.appname,'-',env.apacheconf)), env.targetjoin(env.targetappdir, env.apacheconf), "".join((env.appname,'-',env.apacheconf)))) # FIXME if we override apache.wsgi, we should think of a safe way to touch the wsgi for reloading the app run("if test ! -e apache.wsgi/%s; then cd apache.wsgi; ln -s %s/%s %s; fi" % \ ("".join((env.appname,"-",env.appwsgi)), env.targetappdir, env.appwsgi, "".join((env.appname, "-", env.appwsgi)))) if ('wsgiconfig' in components): run("%s; cd %s; fab app:ecs,wsgi_config,ecs" % (env.activate, env.targetappdir)) if ('searchconfig' in components): with cd(env.targetsrcdir): run("%s; cd %s; %s build_solr_schema > %s" % (env.activate, env.targetappdir, env.manage, env.targetjoin(env.targetconfdir, "solr-schema.xml"))) sudo("cp %s %s" % (env.targetjoin(env.targetconfdir, "solr-schema.xml"), env.targetjoin("/", "etc", "solr", "schema.xml"))) if ('dbclear' in components): run("dropdb %s; createdb %s" % (env.user, env.user)) if 'dbupdate' in components: with cd(env.targetconfdir): run("%s; cd %s; ./manage.py syncdb --noinput; ./manage.py migrate --noinput --all; ./manage.py bootstrap" % (env.activate, env.targetappdir)) if 'searchupdate' in components: with cd(env.targetconfdir): run("%s; cd %s; if test -d woosh_index; then rm -rf woosh_index; fi; ./manage.py rebuild_index" % (env.activate, env.targetappdir)) if 'massimport' in components: with cd(env.targetconfdir): run("%s; cd %s; ./manage.py massimport -t ../docs/incoming/ethikkommission/legacy_import/mai-meeting.doc", (env.activate, env.targetappdir)) run("%s; cd %s; ./manage.py massimport -c ../docs/incoming/ethikkommission/legacy_import/mai-meeting.categorize", (env.activate, env.targetappdir)) if 'daemonsstart' in components: run("sudo /sbin/start %s" % env.appname+ "-mainapp_celeryd-"+ env.user) run("sudo /sbin/start %s" % env.appname+ "-mailserver-"+ env.user) if 'wsgireload' in components: run("touch %s" % (env.targetjoin(env.targetconfdir,"apache.wsgi","".join((env.appname,"-", env.appwsgi))))) if 'apacherestart' in components: with cd(env.targetsrcdir): run("%s; fab apache:restart" % (env.activate))