Skip to content

Instantly share code, notes, and snippets.

@averrin
Created October 23, 2012 13:45
Show Gist options
  • Select an option

  • Save averrin/3938832 to your computer and use it in GitHub Desktop.

Select an option

Save averrin/3938832 to your computer and use it in GitHub Desktop.
emercom installer 0.3
from base import Project
from fabric.api import *
from fabric.colors import *
from fabric.contrib.files import *
import os
import sys
class Emercom(Project):
definition = {
'title': 'Emercom',
'version': '3.0',
'desc': '',
'root': '/var/www/test_install/',
'repo': '[email protected]:%s.git',
'packages': ["git-core", "vim", "python-pip", "postgresql-common", "postgresql", "libpq-dev"]
}
def install(self, for_v2=False):
root = Emercom.definition['root']
home_folder = Emercom.definition['home_folder']
env.warn_only = True
self.pre()
env.warn_only = False
with cd(root):
sudo('apt-get install -ym --force-yes %s' % ' '.join(packages))
print cyan('>\t> Cloning projects')
# run('rm -rf ./api ./dev ./emercom')
run('git clone ' + Emercom.definition['repo'] % "api")
run('git clone ' + Emercom.definition['repo'] % "dev")
run('git clone ' + Emercom.definition['repo'] % "emercom")
sudo('pip install virtualenv')
run('virtualenv env')
self.env_run('pip install -r ./api/requirements.txt')
sed(root + 'api/config.py', '/home/averrin/projects/', root)
if for_v2:
self.env_run('pip install cx_Oracle')
run('cp ./api/v2/stb.py ./api/modules/')
print cyan('>\t> Uploading very heavy (~100mb) oracle libs. Take a while')
put(home_folder + 'client.tar', root)
run('tar -xf %sclient.tar' % root)
sudo('mkdir -p /usr/lib/oracle/xe/app/oracle/product/10.2.0/client/lib')
sudo('cp ./home/averrin/client/* /usr/lib/oracle/xe/app/oracle/product/10.2.0/client/lib/')
# run('chmod 777 ./api/api.log')
user = prompt('Postgres user: ')
password = prompt('Postgres password: ')
sed(root + 'dev/dev/settings.py', '"USER": ".*"', '"USER": "%s"' % user)
sed(root + 'dev/dev/settings.py', '"PASSWORD": ".*"', '"PASSWORD": "%s"' % password)
sed(root + 'dev/dev/settings.py', '"HOST": ".*"', '"HOST": "%s"' % 'localhost')
sed(root + 'emercom/emercom/settings.py', '"USER": ".*"', '"USER": "%s"' % user)
sed(root + 'emercom/emercom/settings.py', '"PASSWORD": ".*"', '"PASSWORD": "%s"' % password)
sed(root + 'emercom/emercom/settings.py', '"HOST": ".*"', '"HOST": "%s"' % 'localhost')
sed(root + 'dev/dev/settings.py', '/home/averrin/projects/', root)
sed(root + 'emercom/emercom/settings.py', '/home/averrin/projects/', root)
def pre(self):
print cyan('>\t> Prepearing to install')
root = Emercom.definition['root']
home_folder = Emercom.definition['home_folder']
run('rm ~/.ssh/dev_key')
put(os.path.join(home_folder, '.temp', 'dev_key'), '~/.ssh/')
run('chmod 400 ~/.ssh/dev_key')
run('rm ~/.ssh/config')
ssh_config = """
host 10.137.190.6
user git
identityfile ~/.ssh/dev_key"""
run('echo "%s" >> ~/.ssh/config' % ssh_config)
sudo('rm -rf %s' % root)
sudo('mkdir %s' % root)
sudo('chmod 777 %s' % root)
def remove(self):
root = Emercom.definition['root']
sudo('rm -rf %s' % root)
def check(self):
root = Emercom.definition['root']
with cd(root + 'api'):
self.env_run(' '.join(
["LD_LIBRARY_PATH='/usr/lib/oracle/xe/app/oracle/product/10.2.0/client/lib/'",
root + 'env/bin/python',
'./main.py']))
return True
def start(self):
pass
def stop(self):
pass
def env_run(self, command, use_sudo=False, *args, **kwargs):
env = 'source %senv/bin/activate && ' % Emercom.definition['root']
if use_sudo:
return sudo(env + command, *args, **kwargs)
else:
return run(env + command, *args, **kwargs)
if __name__ == "__main__":
project = Emercom(home_folder=os.path.split(os.path.abspath(sys.argv[0]))[0])
try:
project.__getattribute__(sys.argv[1])()
except AttributeError:
print red('> Unknown command')
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment