-
Notifications
You must be signed in to change notification settings - Fork 80
/
Copy pathpavement.py
187 lines (134 loc) · 6.03 KB
/
pavement.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
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
# coding: utf8
"""
This software is licensed under the Apache 2 license, quoted below.
Copyright 2014 Crystalnix Limited
Licensed under the Apache License, Version 2.0 (the "License"); you may not
use this file except in compliance with the License. You may obtain a copy of
the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
License for the specific language governing permissions and limitations under
the License.
"""
import os
from raven import Client
from paver.easy import task, needs
from paver.easy import sh
client = Client(os.environ.get('RAVEN_DNS'))
@task
def test():
sh('./manage.py test --settings=omaha_server.settings_test', cwd='omaha_server')
@task
def test_tox():
path_to_test = os.getenv("PATH_TO_TEST", '')
settings = os.getenv("DJANGO_SETTINGS_MODULE", 'omaha_server.settings_test')
sh('./manage.py test %s --settings=%s' % (path_to_test, settings), cwd='omaha_server')
@task
def test_postgres():
sh('./manage.py test --settings=omaha_server.settings_test_postgres', cwd='omaha_server')
@task
@needs('test', 'test_postgres')
def test_all():
pass
@task
def up_local_dev_server():
"""
Requirements:
- [docker](docker.com) or [boot2docker](https://github.com/boot2docker/boot2docker) for OS X or Windows
- [docker-compose](https://docs.docker.com/compose/install/)
"""
sh('docker-compose -f docker-compose.dev.yml -p dev up -d db')
sh('docker-compose -f docker-compose.dev.yml -p dev up -d web')
print("""Open http://{DOCKER_HOST}:9090/admin/\n username: admin\n password: admin""")
@task
def deploy_dev():
sh('ebs-deploy deploy -e omaha-server-dev', cwd='omaha_server')
@task
def collectstatic():
sh('./manage.py collectstatic --noinput', cwd='omaha_server')
@task
def loaddata():
sh('./manage.py loaddata fixtures/initial_data.json', cwd='omaha_server')
@task
def migrate():
sh('./manage.py migrate --noinput', cwd='omaha_server')
@task
def create_admin():
sh('./createadmin.py', cwd='omaha_server')
@task
def configure_nginx():
filebeat_host = os.environ.get('FILEBEAT_HOST', '')
filebeat_port = os.environ.get('FILEBEAT_PORT', '')
log_nginx_to_filebeat = True if os.environ.get('LOG_NGINX_TO_FILEBEAT', 'True').title() == 'True' else False
if log_nginx_to_filebeat and filebeat_host and filebeat_port.isdigit():
filebeat_read_nginx_logs()
server_name = os.environ.get('HOST_NAME', '_')
server_name = server_name if server_name != '*' else '_'
sh("sed -i 's/server_name.*;/server_name %s;/g' /etc/nginx/sites-enabled/nginx-app.conf" % (server_name))
def elasticsearch_output(elasticsearch_host, elasticsearch_port):
sh("sed -i 's/hosts: \[\"localhost:9200\"]/hosts: \[\"%s:%s\"]/g' /etc/filebeat/filebeat.yml" % (elasticsearch_host, elasticsearch_port))
def filebeat_read_nginx_logs():
sh("sed -i 's|#- type: log|- type: log|g' /etc/filebeat/filebeat.yml")
sh("sed -i 's|# enabled: false| enabled: true|g' /etc/filebeat/filebeat.yml")
sh("sed -i 's|# paths:| paths:|g' /etc/filebeat/filebeat.yml")
sh("sed -i 's|# path_to_logs| - /var/log/nginx/*.log|g' /etc/filebeat/filebeat.yml")
def logstash_output(logstash_host, logstash_port):
elasticsearch_output_disabled()
sh("sed -i 's/#output.logstash:/output.logstash:/g' /etc/filebeat/filebeat.yml")
sh("sed -i 's/#hosts: \[\"localhost:5044\"]/hosts: \[\"%s:%s\"]/g' /etc/filebeat/filebeat.yml" % (logstash_host, logstash_port))
def filename_output():
elasticsearch_output_disabled()
sh("sed -i 's/#output.file:/output.file:/g' /etc/filebeat/filebeat.yml")
sh("sed -i 's@#path: \"/tmp/filebeat\"@path: \"/tmp/filebeat\"@g' /etc/filebeat/filebeat.yml")
sh("sed -i 's/#filename: filebeat/filename: filebeat/g' /etc/filebeat/filebeat.yml")
def elasticsearch_output_disabled():
sh("sed -i 's/setup.template.enabled: true/setup.template.enabled: false/g' /etc/filebeat/filebeat.yml")
sh("sed -i 's/output.elasticsearch:/#output.elasticsearch:/g' /etc/filebeat/filebeat.yml")
sh("sed -i 's/hosts: \[\"localhost:9200\"]/#hosts: \[\"localhost:9200\"]/g' /etc/filebeat/filebeat.yml")
@task
def configure_filebeat():
elk_host = os.environ.get('ELK_HOST', '')
elk_port = os.environ.get('ELK_PORT', '')
filebeat_destination = os.environ.get('FILEBEAT_DESTINATION', '')
filebeat_destination = filebeat_destination.lower()
if filebeat_destination == 'elasticsearch' and elk_host and elk_port.isdigit():
configure_elasticsearch(elk_host, elk_port)
elasticsearch_output(elk_host, elk_port)
elif filebeat_destination == 'logstash' and elk_host and elk_port.isdigit():
logstash_output(elk_host, elk_port)
else:
filename_output()
def configure_elasticsearch(elk_host, elk_port):
filter_path = os.path.abspath("conf/standard_filter.json")
sh("curl -XPUT '%s:%s/_ingest/pipeline/standard_filter?pretty' -H 'Content-Type: application/json' -d @%s" % (elk_host, elk_port, filter_path))
@task
def docker_run():
try:
is_private = True if os.environ.get('OMAHA_SERVER_PRIVATE', '').title() == 'True' else False
if is_private:
migrate()
loaddata()
create_admin()
collectstatic()
configure_nginx()
configure_filebeat()
sh('/usr/bin/supervisord')
except:
client.captureException()
raise
@task
def docker_run_test():
sh('apt-get install -y python-dev libxslt-dev libpq-dev')
sh('pip install -r requirements/test.txt --use-mirrors')
test()
test_postgres()
@task
def run_test_in_docker():
try:
sh('docker-compose -f docker-compose.tests.yml -p omaha_testing run --rm sut paver docker_run_test')
except:
pass
sh('docker-compose -f docker-compose.tests.yml -p omaha_testing stop')
sh('docker-compose -f docker-compose.tests.yml -p omaha_testing rm --force')