~psivaa/uci-engine/rabbitmq-restish-with-proxy

« back to all changes in this revision

Viewing changes to charms/precise/webui/hooks/hooks.py

  • Committer: Joe Talbott
  • Date: 2014-01-23 17:11:17 UTC
  • mto: (126.2.10 webui)
  • mto: This revision was merged to the branch mainline in revision 161.
  • Revision ID: joe.talbott@canonical.com-20140123171117-82s9buwmb4lazj6f
Add webui charm.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#!/usr/bin/env python
 
2
 
 
3
import distutils.dir_util
 
4
import grp
 
5
import json
 
6
import os
 
7
import pwd
 
8
import re
 
9
import shutil
 
10
import subprocess
 
11
import sys
 
12
 
 
13
import charmhelpers.core.hookenv
 
14
import charmhelpers.fetch
 
15
import charmhelpers.contrib.charmsupport.nrpe
 
16
 
 
17
from charmhelpers.core.hookenv import (
 
18
    config as config_get,
 
19
    relation_set,
 
20
    relation_get,
 
21
    relation_ids,
 
22
)
 
23
 
 
24
hooks = charmhelpers.core.hookenv.Hooks()
 
25
log = charmhelpers.core.hookenv.log
 
26
 
 
27
 
 
28
###############################################################################
 
29
# Global variables
 
30
###############################################################################
 
31
site_name = "ci-airlines.canonical.com"
 
32
site_path = "/srv/{}".format(site_name)
 
33
log_path = "{}/logs".format(site_path)
 
34
site_conf_path = "/etc/apache2/sites-available/{}".format(site_name)
 
35
 
 
36
config_data = config_get()
 
37
ticket_manager_url = config_data.get('ticket_manager_url', '')
 
38
 
 
39
site_conf = """
 
40
<VirtualHost *:80>
 
41
 
 
42
    #ServerName {site_name}
 
43
 
 
44
    CustomLog {log_path}/access.log combined
 
45
    ErrorLog {log_path}/error.log
 
46
 
 
47
    DocumentRoot {site_path}
 
48
 
 
49
    <Directory />
 
50
         Options FollowSymLinks
 
51
         AllowOverride None
 
52
    </Directory>
 
53
 
 
54
    <Directory {site_path}>
 
55
         Options Indexes FollowSymLinks MultiViews
 
56
         AllowOverride None
 
57
         Order allow,deny
 
58
         Allow from all
 
59
    </Directory>
 
60
 
 
61
    RewriteEngine       on
 
62
    RewriteRule         ^/api/(.*)      {ticket_manager_url}/$1  [P]
 
63
 
 
64
</VirtualHost>
 
65
""".format(
 
66
    site_name=site_name,
 
67
    site_path=site_path,
 
68
    log_path=log_path,
 
69
    ticket_manager_url=ticket_manager_url,
 
70
)
 
71
 
 
72
web_uid = pwd.getpwnam('www-data')[2]
 
73
web_gid = grp.getgrnam('www-data')[2]
 
74
 
 
75
 
 
76
###############################################################################
 
77
# Supporting functions
 
78
###############################################################################
 
79
 
 
80
def _log(msg):
 
81
    log("JAT: {msg}".format(msg=msg))
 
82
 
 
83
def _setup_env():
 
84
 
 
85
    if os.path.exists(site_path):
 
86
        shutil.rmtree(site_path)
 
87
 
 
88
    os.makedirs(site_path)
 
89
 
 
90
    if not os.path.exists(log_path):
 
91
        os.makedirs(log_path)
 
92
 
 
93
    # XXX: make these config options.
 
94
    os.chown(site_path, web_uid, web_gid)
 
95
 
 
96
    distutils.dir_util.copy_tree('files/webroot/', site_path)
 
97
    for root, dirs, files in os.walk(site_path):
 
98
        map(
 
99
            lambda file: os.chown(
 
100
                os.path.join(root, file), web_uid, web_gid
 
101
            ),
 
102
            files
 
103
        )
 
104
        map(
 
105
            lambda dir: os.chown(
 
106
                os.path.join(root, dir), web_uid, web_gid
 
107
            ),
 
108
            dirs
 
109
        )
 
110
 
 
111
    regex = re.compile(ur'^test.*\.html')
 
112
    for f in os.listdir(site_path):
 
113
        if regex.match(f):
 
114
            os.remove(os.path.join(site_path, f))
 
115
 
 
116
    with open(os.path.join(site_path, 'config.json'), 'w') as fp:
 
117
        config_data = config_get()
 
118
        json.dump(config_data, fp)
 
119
 
 
120
 
 
121
@hooks.hook()
 
122
def install():
 
123
    _setup_env()
 
124
 
 
125
    with open(site_conf_path, 'w') as fp:
 
126
        fp.write(site_conf)
 
127
 
 
128
 
 
129
def ensite():
 
130
    subprocess.call(['a2ensite', site_name])
 
131
    subprocess.call(['a2dissite', "default"])
 
132
 
 
133
 
 
134
def dissite():
 
135
    subprocess.call(['a2ensite', "default"])
 
136
    subprocess.call(['a2dissite', site_name])
 
137
 
 
138
@hooks.hook()
 
139
def website_relation_changed():
 
140
    _log("changed relationship")  # assumes there's only one for now.
 
141
    relation_data = relation_get()
 
142
    _log("relation_data: {}".format(relation_data))
 
143
 
 
144
@hooks.hook()
 
145
def website_relation_joined():
 
146
    _log("joined relationship")  # assumes there's only one for now.
 
147
    relation_data = relation_get()
 
148
    _log("relation_data: {}".format(relation_data))
 
149
    ensite()
 
150
 
 
151
 
 
152
@hooks.hook()
 
153
def website_relation_broken():
 
154
    config_data = config_get()
 
155
    _log("config_data: {}".format(config_data))
 
156
    _log("departing relationship")  # assumes there's only one for now.
 
157
    dissite()
 
158
 
 
159
@hooks.hook()
 
160
def stop():
 
161
    _log("stopping webui")
 
162
 
 
163
 
 
164
@hooks.hook()
 
165
def start():
 
166
    _log("starting webui")
 
167
 
 
168
 
 
169
@hooks.hook()
 
170
def config_changed():
 
171
    pass
 
172
 
 
173
@hooks.hook()
 
174
def upgrade_charm():
 
175
    install()
 
176
 
 
177
 
 
178
if __name__ == "__main__":
 
179
    hooks.execute(sys.argv)