-
Notifications
You must be signed in to change notification settings - Fork 23
/
fabfile.py
97 lines (83 loc) · 2.48 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
"""
fabfile.py
~~~~~~~~~~
Fabric file to deploy the `mini_qa` question-answering program. The
main workflow is one of:
1. `fab first_deploy`: set up the EC2 instance, run tests, push all
code to server
2. `fab deploy`: run tests, and push all code to server
"""
# Standard library
import os
# Third-party libraries
from fabric.api import *
from fabric.contrib.console import confirm
# My libraries
import config
import ec2
env.hosts = ec2.public_dns_names("mini_qa")
env.user = 'ubuntu'
env.key_filename = ["%s/%s.pem" % \
(os.environ["AWS_HOME"], os.environ["AWS_KEYPAIR"])]
def first_deploy():
"""
Sets up the initial git repository and other files, then do a
standard deployment.
"""
setup_instance()
clone_repo()
deploy()
def setup_instance():
"""
Install all the required software on the remote machine, and configure
appropriately.
"""
# Make sure we're up to date
run("sudo apt-get update")
# git
run("sudo apt-get install -y git-core")
run("git config --global user.name 'Michael Nielsen'")
run("git config --global user.email 'mn@michaelnielsen.org'")
run("git config --global core.editor emacs")
run("git config --global alias.co checkout")
run("git config --global credential.helper cache")
# emacs
run("sudo apt-get install -y emacs23")
# Python libraries
# Make sure the Python path includes the $HOME directory
run("export PYTHONPATH=$HOME/")
# Python tools
run("sudo apt-get install -y python-dev")
run("sudo apt-get install -y python-setuptools")
run("sudo apt-get install -y ipython")
# Python libraries
run("sudo easy_install BeautifulSoup")
run("sudo easy_install boto")
def clone_repo():
"""
When deploying for the first time, clone the desired GitHub
repository onto the EC2 instance.
"""
run("git clone https://github.com/%s/%s.git" % \
(config.GITHUB_USER_NAME, config.GITHUB_PROJECT_NAME))
def deploy():
"""
Run tests, deploy all code to server, including code not in
repository.
"""
test()
transfer_special_files()
code_dir = "/home/ubuntu/"+config.GITHUB_PROJECT_NAME
with cd(code_dir):
run("git pull")
def test():
"""
Run the tests.
"""
local('python test.py')
def transfer_special_files():
"""
When deploying, transfer files that are not in the repository.
"""
put("config.py", "/home/ubuntu/%s/config.py" %
config.GITHUB_PROJECT_NAME)