-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathpanconfig.py
executable file
·46 lines (35 loc) · 1.54 KB
/
panconfig.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
#!/usr/bin/env python
"""
panconfig.py - server-side configuration generator.
panconfig.py is pushed to the server and run by the deployment scripts to generate updated
configurations from the pushed domain content. Currently, this means getting static and wsgi
settings from each domain's project.yaml and generating Apache's httpd.conf to serve each
domain properly.
"""
import sys, os
from djangorender import render_path
import yaml
def main():
sites = []
aliases = {}
for domain in os.listdir("/domains"):
for domain_version in os.listdir(os.path.join("/", "domains", domain)):
try:
domain_version_cfg = yaml.load(open(os.path.join("/domains", domain, domain_version, "project.yaml")))
except IOError:
continue
else:
if 'alias_to' in domain_version_cfg:
aliases.setdefault(domain_version_cfg['alias_to'], []).append( domain_version if domain_version != 'public' else domain )
else:
sites.append(domain_version_cfg)
sites.sort(key=lambda site: site.get('apache_order', 0), reverse=True)
for site in sites:
domain_version = '.v.'.join((site['version'], site['domain']))
if domain_version in aliases:
site['domain_aliases'] = aliases[domain_version]
httpd_conf = render_path("/etc/apache2/httpd.conf.template", sites=sites, test="foobarbaz")
open("/etc/apache2/httpd.conf", 'w').write(httpd_conf)
return 0
if __name__ == '__main__':
sys.exit(main())