Commit f1979c278c5e22227b9daa49249395ea1299362e

Authored by Sergio Oliveira
1 parent 8089173b

Removed fabfile

Showing 1 changed file with 0 additions and 338 deletions   Show diff stats
fabfile.py
... ... @@ -1,338 +0,0 @@
1   -# coding: utf-8
2   -
3   -import os
4   -
5   -from fabric import colors
6   -from fabric.utils import error
7   -from fabric.decorators import task
8   -from fabric.api import env, run, sudo, local
9   -from fabric.contrib.files import exists
10   -from fabric.context_managers import prefix, cd, settings, shell_env
11   -
12   -DEBIAN_FAMILY = ['debian', 'ubuntu']
13   -REDHAT_FAMILY = ['centos', 'fedora']
14   -
15   -DISTRO_CMD = {
16   - 'debian': ('apt-get', {
17   - 'install': '-y',
18   - 'update': '-y',
19   - }),
20   - 'redhat': ('yum', {
21   - 'install': '-y',
22   - 'update': '-y',
23   - })
24   -}
25   -
26   -APP_USER = APP_NAME = VENV_NAME = 'colab'
27   -REPO_URL = 'https://github.com/colab-community/colab.git'
28   -REPO_BRANCH = 'master'
29   -
30   -
31   -environments = {
32   - 'dev': {
33   - 'hosts': ['127.0.0.1'],
34   - 'key_filename': '~/.vagrant.d/insecure_private_key',
35   - 'port': 2222,
36   - 'is_vagrant': True,
37   - 'superuser': 'vagrant',
38   - },
39   -}
40   -DEFAULT_ENVIRONMENT = 'dev'
41   -
42   -env.user = APP_USER
43   -env.use_shell = False
44   -
45   -PROJECT_PATH = os.path.join(os.path.dirname(__file__))
46   -REPO_PATH = '/home/{}/{}'.format(APP_USER, APP_NAME)
47   -SOURCE_VENV = 'source /usr/local/bin/virtualenvwrapper.sh'
48   -
49   -WORKON_ENV = '{} && workon {}'.format(SOURCE_VENV, VENV_NAME)
50   -MANAGE_PATH = os.path.join(REPO_PATH, 'src')
51   -SETTINGS_PATH = os.path.join(MANAGE_PATH, APP_NAME)
52   -
53   -
54   -def get_distro_family():
55   - cmd = 'python -c "import platform; print platform.dist()[0]"'
56   - linux_name = run(cmd).lower()
57   - if linux_name in DEBIAN_FAMILY:
58   - return 'debian'
59   - elif linux_name in REDHAT_FAMILY:
60   - return 'redhat'
61   - else:
62   - error(colors.red('Distribuiton `{}` not supported'.format(linux_name)))
63   - exit(1)
64   -
65   -
66   -def cmd(family, command, args=''):
67   - pkgmanager, commands = DISTRO_CMD[family]
68   - return ' '.join([pkgmanager, command, commands[command], args])
69   -
70   -
71   -@task
72   -def environment(name=DEFAULT_ENVIRONMENT):
73   - """Set the environment where the tasks will be executed"""
74   - global REPO_URL
75   - global REPO_BRANCH
76   -
77   - try:
78   - import project_cfg
79   - except ImportError:
80   - pass
81   - else:
82   - REPO_URL = project_cfg.repository_url
83   - REPO_BRANCH = project_cfg.branch
84   - environments.update(project_cfg.environments)
85   -
86   - if name not in environments:
87   - error(colors.red('Environment `{}` does not exist.'.format(name)))
88   -
89   - env.update(environments[name])
90   - env.environment = name
91   -
92   -
93   -def package_install(pkg):
94   - family = get_distro_family()
95   - sudo(cmd(family, 'install', pkg))
96   -
97   -
98   -def install_requirements():
99   - with cd(REPO_PATH), prefix(WORKON_ENV):
100   - run('pip install -U distribute')
101   - if not env.is_vagrant:
102   - run('pip install -r requirements.txt')
103   - return
104   -
105   - if exists('requirements-{}.txt'.format(env.environment)):
106   - run('pip install -r requirements-{}.txt'.format(env.environment))
107   - else:
108   - run('pip install -r requirements.txt')
109   -
110   -
111   -def mkvirtualenv():
112   - if not exists('~/.virtualenvs/' + VENV_NAME):
113   -
114   - with prefix(SOURCE_VENV):
115   - run('mkvirtualenv ' + VENV_NAME)
116   - return True
117   -
118   -
119   -def manage(command):
120   - django_settings = env.get('django_settings')
121   - env_vars = {}
122   - if django_settings:
123   - env_vars.update({'DJANGO_SETTINGS_MODULE': django_settings})
124   -
125   - with shell_env(**env_vars):
126   - with cd(MANAGE_PATH), prefix(WORKON_ENV):
127   - run('python manage.py {}'.format(command))
128   -
129   -
130   -def migrate():
131   - manage('migrate')
132   - manage('loaddata super_archives/fixture/initial_data.json')
133   -
134   -
135   -def collectstatic():
136   - sudo('mkdir -p /usr/share/nginx/{}'.format(APP_NAME))
137   - sudo('chown {} /usr/share/nginx/{}'.format(env.user, APP_NAME))
138   - manage('collectstatic --noinput')
139   -
140   -
141   -def create_local_settings():
142   - with cd(SETTINGS_PATH):
143   - env_local_settings = 'local_settings-{}.py'.format(env.environment)
144   -
145   - if not exists('local_settings.py') and exists(env_local_settings):
146   - run('ln -s {} {}'.format(env_local_settings, 'local_settings.py'))
147   - run('chown {} local_settings.py'.format(env.user))
148   -
149   -
150   -def update_code():
151   - if env.is_vagrant:
152   - if not exists(REPO_PATH):
153   - run('ln -s /vagrant/ {}'.format(REPO_PATH))
154   - return
155   -
156   - if not exists(REPO_PATH):
157   - run('git clone {} {} -b {}'.format(REPO_URL, REPO_PATH, REPO_BRANCH))
158   - else:
159   - with cd(REPO_PATH):
160   - run('git checkout {}'.format(REPO_BRANCH))
161   - run('git pull')
162   -
163   -
164   -@task
165   -def bootstrap():
166   - """Bootstrap machine to run fabric tasks"""
167   -
168   - with settings(user=env.superuser):
169   - family = get_distro_family()
170   - if(family == 'debian'):
171   - sudo(cmd(family, 'update'))
172   - else:
173   - package_install('wget')
174   -
175   - if not exists('/usr/bin/git'):
176   - package_install('git-core')
177   -
178   - if env.is_vagrant:
179   - groups = ['sudo', 'vagrant']
180   - local('chmod -fR g+w {}'.format(PROJECT_PATH))
181   - else:
182   - groups = ['sudo']
183   -
184   - for group in groups:
185   - sudo('groupadd -f {}'.format(group))
186   -
187   - command = 'useradd {} -G {} -m -s /bin/bash'
188   - sudo(command.format(APP_USER, ','.join(groups)))
189   -
190   - ssh_dir = '/home/{0}/.ssh/'.format(APP_USER)
191   - if not exists(ssh_dir):
192   - sudo('mkdir -p {0}'.format(ssh_dir))
193   - sudo('chmod 700 {0}'.format(ssh_dir))
194   - sudo('cp ~{}/.ssh/authorized_keys /home/{}/.ssh/'.format(
195   - env.superuser,
196   - APP_USER
197   - ))
198   - sudo('chown -fR {0}:{0} {1}'.format(APP_USER, ssh_dir))
199   -
200   - sudoers_file = os.path.join('/etc/sudoers.d/', APP_USER)
201   - tmp_file = os.path.join('/tmp', APP_USER)
202   - if not exists(sudoers_file):
203   - sudo('echo "{} ALL=NOPASSWD: ALL" > {}'.format(APP_USER, tmp_file))
204   - sudo('chown root:root {}'.format(tmp_file))
205   - sudo('chmod 440 {}'.format(tmp_file))
206   - sudo('mv {} {}'.format(tmp_file, sudoers_file))
207   -
208   -
209   -@task
210   -def provision():
211   - """Run puppet"""
212   -
213   - update_code()
214   -
215   - puppet_path = os.path.join(REPO_PATH, 'puppet/')
216   - modules_path = os.path.join(puppet_path, 'modules')
217   - puppet_modules = '{}:/etc/puppet/modules'.format(modules_path)
218   -
219   - with cd(puppet_path):
220   - run('sudo python bootstrap.py')
221   -
222   - if env.is_vagrant:
223   - cmd = os.path.join(puppet_path, 'manifests', 'site.pp')
224   - else:
225   - cmd = '-e "include {}"'.format(APP_NAME)
226   -
227   - if not exists('/usr/bin/puppet'):
228   - print(colors.red('Please install `puppet` before continue.'))
229   - return
230   -
231   - sudo('puppet apply --modulepath={} {}'.format(puppet_modules, cmd))
232   -
233   -
234   -@task
235   -def ssh_keygen():
236   - """Create SSH credentials"""
237   -
238   - if not exists('~/.ssh/id_rsa'):
239   - run("ssh-keygen -f ~/.ssh/id_rsa -N '' -b 1024 -q")
240   - key = run('cat ~/.ssh/id_rsa.pub')
241   -
242   - print('Public key:')
243   - print(colors.yellow(key))
244   - print('')
245   - print('Add the key above to your github repository deploy keys')
246   -
247   -
248   -@task
249   -def deploy(noprovision=False):
250   - """Deploy and run the new code (master branch)"""
251   -
252   - if noprovision is False:
253   - provision()
254   - else:
255   - update_code()
256   -
257   - fix_path()
258   -
259   - install_solr()
260   -
261   - mkvirtualenv()
262   -
263   - sudo('supervisorctl stop all')
264   -
265   - install_requirements()
266   - create_local_settings()
267   - collectstatic()
268   - migrate()
269   -
270   - build_schema()
271   -
272   - sudo('supervisorctl start all')
273   -
274   -
275   -def fix_path():
276   - global SOURCE_VENV
277   - global WORKON_ENV
278   - if exists('/usr/bin/virtualenvwrapper.sh'):
279   - SOURCE_VENV = 'source /usr/bin/virtualenvwrapper.sh'
280   - WORKON_ENV = '{} && workon {}'.format(SOURCE_VENV, VENV_NAME)
281   -
282   -
283   -@task
284   -def install_solr():
285   - """Install Solr"""
286   -
287   - SOLR_PKG = 'https://archive.apache.org/dist/lucene/solr/4.6.1/solr-4.6.1.tgz'
288   -
289   - if not exists('~/solr-4.6.1'):
290   - run('wget {} -O /tmp/solr-4.6.1.tgz'.format(SOLR_PKG))
291   - run('tar xzf /tmp/solr-4.6.1.tgz -C /tmp/')
292   - run('cp -rf /tmp/solr-4.6.1 ~/solr-4.6.1')
293   - run('mv ~/solr-4.6.1/example ~/solr-4.6.1/colab')
294   - run('chmod +x ~/solr-4.6.1/colab/start.jar')
295   - run('rm /tmp/solr-4.6.1.tgz')
296   -
297   - with cd('~/solr-4.6.1/colab/solr/collection1/conf/'):
298   - if not exists('stopwords_en.txt'):
299   - run('cp stopwords.txt stopwords_en.txt')
300   -
301   -
302   -@task
303   -def solr(port=8983):
304   - """Start Solr"""
305   - with cd('~/solr-4.6.1/colab'), settings(user='colab'):
306   - run('java -jar start.jar -Djetty.port={}'.format(port))
307   -
308   -
309   -@task
310   -def rebuild_index(age=None, batch=None):
311   - """Rebuild the solr index"""
312   - age_arg = ''
313   - if age:
314   - age_arg = '--age={}'.format(age)
315   -
316   - batch_arg = ''
317   - if batch:
318   - batch_arg = '--batch-size={}'.format(batch)
319   -
320   - manage('rebuild_index {} {}'.format(age_arg, batch_arg))
321   -
322   -
323   -@task
324   -def update_index():
325   - """Update solr index"""
326   - manage('update_index')
327   -
328   -
329   -@task
330   -def build_schema():
331   - """Build solr schema"""
332   - solr_schema_file = '~/solr-4.6.1/colab/solr/collection1/conf/schema.xml'
333   - manage('build_solr_schema -f {}'.format(solr_schema_file))
334   - run(r'sed -i "s/<fields>/<fields>\n<field name=\"_version_\" type=\"long\" indexed=\"true\" stored =\"true\"\/>/" {}'.format(solr_schema_file))
335   -
336   -
337   -# Main
338   -environment()