forked from onaio/tally-ho
-
Notifications
You must be signed in to change notification settings - Fork 4
/
fabfile.py
124 lines (90 loc) · 3.7 KB
/
fabfile.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
import os
from subprocess import call
import sys
from fabric.api import cd, env, prefix, run
DEPLOYMENTS = {
'failover': {
'home': '/var/www/',
'db_host': '192.168.1.2',
'from_local': True,
'host_string': 'hnec', # configure .ssh/config for HNEC
'project': 'tally-system',
'django_config_module': 'tally_ho.settings.local_settings',
},
'prod': {
'home': '/var/www/',
'db_host': '192.168.1.1',
'from_local': True,
'host_string': 'hnec', # configure .ssh/config for HNEC
'project': 'tally-system',
'django_config_module': 'tally_ho.settings.local_settings',
}
}
def source(path):
return prefix('source %s' % path)
def exit_with_error(message):
print message
sys.exit(1)
def check_key_filename(deployment_name):
if 'key_filename' in DEPLOYMENTS[deployment_name] and \
not os.path.exists(DEPLOYMENTS[deployment_name]['key_filename']):
exit_with_error("Cannot find required permissions file: %s" %
DEPLOYMENTS[deployment_name]['key_filename'])
def setup_env(deployment_name):
deployment = DEPLOYMENTS.get(deployment_name)
if deployment is None:
exit_with_error('Deployment "%s" not found.' % deployment_name)
env.update(deployment)
check_key_filename(deployment_name)
env.virtualenv = os.path.join(env.home, '.virtualenvs',
env.project, 'bin', 'activate')
env.code_src = os.path.join(env.home, env.project)
env.pip_requirements_file = os.path.join(env.code_src,
'requirements/common.pip')
def local_deploy():
env.use_ssh_config = True
call(['./scripts/deploy'])
run('rm -rf %s' % env.project)
run('tar xzvf %s.tgz' % env.project)
run('mv %s-clean %s' % (env.project, env.project))
## remove existing deploy and clean new deploy
run('find %s -name "*.pyc" -exec rm -rf {} \;' % env.project)
run('find %s -name "._*" -exec rm -rf {} \;' % env.project)
run('./%s/scripts/install_app %s' % (env.project, env.db_host))
def manage_functions(deployment_name):
setup_env(deployment_name)
with cd(env.code_src):
config_module = env.django_config_module
with source(env.virtualenv):
run("python manage.py syncdb --settings=%s" % config_module)
run("python manage.py migrate --settings=%s" % config_module)
run("python manage.py collectstatic --settings=%s --noinput"
% config_module)
def deploy(deployment_name, branch='master'):
setup_env(deployment_name)
env.use_ssh_config = True
run('sudo service monit stop && sudo service nginx stop && sudo stop tally')
if getattr(env, 'from_local', False):
local_deploy()
else:
with cd(env.code_src):
run("git fetch origin")
run("git checkout origin/%s" % branch)
run('find . -name "*.pyc" -exec rm -rf {} \;')
run('find . -name "._" -exec rm -rf {} \;')
with source(env.virtualenv):
run("pip install -r %s" % env.pip_requirements_file)
manage_functions(deployment_name)
run('sudo start tally && sudo service nginx start && sudo service monit start')
def reload_all(deployment_name):
setup_env(deployment_name)
with cd(env.code_src):
with source(env.virtualenv):
run('./scripts/reload_all tally %s %s' %
(env.db_host, env.django_config_module))
def manage(deployment_name, cmd):
setup_env(deployment_name)
with cd(env.code_src):
with source(env.virtualenv):
run('python manage.py %s --settings=%s' %
(cmd, env.django_config_module))