-
Notifications
You must be signed in to change notification settings - Fork 0
/
fabfile.py
90 lines (74 loc) · 3.29 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
from fabric.api import *
import time
import socket
import config
# env.hosts = ['192.168.23.3']
# env.user = 'vagrant'
# env.key_filename = '/Users/macpro/vagrant-vm/test_srv_3/.vagrant/machines/default/virtualbox/private_key'
env.hosts = config.env_hosts
env.user = config.env_user
env.key_filename = config.env_key_filename
def wait_for_ssh():
s = socket.socket()
address = '192.168.23.3'
port = 22
while True:
time.sleep(1)
try:
s.connect((address, port))
return
except Exception:
print("failed to connect to {}:{}".format(address, port))
pass
def reload_vm():
local("cd ~/vagrant-vm/test_srv_3/ && vagrant destroy -f")
local("rm -rf ~/vagrant-vm/test_srv_3/")
local("mkdir ~/vagrant-vm/test_srv_3/ && cd ~/vagrant-vm/test_srv_3/ && vagrant init ubuntu/trusty64")
# local("mkdir ~/vagrant-vm/test_srv_3/ && cd ~/vagrant-vm/test_srv_3/ && vagrant init ubuntu/xenial64")
local("rm ~/vagrant-vm/test_srv_3/Vagrantfile")
local("cp ~/vagrant-vm/Vagrantfile ~/vagrant-vm/test_srv_3/")
local("cd ~/vagrant-vm/test_srv_3/ && ssh-keygen -R 192.168.23.3")
local("cd ~/vagrant-vm/test_srv_3/ && vagrant up")
def setup_pg():
wait_for_ssh()
sudo("apt-get update")
sudo("apt-get install postgresql python-psycopg2 libpq-dev -y")
sudo("apt-get install libxml2 libxslt1.1 libxml2-dev libxslt1-dev python-libxml2 -y")
sudo("apt-get install python-libxslt1 python3-dev python-setuptools build-essential libssl-dev libffi-dev -y")
run("sudo -u postgres psql -c 'CREATE DATABASE db_name;'")
run("sudo -u postgres psql -c \"CREATE USER username WITH password 'password';\"")
run("sudo -u postgres psql -c 'GRANT ALL privileges ON DATABASE db_name TO username;'")
sudo("echo \"listen_addresses = '*'\" >> /etc/postgresql/9.3/main/postgresql.conf")
sudo("echo \"host all all 0.0.0.0/0 md5\" >> /etc/postgresql/9.3/main/pg_hba.conf")
sudo("service postgresql stop && service postgresql start")
def unpack_project():
sudo("apt-get install git -y")
run("mkdir projects && cd projects && git clone https://github.com/evro23x/kino-domino.git")
with cd("kino-domino/"):
put('~/vagrant-vm/config.py', 'config.py')
put('~/vagrant-vm/alembic.ini', 'alembic.ini')
run("mkdir ~/venvs")
sudo("apt-get install python3.4-venv -y")
run("cd venvs && python3 -m venv kino-domino")
with prefix('source ~/venvs/kino-domino/bin/activate'):
with cd("~/projects/kino-domino/"):
run("pip install -r requirements.txt")
run("alembic upgrade head")
def bootstrap():
reload_vm()
setup_pg()
unpack_project()
def background_run(command):
command = 'nohup {} &> /dev/null &'.format(command)
run(command, pty=False)
def deploy():
with prefix('source ~/venvs/kino-domino/bin/activate'):
with cd("projects/kino-domino/"):
put('~/vagrant-vm/config.py', 'config.py')
put('~/vagrant-vm/alembic.ini', 'alembic.ini')
run("git checkout -- .")
run("git pull origin master")
run("pip install -r requirements.txt")
run("alembic upgrade head")
# run("nohup python kino_domino_bot.py > /dev/null &")
execute(background_run, "python kino_domino_bot.py")