Merge lp:~thomnico/orange-box-examples/telco into lp:orange-box-examples
- telco
- Merge into trunk
Proposed by
Nicolas Thomas
Status: | Rejected |
---|---|
Rejected by: | Darryl Weaver |
Proposed branch: | lp:~thomnico/orange-box-examples/telco |
Merge into: | lp:orange-box-examples |
Diff against target: | 12255 lines |
To merge this branch: | bzr merge lp:~thomnico/orange-box-examples/telco |
Related bugs: |
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
Darryl Weaver (community) | Disapprove | ||
Review via email: mp+241281@code.launchpad.net |
Commit message
Description of the change
To post a comment you must log in.
- 71. By Nicolas Thomas
-
modified:
bin/orange-box-launch- openstack- juju
pending merges:
Darryl Weaver 2014-11-12 Modified orange-box-launch- openstack- juju to correct errors.
Unmerged revisions
Preview Diff
[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1 | === modified file '.bzrignore' |
2 | --- .bzrignore 2014-10-28 18:40:11 +0000 |
3 | +++ .bzrignore 2014-11-10 14:55:38 +0000 |
4 | @@ -1,4 +1,2 @@ |
5 | precise |
6 | -telco/precise |
7 | -telco/trusty |
8 | cloudfoundry/trusty |
9 | |
10 | === modified file 'telco/01-deploy.sh' |
11 | --- telco/01-deploy.sh 2014-10-27 15:23:26 +0000 |
12 | +++ telco/01-deploy.sh 2014-11-10 14:55:38 +0000 |
13 | @@ -13,5 +13,5 @@ |
14 | export JUJU_REPOSITORY=$PWD |
15 | juju-deployer -c bundle-telco.yaml |
16 | else |
17 | - echo "Run ./bzr-sync-local-charms before running this script" |
18 | + echo "Run ./sync-local-charms before running this script" |
19 | fi |
20 | |
21 | === modified file 'telco/bundle-telco-store.yaml' |
22 | --- telco/bundle-telco-store.yaml 2014-11-10 00:33:48 +0000 |
23 | +++ telco/bundle-telco-store.yaml 2014-11-10 14:55:38 +0000 |
24 | @@ -78,7 +78,7 @@ |
25 | "gui-x": "-857.8215242215981" |
26 | "gui-y": "698.5485784445332" |
27 | sipml5: |
28 | - charm: "local:trusty/sipml5" |
29 | + charm: "cs:~thomnico/trusty/sipml5" |
30 | num_units: 1 |
31 | expose: true |
32 | annotations: |
33 | |
34 | === modified file 'telco/bundle-telco.yaml' |
35 | --- telco/bundle-telco.yaml 2014-11-10 00:33:48 +0000 |
36 | +++ telco/bundle-telco.yaml 2014-11-10 14:55:38 +0000 |
37 | @@ -78,6 +78,7 @@ |
38 | "gui-x": "-857.8215242215981" |
39 | "gui-y": "698.5485784445332" |
40 | sipml5: |
41 | +# charm: "cs:~thomnico/trusty/sipml5" |
42 | charm: "local:trusty/sipml5" |
43 | num_units: 1 |
44 | expose: true |
45 | |
46 | === added directory 'telco/precise' |
47 | === added directory 'telco/precise/clearwater-bono' |
48 | === added file 'telco/precise/clearwater-bono/README.md' |
49 | --- telco/precise/clearwater-bono/README.md 1970-01-01 00:00:00 +0000 |
50 | +++ telco/precise/clearwater-bono/README.md 2014-11-10 14:55:38 +0000 |
51 | @@ -0,0 +1,90 @@ |
52 | +# Overview |
53 | + |
54 | +This charm supports deployment and scaling of the Bono component of a Project Clearwater system. See http://www.projectclearwater.org for more information on Project Clearwater. |
55 | + |
56 | +# Usage |
57 | + |
58 | +The Bono service should be deployed as part of a Clearwater system. A Clearwater system can be deployed in a Juju environment by creating a config.yaml file then running the following commands. |
59 | + |
60 | + juju deploy --config config.yaml clearwater-route53 |
61 | + juju deploy --config config.yaml --constraints arch=amd64 clearwater-ellis |
62 | + juju deploy --config config.yaml --constraints arch=amd64 clearwater-bono |
63 | + juju deploy --config config.yaml --constraints arch=amd64 clearwater-sprout |
64 | + juju deploy --config config.yaml --constraints arch=amd64 clearwater-homestead |
65 | + juju deploy --config config.yaml --constraints arch=amd64 clearwater-homer |
66 | + juju add-relation clearwater-ellis clearwater-route53:register-ellis |
67 | + juju add-relation clearwater-bono clearwater-route53:register-bono |
68 | + juju add-relation clearwater-sprout clearwater-route53:register-sprout |
69 | + juju add-relation clearwater-homestead clearwater-route53:register-homestead |
70 | + juju add-relation clearwater-homer clearwater-route53:register-homer |
71 | + juju expose clearwater-bono |
72 | + juju expose clearwater-ellis |
73 | + |
74 | +The config.yaml configuration file takes the following format. |
75 | + |
76 | + clearwater-route53: |
77 | + zone: <domain> |
78 | + access_key: <ec2 access key> |
79 | + secret_key: <ec2 secret access key> |
80 | + sas: "0.0.0.0" |
81 | + |
82 | + clearwater-ellis: |
83 | + smtp_server: smtp.cw-ngv.com |
84 | + smtp_username: username |
85 | + smtp_password: password |
86 | + email_sender: blackhole@cw-ngv.com<mailto:blackhole@cw-ngv.com> |
87 | + signup_key: secret |
88 | + base_number: "6505550000" |
89 | + number_count: 1000 |
90 | + repo: http://repo.cw-ngv.com/stable |
91 | + |
92 | + clearwater-bono: |
93 | + turn_workaround: password |
94 | + repo: http://repo.cw-ngv.com/stable |
95 | + |
96 | + clearwater-sprout: |
97 | + reg_min_expires: 400 |
98 | + session_max_expires: 900 |
99 | + repo: http://repo.cw-ngv.com/stable |
100 | + |
101 | + clearwater-homestead: |
102 | + repo: http://repo.cw-ngv.com/stable |
103 | + |
104 | + clearwater-homer: |
105 | + repo: http://repo.cw-ngv.com/stable |
106 | + |
107 | +Note that the clearwater-bono charm can only be deployed on the `amd64` architecture. |
108 | + |
109 | +## Scale out Usage |
110 | + |
111 | +## Known Limitations and Issues |
112 | + |
113 | +The only currently supported DNS service for Clearwater is clearwater-route53 (when deploying in Amazon EC2), so will currently only work on EC2. Additional DNS services will be added for other environments in future. |
114 | + |
115 | +clearwater-bono currently only supports running as a single unit. Clustering support will be released shortly, which will allow units to be added to and removed from a clearwater-bono deployment using juju add-unit and juju remove-unit commands. |
116 | + |
117 | +Note that this charm does not current pass charm proof because its hooks use EC2 APIs directly to obtain the public IP address rather than unit-get public-address. This is to work around what looks like a Juju bug - unit-get public-address on EC2 returns the public hostname of the unit rather than the public IP address. Unfortunately EC2 public hostname are actually split horizon hostnames, so if you attempt to resolve the hostname from within EC2 it actually resolved to a private IP address - it will only resolve to a public address if resolved from outside EC2. |
118 | + |
119 | +# Configuration |
120 | + |
121 | +Clearwater has a number of configuration fields which are non-defaultable. These are as follows. |
122 | + |
123 | +clearwater-route53 |
124 | + |
125 | +- `zone:` This must be set to a DNS zone name which is managed by the AWS Route53 service. |
126 | +- `access_key:` and `secret_key:` These must be set to the AWS access key and secret key of the AWS account which owns the DNS zone name. |
127 | + |
128 | +clearwater-ellis |
129 | + |
130 | +- `signup_key:` This is used as a signup key on the Ellis self-provisioning portal, so should be set to a unique string for each installation. |
131 | +- `base_number:` and `number_count:` These define the telephone number range assigned to the Clearwater system. |
132 | + |
133 | +# Contact Information |
134 | + |
135 | +## Upstream Project Name |
136 | + |
137 | +See http:www.projectclearwater.org and https://github.com/Metaswitch/clearwater-docs/wiki for information about clearwater. |
138 | + |
139 | +Clearwater source code and issue list can be found at https://github.com/Metaswitch/. |
140 | + |
141 | +The Clearwater mailing list is at lists.projectclearwater.org. |
142 | |
143 | === added file 'telco/precise/clearwater-bono/config.yaml' |
144 | --- telco/precise/clearwater-bono/config.yaml 1970-01-01 00:00:00 +0000 |
145 | +++ telco/precise/clearwater-bono/config.yaml 2014-11-10 14:55:38 +0000 |
146 | @@ -0,0 +1,20 @@ |
147 | +options: |
148 | + zone: |
149 | + description: The DNS root zone for this service |
150 | + type: string |
151 | + sas: |
152 | + default: "" |
153 | + description: The location of the SAS server |
154 | + type: string |
155 | + turn_workaround: |
156 | + default: "" |
157 | + description: TURN workaround password, used by faulty WebRTC clients |
158 | + type: string |
159 | + trusted_peers: |
160 | + default: "" |
161 | + description: Comma-separated list of IP addresses of trusted peers |
162 | + type: string |
163 | + repo: |
164 | + default: http://repo.cw-ngv.com/stable |
165 | + description: The location of the repo server |
166 | + type: string |
167 | |
168 | === added file 'telco/precise/clearwater-bono/copyright' |
169 | --- telco/precise/clearwater-bono/copyright 1970-01-01 00:00:00 +0000 |
170 | +++ telco/precise/clearwater-bono/copyright 2014-11-10 14:55:38 +0000 |
171 | @@ -0,0 +1,31 @@ |
172 | +Project Clearwater - IMS in the Cloud |
173 | +Copyright (C) 2013 Metaswitch Networks Ltd |
174 | + |
175 | +This program is free software: you can redistribute it and/or modify it |
176 | +under the terms of the GNU General Public License as published by the |
177 | +Free Software Foundation, either version 3 of the License, or (at your |
178 | +option) any later version, along with the "Special Exception" for use of |
179 | +the program along with SSL, set forth below. This program is distributed |
180 | +in the hope that it will be useful, but WITHOUT ANY WARRANTY; |
181 | +without even the implied warranty of MERCHANTABILITY or FITNESS FOR |
182 | +A PARTICULAR PURPOSE. See the GNU General Public License for more |
183 | +details. You should have received a copy of the GNU General Public |
184 | +License along with this program. If not, see |
185 | +<http://www.gnu.org/licenses/>. |
186 | + |
187 | +The author can be reached by email at clearwater@metaswitch.com or by |
188 | +post at Metaswitch Networks Ltd, 100 Church St, Enfield EN2 6BQ, UK |
189 | + |
190 | +Special Exception |
191 | +Metaswitch Networks Ltd grants you permission to copy, modify, |
192 | +propagate, and distribute a work formed by combining OpenSSL with The |
193 | +Software, or a work derivative of such a combination, even if such |
194 | +copying, modification, propagation, or distribution would otherwise |
195 | +violate the terms of the GPL. You must comply with the GPL in all |
196 | +respects for all of the code used other than OpenSSL. |
197 | +"OpenSSL" means OpenSSL toolkit software distributed by the OpenSSL |
198 | +Project and licensed under the OpenSSL Licenses, or a work based on such |
199 | +software and licensed under the OpenSSL Licenses. |
200 | +"OpenSSL Licenses" means the OpenSSL License and Original SSLeay License |
201 | +under which the OpenSSL Project distributes the OpenSSL toolkit software, |
202 | +as those licenses appear in the file LICENSE-OPENSSL. |
203 | |
204 | === added directory 'telco/precise/clearwater-bono/hooks' |
205 | === added file 'telco/precise/clearwater-bono/hooks/config-changed' |
206 | --- telco/precise/clearwater-bono/hooks/config-changed 1970-01-01 00:00:00 +0000 |
207 | +++ telco/precise/clearwater-bono/hooks/config-changed 2014-11-10 14:55:38 +0000 |
208 | @@ -0,0 +1,9 @@ |
209 | +#!/bin/bash |
210 | +set -e |
211 | + |
212 | +# Update the /etc/clearwater/config file, the node.json, and re-run |
213 | +# chef-solo |
214 | +$CHARM_DIR/lib/config_script |
215 | +$CHARM_DIR/lib/node_json_script |
216 | +chef-solo -c /home/ubuntu/chef-solo/solo.rb -j /home/ubuntu/chef-solo/node.json |
217 | +$CHARM_DIR/lib/restart |
218 | |
219 | === added file 'telco/precise/clearwater-bono/hooks/install' |
220 | --- telco/precise/clearwater-bono/hooks/install 1970-01-01 00:00:00 +0000 |
221 | +++ telco/precise/clearwater-bono/hooks/install 2014-11-10 14:55:38 +0000 |
222 | @@ -0,0 +1,37 @@ |
223 | +#!/bin/bash |
224 | +set -e |
225 | + |
226 | +# This is a big hack. Juju on EC2 returns hostnames rather than IP addresses |
227 | +# for public-address and private-address. To work-around this, we resolve the |
228 | +# host names. However, after we've joined to the DNSaaS charm, we can no longer |
229 | +# resolve these, so add them to /etc/hosts. |
230 | +if ! grep "# added by clearwater-*/hooks/install" /etc/hosts ; then |
231 | + private_address=$(unit-get private-address) |
232 | + public_address=$(unit-get public-address) |
233 | + private_ip=$($CHARM_DIR/lib/unit-get private-address) |
234 | + public_ip=$($CHARM_DIR/lib/unit-get public-address) |
235 | + [ "$private_address" = "$private_ip" ] || echo "$private_ip $private_address # added by clearwater-*/hooks/install" >>/etc/hosts |
236 | + [ "$public_address" = "$public_ip" ] || echo "$public_ip $public_address $(sed -e 's/\..*$//' <<< $public_address) # added by clearwater-*/hooks/install" >>/etc/hosts |
237 | + echo "$public_ip bono-$(cut -d/ -f2 <<< $JUJU_UNIT_NAME).$(config-get zone) # added by clearwater-*/hooks/install" >>/etc/hosts |
238 | +fi |
239 | + |
240 | +# Install chef solo, and create the node.json and config file |
241 | +$CHARM_DIR/lib/chef_solo_install |
242 | +$CHARM_DIR/lib/node_json_script |
243 | +$CHARM_DIR/lib/config_script |
244 | + |
245 | +apt-get update |
246 | + |
247 | +# Install the node |
248 | +chef-solo -c /home/ubuntu/chef-solo/solo.rb -j /home/ubuntu/chef-solo/node.json |
249 | + |
250 | +# Expose the correct ports |
251 | +open-port 22/tcp |
252 | +open-port 123/udp |
253 | +open-port 161/udp |
254 | +open-port 3478/tcp |
255 | +open-port 3478/udp |
256 | +open-port 5060/tcp |
257 | +open-port 5060/udp |
258 | +open-port 5062/tcp |
259 | +open-port 6666/tcp |
260 | |
261 | === added file 'telco/precise/clearwater-bono/hooks/programmable-multiple-relation-changed' |
262 | --- telco/precise/clearwater-bono/hooks/programmable-multiple-relation-changed 1970-01-01 00:00:00 +0000 |
263 | +++ telco/precise/clearwater-bono/hooks/programmable-multiple-relation-changed 2014-11-10 14:55:38 +0000 |
264 | @@ -0,0 +1,28 @@ |
265 | +#!/bin/bash |
266 | +set -e |
267 | + |
268 | +# Set our DNS requirements |
269 | +TTL=300 |
270 | +id=$(cut -d/ -f2 <<< $JUJU_UNIT_NAME) |
271 | +ip=$($CHARM_DIR/lib/unit-get public-address) |
272 | +relation-set domain=$(config-get zone) |
273 | +relation-set resources='@ '$TTL' IN A '$ip' |
274 | +@ '$TTL' IN NAPTR 1 1 "S" "SIP+D2T" "" _sip._tcp |
275 | +@ '$TTL' IN NAPTR 2 1 "S" "SIP+D2U" "" _sip._udp |
276 | +_sip._tcp '$TTL' IN SRV 0 0 5060 bono-'$id' |
277 | +_sip._udp '$TTL' IN SRV 0 0 5060 bono-'$id' |
278 | +bono-'$id' '$TTL' IN A '$ip |
279 | + |
280 | +# Update our DNS server |
281 | +if [ "$(relation-get public-address)" != "" ] |
282 | +then |
283 | + echo nameserver $(relation-get public-address) > /etc/dnsmasq.resolv.conf |
284 | + grep -v ^RESOLV_CONF= /etc/default/dnsmasq > /tmp/dnsmasq.$$ || juju-log "WARNING RESOLV_CONF not found" |
285 | + mv /tmp/dnsmasq.$$ /etc/default/dnsmasq |
286 | + echo RESOLV_CONF=/etc/dnsmasq.resolv.conf >> /etc/default/dnsmasq |
287 | + service dnsmasq restart |
288 | +fi |
289 | + |
290 | +# Update Clearwater configuration and restart |
291 | +$CHARM_DIR/lib/config_script programmable-multiple |
292 | +$CHARM_DIR/lib/restart |
293 | |
294 | === added file 'telco/precise/clearwater-bono/hooks/ralf-ctf-relation-changed' |
295 | --- telco/precise/clearwater-bono/hooks/ralf-ctf-relation-changed 1970-01-01 00:00:00 +0000 |
296 | +++ telco/precise/clearwater-bono/hooks/ralf-ctf-relation-changed 2014-11-10 14:55:38 +0000 |
297 | @@ -0,0 +1,6 @@ |
298 | +#!/bin/bash |
299 | +set -e |
300 | + |
301 | +# Update Clearwater configuration and restart |
302 | +$CHARM_DIR/lib/config_script ralf-ctf |
303 | +$CHARM_DIR/lib/restart |
304 | |
305 | === added file 'telco/precise/clearwater-bono/hooks/scscf-relation-changed' |
306 | --- telco/precise/clearwater-bono/hooks/scscf-relation-changed 1970-01-01 00:00:00 +0000 |
307 | +++ telco/precise/clearwater-bono/hooks/scscf-relation-changed 2014-11-10 14:55:38 +0000 |
308 | @@ -0,0 +1,6 @@ |
309 | +#!/bin/bash |
310 | +set -e |
311 | + |
312 | +# Update Clearwater configuration and restart |
313 | +$CHARM_DIR/lib/config_script scscf |
314 | +$CHARM_DIR/lib/restart |
315 | |
316 | === added file 'telco/precise/clearwater-bono/hooks/start' |
317 | --- telco/precise/clearwater-bono/hooks/start 1970-01-01 00:00:00 +0000 |
318 | +++ telco/precise/clearwater-bono/hooks/start 2014-11-10 14:55:38 +0000 |
319 | @@ -0,0 +1,16 @@ |
320 | +#!/bin/bash |
321 | +# Here put anything that is needed to start the service. |
322 | +# Note that currently this is run directly after install |
323 | +# i.e. 'service apache2 start' |
324 | +set -e |
325 | + |
326 | +# This hook needs to be idempotent, so this could be run when bono is |
327 | +# already running, when it's running but not monitored by monit, when |
328 | +# it's stopped but being monitored (so it's about to start), or stopped |
329 | +# and unmonitored. To cover all these cases, stop monit, start bono, start |
330 | +# monit, then finally have monit monitor bono |
331 | +service monit stop |
332 | +service bono start |
333 | +service monit start |
334 | +sleep 1 |
335 | +monit monitor bono |
336 | |
337 | === added file 'telco/precise/clearwater-bono/hooks/stop' |
338 | --- telco/precise/clearwater-bono/hooks/stop 1970-01-01 00:00:00 +0000 |
339 | +++ telco/precise/clearwater-bono/hooks/stop 2014-11-10 14:55:38 +0000 |
340 | @@ -0,0 +1,12 @@ |
341 | +#!/bin/bash |
342 | +# This will be run when the service is being torn down, allowing you to disable |
343 | +# it in various ways.. |
344 | +# For example, if your web app uses a text file to signal to the load balancer |
345 | +# that it is live... you could remove it and sleep for a bit to allow the load |
346 | +# balancer to stop sending traffic. |
347 | +# rm /srv/webroot/server-live.txt && sleep 30 |
348 | +set -e |
349 | + |
350 | +# Stop bono via monit |
351 | +sudo service monit start |
352 | +sudo monit stop bono |
353 | |
354 | === added file 'telco/precise/clearwater-bono/hooks/upgrade-charm' |
355 | --- telco/precise/clearwater-bono/hooks/upgrade-charm 1970-01-01 00:00:00 +0000 |
356 | +++ telco/precise/clearwater-bono/hooks/upgrade-charm 2014-11-10 14:55:38 +0000 |
357 | @@ -0,0 +1,9 @@ |
358 | +#!/bin/bash |
359 | +# This hook is executed each time a charm is upgraded after the new charm |
360 | +# contents have been unpacked |
361 | +# Best practice suggests you execute the hooks/install and |
362 | +# hooks/config-changed to ensure all updates are processed |
363 | +set -e |
364 | + |
365 | +$CHARM_DIR/hooks/install |
366 | +$CHARM_DIR/hooks/config-changed |
367 | |
368 | === added file 'telco/precise/clearwater-bono/icon.svg' |
369 | --- telco/precise/clearwater-bono/icon.svg 1970-01-01 00:00:00 +0000 |
370 | +++ telco/precise/clearwater-bono/icon.svg 2014-11-10 14:55:38 +0000 |
371 | @@ -0,0 +1,407 @@ |
372 | +<?xml version="1.0" encoding="UTF-8" standalone="no"?> |
373 | +<!-- Created with Inkscape (http://www.inkscape.org/) --> |
374 | + |
375 | +<svg |
376 | + xmlns:dc="http://purl.org/dc/elements/1.1/" |
377 | + xmlns:cc="http://creativecommons.org/ns#" |
378 | + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" |
379 | + xmlns:svg="http://www.w3.org/2000/svg" |
380 | + xmlns="http://www.w3.org/2000/svg" |
381 | + xmlns:xlink="http://www.w3.org/1999/xlink" |
382 | + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" |
383 | + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" |
384 | + width="96" |
385 | + height="96" |
386 | + id="svg6517" |
387 | + version="1.1" |
388 | + inkscape:version="0.48.2 r9819" |
389 | + sodipodi:docname="icon.svg"> |
390 | + <defs |
391 | + id="defs6519"> |
392 | + <linearGradient |
393 | + id="Background"> |
394 | + <stop |
395 | + id="stop4178" |
396 | + offset="0" |
397 | + style="stop-color:#b8b8b8;stop-opacity:1" /> |
398 | + <stop |
399 | + id="stop4180" |
400 | + offset="1" |
401 | + style="stop-color:#c9c9c9;stop-opacity:1" /> |
402 | + </linearGradient> |
403 | + <filter |
404 | + style="color-interpolation-filters:sRGB;" |
405 | + inkscape:label="Inner Shadow" |
406 | + id="filter1121"> |
407 | + <feFlood |
408 | + flood-opacity="0.59999999999999998" |
409 | + flood-color="rgb(0,0,0)" |
410 | + result="flood" |
411 | + id="feFlood1123" /> |
412 | + <feComposite |
413 | + in="flood" |
414 | + in2="SourceGraphic" |
415 | + operator="out" |
416 | + result="composite1" |
417 | + id="feComposite1125" /> |
418 | + <feGaussianBlur |
419 | + in="composite1" |
420 | + stdDeviation="1" |
421 | + result="blur" |
422 | + id="feGaussianBlur1127" /> |
423 | + <feOffset |
424 | + dx="0" |
425 | + dy="2" |
426 | + result="offset" |
427 | + id="feOffset1129" /> |
428 | + <feComposite |
429 | + in="offset" |
430 | + in2="SourceGraphic" |
431 | + operator="atop" |
432 | + result="composite2" |
433 | + id="feComposite1131" /> |
434 | + </filter> |
435 | + <filter |
436 | + style="color-interpolation-filters:sRGB;" |
437 | + inkscape:label="Drop Shadow" |
438 | + id="filter950"> |
439 | + <feFlood |
440 | + flood-opacity="0.25" |
441 | + flood-color="rgb(0,0,0)" |
442 | + result="flood" |
443 | + id="feFlood952" /> |
444 | + <feComposite |
445 | + in="flood" |
446 | + in2="SourceGraphic" |
447 | + operator="in" |
448 | + result="composite1" |
449 | + id="feComposite954" /> |
450 | + <feGaussianBlur |
451 | + in="composite1" |
452 | + stdDeviation="1" |
453 | + result="blur" |
454 | + id="feGaussianBlur956" /> |
455 | + <feOffset |
456 | + dx="0" |
457 | + dy="1" |
458 | + result="offset" |
459 | + id="feOffset958" /> |
460 | + <feComposite |
461 | + in="SourceGraphic" |
462 | + in2="offset" |
463 | + operator="over" |
464 | + result="composite2" |
465 | + id="feComposite960" /> |
466 | + </filter> |
467 | + <clipPath |
468 | + clipPathUnits="userSpaceOnUse" |
469 | + id="clipPath873"> |
470 | + <g |
471 | + transform="matrix(0,-0.66666667,0.66604479,0,-258.25992,677.00001)" |
472 | + id="g875" |
473 | + inkscape:label="Layer 1" |
474 | + style="fill:#ff00ff;fill-opacity:1;stroke:none;display:inline"> |
475 | + <path |
476 | + style="fill:#ff00ff;fill-opacity:1;stroke:none;display:inline" |
477 | + d="m 46.702703,898.22775 50.594594,0 C 138.16216,898.22775 144,904.06497 144,944.92583 l 0,50.73846 c 0,40.86071 -5.83784,46.69791 -46.702703,46.69791 l -50.594594,0 C 5.8378378,1042.3622 0,1036.525 0,995.66429 L 0,944.92583 C 0,904.06497 5.8378378,898.22775 46.702703,898.22775 Z" |
478 | + id="path877" |
479 | + inkscape:connector-curvature="0" |
480 | + sodipodi:nodetypes="sssssssss" /> |
481 | + </g> |
482 | + </clipPath> |
483 | + <filter |
484 | + inkscape:collect="always" |
485 | + id="filter891" |
486 | + inkscape:label="Badge Shadow"> |
487 | + <feGaussianBlur |
488 | + inkscape:collect="always" |
489 | + stdDeviation="0.71999962" |
490 | + id="feGaussianBlur893" /> |
491 | + </filter> |
492 | + </defs> |
493 | + <sodipodi:namedview |
494 | + id="base" |
495 | + pagecolor="#ffffff" |
496 | + bordercolor="#666666" |
497 | + borderopacity="1.0" |
498 | + inkscape:pageopacity="0.0" |
499 | + inkscape:pageshadow="2" |
500 | + inkscape:zoom="1.3995495" |
501 | + inkscape:cx="18.514671" |
502 | + inkscape:cy="49.018169" |
503 | + inkscape:document-units="px" |
504 | + inkscape:current-layer="layer1" |
505 | + showgrid="true" |
506 | + fit-margin-top="0" |
507 | + fit-margin-left="0" |
508 | + fit-margin-right="0" |
509 | + fit-margin-bottom="0" |
510 | + inkscape:window-width="1331" |
511 | + inkscape:window-height="674" |
512 | + inkscape:window-x="19" |
513 | + inkscape:window-y="1" |
514 | + inkscape:window-maximized="0" |
515 | + showborder="true" |
516 | + showguides="true" |
517 | + inkscape:guide-bbox="true" |
518 | + inkscape:showpageshadow="false"> |
519 | + <inkscape:grid |
520 | + type="xygrid" |
521 | + id="grid821" /> |
522 | + <sodipodi:guide |
523 | + orientation="1,0" |
524 | + position="16,48" |
525 | + id="guide823" /> |
526 | + <sodipodi:guide |
527 | + orientation="0,1" |
528 | + position="64,80" |
529 | + id="guide825" /> |
530 | + <sodipodi:guide |
531 | + orientation="1,0" |
532 | + position="80,40" |
533 | + id="guide827" /> |
534 | + <sodipodi:guide |
535 | + orientation="0,1" |
536 | + position="64,16" |
537 | + id="guide829" /> |
538 | + </sodipodi:namedview> |
539 | + <metadata |
540 | + id="metadata6522"> |
541 | + <rdf:RDF> |
542 | + <cc:Work |
543 | + rdf:about=""> |
544 | + <dc:format>image/svg+xml</dc:format> |
545 | + <dc:type |
546 | + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> |
547 | + <dc:title></dc:title> |
548 | + </cc:Work> |
549 | + </rdf:RDF> |
550 | + </metadata> |
551 | + <g |
552 | + inkscape:label="BACKGROUND" |
553 | + inkscape:groupmode="layer" |
554 | + id="layer1" |
555 | + transform="translate(268,-635.29076)" |
556 | + style="display:inline"> |
557 | + <path |
558 | + style="fill:#e6e6e6;fill-opacity:1;stroke:none;display:inline;filter:url(#filter1121)" |
559 | + d="m -268,700.15563 0,-33.72973 c 0,-27.24324 3.88785,-31.13513 31.10302,-31.13513 l 33.79408,0 c 27.21507,0 31.1029,3.89189 31.1029,31.13513 l 0,33.72973 c 0,27.24325 -3.88783,31.13514 -31.1029,31.13514 l -33.79408,0 C -264.11215,731.29077 -268,727.39888 -268,700.15563 Z" |
560 | + id="path6455" |
561 | + inkscape:connector-curvature="0" |
562 | + sodipodi:nodetypes="sssssssss" /> |
563 | + <image |
564 | + y="633.29077" |
565 | + x="-270" |
566 | + id="image3169" |
567 | + xlink:href="data:image/png;base64,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 |
696 | +AABJRU5ErkJggg== |
697 | +" |
698 | + height="96" |
699 | + width="96" |
700 | + style="stroke:#000000;stroke-opacity:0.18666669" /> |
701 | + </g> |
702 | + <g |
703 | + inkscape:groupmode="layer" |
704 | + id="layer3" |
705 | + inkscape:label="PLACE YOUR PICTOGRAM HERE" |
706 | + style="display:inline" /> |
707 | + <g |
708 | + inkscape:groupmode="layer" |
709 | + id="layer2" |
710 | + inkscape:label="BADGE" |
711 | + style="display:none" |
712 | + sodipodi:insensitive="true"> |
713 | + <g |
714 | + style="display:inline" |
715 | + transform="translate(-340.00001,-581)" |
716 | + id="g4394" |
717 | + clip-path="none"> |
718 | + <g |
719 | + id="g855"> |
720 | + <g |
721 | + inkscape:groupmode="maskhelper" |
722 | + id="g870" |
723 | + clip-path="url(#clipPath873)" |
724 | + style="opacity:0.6;filter:url(#filter891)"> |
725 | + <path |
726 | + transform="matrix(1.4999992,0,0,1.4999992,-29.999795,-237.54282)" |
727 | + d="m 264,552.36218 c 0,6.62742 -5.37258,12 -12,12 -6.62742,0 -12,-5.37258 -12,-12 0,-6.62741 5.37258,-12 12,-12 6.62742,0 12,5.37259 12,12 z" |
728 | + sodipodi:ry="12" |
729 | + sodipodi:rx="12" |
730 | + sodipodi:cy="552.36218" |
731 | + sodipodi:cx="252" |
732 | + id="path844" |
733 | + style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:4;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" |
734 | + sodipodi:type="arc" /> |
735 | + </g> |
736 | + <g |
737 | + id="g862"> |
738 | + <path |
739 | + sodipodi:type="arc" |
740 | + style="color:#000000;fill:#f5f5f5;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:4;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" |
741 | + id="path4398" |
742 | + sodipodi:cx="252" |
743 | + sodipodi:cy="552.36218" |
744 | + sodipodi:rx="12" |
745 | + sodipodi:ry="12" |
746 | + d="m 264,552.36218 c 0,6.62742 -5.37258,12 -12,12 -6.62742,0 -12,-5.37258 -12,-12 0,-6.62741 5.37258,-12 12,-12 6.62742,0 12,5.37259 12,12 z" |
747 | + transform="matrix(1.4999992,0,0,1.4999992,-29.999795,-238.54282)" /> |
748 | + <path |
749 | + transform="matrix(1.25,0,0,1.25,33,-100.45273)" |
750 | + d="m 264,552.36218 c 0,6.62742 -5.37258,12 -12,12 -6.62742,0 -12,-5.37258 -12,-12 0,-6.62741 5.37258,-12 12,-12 6.62742,0 12,5.37259 12,12 z" |
751 | + sodipodi:ry="12" |
752 | + sodipodi:rx="12" |
753 | + sodipodi:cy="552.36218" |
754 | + sodipodi:cx="252" |
755 | + id="path4400" |
756 | + style="color:#000000;fill:#dd4814;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:4;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" |
757 | + sodipodi:type="arc" /> |
758 | + <path |
759 | + sodipodi:type="star" |
760 | + style="color:#000000;fill:#f5f5f5;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" |
761 | + id="path4459" |
762 | + sodipodi:sides="5" |
763 | + sodipodi:cx="666.19574" |
764 | + sodipodi:cy="589.50385" |
765 | + sodipodi:r1="7.2431178" |
766 | + sodipodi:r2="4.3458705" |
767 | + sodipodi:arg1="1.0471976" |
768 | + sodipodi:arg2="1.6755161" |
769 | + inkscape:flatsided="false" |
770 | + inkscape:rounded="0.1" |
771 | + inkscape:randomized="0" |
772 | + d="m 669.8173,595.77657 c -0.39132,0.22593 -3.62645,-1.90343 -4.07583,-1.95066 -0.44938,-0.0472 -4.05653,1.36297 -4.39232,1.06062 -0.3358,-0.30235 0.68963,-4.03715 0.59569,-4.47913 -0.0939,-0.44198 -2.5498,-3.43681 -2.36602,-3.8496 0.18379,-0.41279 4.05267,-0.59166 4.44398,-0.81759 0.39132,-0.22593 2.48067,-3.48704 2.93005,-3.4398 0.44938,0.0472 1.81505,3.67147 2.15084,3.97382 0.3358,0.30236 4.08294,1.2817 4.17689,1.72369 0.0939,0.44198 -2.9309,2.86076 -3.11469,3.27355 -0.18379,0.41279 0.0427,4.27917 -0.34859,4.5051 z" |
773 | + transform="matrix(1.511423,-0.16366377,0.16366377,1.511423,-755.37346,-191.93651)" /> |
774 | + </g> |
775 | + </g> |
776 | + </g> |
777 | + </g> |
778 | +</svg> |
779 | |
780 | === added directory 'telco/precise/clearwater-bono/lib' |
781 | === added file 'telco/precise/clearwater-bono/lib/chef_solo_install' |
782 | --- telco/precise/clearwater-bono/lib/chef_solo_install 1970-01-01 00:00:00 +0000 |
783 | +++ telco/precise/clearwater-bono/lib/chef_solo_install 2014-11-10 14:55:38 +0000 |
784 | @@ -0,0 +1,34 @@ |
785 | +#!/bin/bash |
786 | + |
787 | +# This covers installing chef-solo and the Clearwater chef recipes |
788 | +# Install needed libraries |
789 | +apt-get -y install git libxml2-dev libxslt1-dev wget curl |
790 | + |
791 | +# Install chef |
792 | +install_sh="http://opscode.com/chef/install.sh" |
793 | +version_string="-v 11.6.0" |
794 | +bash <(wget ${install_sh} -O -) ${version_string} |
795 | + |
796 | +# Pull down the Clearwater chef recipes |
797 | +if [ ! -d /home/ubuntu/chef-solo ] |
798 | +then |
799 | + mkdir /home/ubuntu/chef-solo |
800 | + git clone --recursive -b master git://github.com/Metaswitch/chef.git /home/ubuntu/chef-solo |
801 | +fi |
802 | + |
803 | +# Update the chef recipes |
804 | +cd /home/ubuntu/chef-solo |
805 | +git pull origin --recurse-submodules master |
806 | + |
807 | +# Create the solo.rb file |
808 | +cat > /home/ubuntu/chef-solo/solo.rb <<EOP |
809 | +file_cache_path "/var/chef-solo" |
810 | +cookbook_path [ |
811 | + "/home/ubuntu/chef-solo/cookbooks" |
812 | +] |
813 | +data_bag_path "/home/ubuntu/chef-solo/data_bags" |
814 | +environment_path "/home/ubuntu/chef-solo/environments" |
815 | +role_path "/home/ubuntu/chef-solo/roles" |
816 | +verbose_logging true |
817 | +log_level :debug |
818 | +EOP |
819 | |
820 | === added file 'telco/precise/clearwater-bono/lib/config_script' |
821 | --- telco/precise/clearwater-bono/lib/config_script 1970-01-01 00:00:00 +0000 |
822 | +++ telco/precise/clearwater-bono/lib/config_script 2014-11-10 14:55:38 +0000 |
823 | @@ -0,0 +1,48 @@ |
824 | +#!/bin/bash |
825 | + |
826 | +relation_name=$1 |
827 | + |
828 | +set -e |
829 | + |
830 | +# Defaults |
831 | +sprout_hostname=sprout.$(config-get zone) |
832 | +hs_hostname=homestead.$(config-get zone):8888 |
833 | +hs_provisioning_hostname=homestead.$(config-get zone):8889 |
834 | +xdms_hostname= |
835 | +ralf_hostname= |
836 | +enum_server= |
837 | + |
838 | +# Import existing configuration |
839 | +[ ! -f /etc/clearwater/config ] || . /etc/clearwater/config |
840 | + |
841 | +# Apply new configuration |
842 | +home_domain=$(config-get zone) |
843 | +[ "$relation-name" != "scscf" ] || [ "$(relation-get public-address)" = "" ] || sprout_hostname=$(relation-get public-address) |
844 | +[ "$relation-name" != "ralf-ctf" ] || [ "$(relation-get public-address)" = "" ] || ralf_hostname=$(relation-get public-address):9888 |
845 | +sas_server=$(config-get sas) |
846 | +local_ip=$($CHARM_DIR/lib/unit-get private-address) |
847 | +public_ip=$($CHARM_DIR/lib/unit-get public-address) |
848 | +public_hostname=bono-$(cut -d/ -f2 <<< $JUJU_UNIT_NAME).$(config-get zone) |
849 | +turn_workaround=$(config-get turn_workaround) |
850 | + |
851 | +# Write configuration back |
852 | +mkdir -p /etc/clearwater |
853 | +cat >/etc/clearwater/config <<EOF |
854 | +# Deployment definitions |
855 | +home_domain=$home_domain |
856 | +sprout_hostname=$sprout_hostname |
857 | +hs_hostname=$hs_hostname |
858 | +hs_provisioning_hostname=$hs_provisioning_hostname |
859 | +xdms_hostname=$xdms_hostname |
860 | +ralf_hostname=$ralf_hostname |
861 | +sas_server=$sas_server |
862 | +enum_server=$enum_server |
863 | + |
864 | +# Local IP configuration |
865 | +local_ip=$local_ip |
866 | +public_ip=$public_ip |
867 | +public_hostname=$public_hostname |
868 | + |
869 | +# Keys |
870 | +turn_workaround=$turn_workaround |
871 | +EOF |
872 | |
873 | === added file 'telco/precise/clearwater-bono/lib/node_json_script' |
874 | --- telco/precise/clearwater-bono/lib/node_json_script 1970-01-01 00:00:00 +0000 |
875 | +++ telco/precise/clearwater-bono/lib/node_json_script 2014-11-10 14:55:38 +0000 |
876 | @@ -0,0 +1,58 @@ |
877 | +#!/usr/bin/python |
878 | + |
879 | +import subprocess |
880 | +import string |
881 | +import socket |
882 | +import os |
883 | +import argparse |
884 | + |
885 | +# Create the ~/chef-solo/node.json file. |
886 | +# |
887 | +# The node.json file contains the machines IP address, the machine ID (a number) |
888 | +# and the repo server. |
889 | +# |
890 | +# If the node is being clustered, the role 'clustered' is added, and after |
891 | +# clustering the tag 'clustered' is added (for homer/homestead) |
892 | +# |
893 | +# The node.json file is templated in lib/node_json_template. |
894 | + |
895 | +parser = argparse.ArgumentParser() |
896 | + |
897 | +parser.add_argument('--cluster', action='store_true') |
898 | +parser.add_argument('--tag', action='store_true') |
899 | + |
900 | +args = parser.parse_args() |
901 | + |
902 | +# Populate the dictionary |
903 | +d = {} |
904 | + |
905 | +d['LOCAL_IP'] = socket.gethostbyname(subprocess.check_output(["unit-get", "private-address"]).rstrip()) |
906 | +d['MACHINE_ID'] = str(int(os.environ['JUJU_UNIT_NAME'].split('/')[1]) + 1) |
907 | +d['REPO'] = subprocess.check_output(["config-get", "repo"]).rstrip() |
908 | +d['TRUSTED_PEERS'] = ','.join(['"' + ip + '"' for ip in subprocess.check_output(["config-get", "trusted_peers"]).rstrip().split(',')]) |
909 | + |
910 | +node_file = "/home/ubuntu/chef-solo/node.json" |
911 | +if args.cluster or (os.path.exists(node_file) and "clustered" in open(node_file).read()): |
912 | + d['CLUSTER'] = ",\n \"role[clustered]\"" |
913 | + d['CLUSTERED'] = ", \"clustered\"" |
914 | + d['TAG'] = "" |
915 | + |
916 | + if args.tag or (os.path.exists(node_file) and "tags" in open(node_file).read()): |
917 | + d['TAG'] = ",\n \"tags\": [\"clustered\"]" |
918 | + |
919 | +else: |
920 | + d['CLUSTER'] = "" |
921 | + d['CLUSTERED'] = "" |
922 | + d['TAG'] = "" |
923 | + |
924 | +# Open template file |
925 | +charm_dir = os.environ['CHARM_DIR'] |
926 | +with open( '%s/lib/node_json_template' % charm_dir ) as f: |
927 | + src = string.Template( f.read() ) |
928 | + |
929 | +# Make the substitutions |
930 | +result = src.substitute(d) |
931 | + |
932 | +# Write to ~/chef-solo/node.json |
933 | +with open('/home/ubuntu/chef-solo/node.json', 'w') as f: |
934 | + f.write(result) |
935 | |
936 | === added file 'telco/precise/clearwater-bono/lib/node_json_template' |
937 | --- telco/precise/clearwater-bono/lib/node_json_template 1970-01-01 00:00:00 +0000 |
938 | +++ telco/precise/clearwater-bono/lib/node_json_template 2014-11-10 14:55:38 +0000 |
939 | @@ -0,0 +1,18 @@ |
940 | +{ |
941 | + "id": "$LOCAL_IP", |
942 | + "name": "$LOCAL_IP", |
943 | + "chef_environment": "_default", |
944 | + "role": "bono", |
945 | + "roles": ["clearwater-infrastructure", "bono"$CLUSTERED], |
946 | + "cloud": { |
947 | + "local_ipv4": "$LOCAL_IP" |
948 | + }, |
949 | + "clearwater": { |
950 | + "index": $MACHINE_ID, |
951 | + "repo_server": "$REPO", |
952 | + "trusted_peers": [$TRUSTED_PEERS] |
953 | + }, |
954 | + "run_list": [ |
955 | + "role[bono]"$CLUSTER |
956 | + ]$TAG |
957 | +} |
958 | |
959 | === added file 'telco/precise/clearwater-bono/lib/restart' |
960 | --- telco/precise/clearwater-bono/lib/restart 1970-01-01 00:00:00 +0000 |
961 | +++ telco/precise/clearwater-bono/lib/restart 2014-11-10 14:55:38 +0000 |
962 | @@ -0,0 +1,6 @@ |
963 | +#!/bin/bash |
964 | +set -e |
965 | + |
966 | +# Restart clearwater-infrastructure, and stop bono (to be restarted by monit) |
967 | +service clearwater-infrastructure restart |
968 | +service bono stop |
969 | |
970 | === added file 'telco/precise/clearwater-bono/lib/unit-get' |
971 | --- telco/precise/clearwater-bono/lib/unit-get 1970-01-01 00:00:00 +0000 |
972 | +++ telco/precise/clearwater-bono/lib/unit-get 2014-11-10 14:55:38 +0000 |
973 | @@ -0,0 +1,36 @@ |
974 | +#!/bin/bash |
975 | +set -ex |
976 | +onEC2=false |
977 | +key=$1 |
978 | +val=$(unit-get $1) |
979 | + |
980 | +if [ -f $CHARM_DIR/lib/provider.txt ] |
981 | +then |
982 | + PROVIDER=`cat $CHARM_DIR/lib/provider.txt ` |
983 | +else |
984 | + #checking dirty ec2 hack will work |
985 | + wget -q http://169.254.169.254/latest/meta-data/public-ipv4 && onEC2=true |
986 | + if ( "$onEC2" == true ) |
987 | + then |
988 | + echo "EC2" > $CHARM_DIR/lib/provider.txt |
989 | + else |
990 | + echo "NOTEC2" > $CHARM_DIR/lib/provider.txt |
991 | + fi |
992 | +fi |
993 | + |
994 | +if [ "$PROVIDER" == "EC2" ] |
995 | +then |
996 | + if [ "$key" = "public-address" ] && [ -n "$(dig +short $val | head -1)" ] |
997 | + then |
998 | + val=$(curl http://169.254.169.254/latest/meta-data/public-ipv4) |
999 | + elif [ "$key" = "private-address" ] |
1000 | + then |
1001 | + val_ip=$(dig +short $val | head -1) |
1002 | + [ -z "$val_ip" ] || val=$val_ip |
1003 | + ##if val_ip is empty getting the system IP |
1004 | + [ -z "$val_ip" ] && val=`ip route | grep src | cut -d " " -f 12` |
1005 | + fi |
1006 | +fi |
1007 | + |
1008 | +echo $val |
1009 | + |
1010 | |
1011 | === added file 'telco/precise/clearwater-bono/metadata.yaml' |
1012 | --- telco/precise/clearwater-bono/metadata.yaml 1970-01-01 00:00:00 +0000 |
1013 | +++ telco/precise/clearwater-bono/metadata.yaml 2014-11-10 14:55:38 +0000 |
1014 | @@ -0,0 +1,15 @@ |
1015 | +name: clearwater-bono |
1016 | +summary: Bono charm for Project Clearwater |
1017 | +maintainer: Project Clearwater Maintainers <maintainers@projectclearwater.org> |
1018 | +description: Bono charm for Project Clearwater |
1019 | +categories: |
1020 | + - misc |
1021 | +subordinate: false |
1022 | +requires: |
1023 | + programmable-multiple: |
1024 | + interface: dns-multi |
1025 | + scscf: |
1026 | + interface: 3GPP-Mr |
1027 | + ralf-ctf: |
1028 | + interface: ralf-ctf-interface |
1029 | + optional: true |
1030 | |
1031 | === added file 'telco/precise/clearwater-bono/revision' |
1032 | --- telco/precise/clearwater-bono/revision 1970-01-01 00:00:00 +0000 |
1033 | +++ telco/precise/clearwater-bono/revision 2014-11-10 14:55:38 +0000 |
1034 | @@ -0,0 +1,1 @@ |
1035 | +1 |
1036 | |
1037 | === added directory 'telco/precise/clearwater-ellis' |
1038 | === added file 'telco/precise/clearwater-ellis/README.md' |
1039 | --- telco/precise/clearwater-ellis/README.md 1970-01-01 00:00:00 +0000 |
1040 | +++ telco/precise/clearwater-ellis/README.md 2014-11-10 14:55:38 +0000 |
1041 | @@ -0,0 +1,90 @@ |
1042 | +# Overview |
1043 | + |
1044 | +This charm supports deployment of the Ellis self-provisioning portal for Project Clearwater system. See http://www.projectclearwater.org for more information on Project Clearwater. |
1045 | + |
1046 | +# Usage |
1047 | + |
1048 | +The Ellis service should be deployed as part of a Clearwater system. A Clearwater system can be deployed in a Juju environment by creating a config.yaml file then running the following commands. |
1049 | + |
1050 | + juju deploy --config config.yaml clearwater-route53 |
1051 | + juju deploy --config config.yaml --constraints arch=amd64 clearwater-ellis |
1052 | + juju deploy --config config.yaml --constraints arch=amd64 clearwater-bono |
1053 | + juju deploy --config config.yaml --constraints arch=amd64 clearwater-sprout |
1054 | + juju deploy --config config.yaml --constraints arch=amd64 clearwater-homestead |
1055 | + juju deploy --config config.yaml --constraints arch=amd64 clearwater-homer |
1056 | + juju add-relation clearwater-ellis clearwater-route53:register-ellis |
1057 | + juju add-relation clearwater-bono clearwater-route53:register-bono |
1058 | + juju add-relation clearwater-sprout clearwater-route53:register-sprout |
1059 | + juju add-relation clearwater-homestead clearwater-route53:register-homestead |
1060 | + juju add-relation clearwater-homer clearwater-route53:register-homer |
1061 | + juju expose clearwater-bono |
1062 | + juju expose clearwater-ellis |
1063 | + |
1064 | +The config.yaml configuration file takes the following format. |
1065 | + |
1066 | + clearwater-route53: |
1067 | + zone: <domain> |
1068 | + access_key: <ec2 access key> |
1069 | + secret_key: <ec2 secret access key> |
1070 | + sas: "0.0.0.0" |
1071 | + |
1072 | + clearwater-ellis: |
1073 | + smtp_server: smtp.cw-ngv.com |
1074 | + smtp_username: username |
1075 | + smtp_password: password |
1076 | + email_sender: blackhole@cw-ngv.com<mailto:blackhole@cw-ngv.com> |
1077 | + signup_key: secret |
1078 | + base_number: "6505550000" |
1079 | + number_count: 1000 |
1080 | + repo: http://repo.cw-ngv.com/stable |
1081 | + |
1082 | + clearwater-bono: |
1083 | + turn_workaround: password |
1084 | + repo: http://repo.cw-ngv.com/stable |
1085 | + |
1086 | + clearwater-sprout: |
1087 | + reg_min_expires: 400 |
1088 | + session_max_expires: 900 |
1089 | + repo: http://repo.cw-ngv.com/stable |
1090 | + |
1091 | + clearwater-homestead: |
1092 | + repo: http://repo.cw-ngv.com/stable |
1093 | + |
1094 | + clearwater-homer: |
1095 | + repo: http://repo.cw-ngv.com/stable |
1096 | + |
1097 | +Note that the clearwater-ellis charm can only be deployed on the `amd64` architecture. |
1098 | + |
1099 | +## Scale out Usage |
1100 | + |
1101 | +Ellis does not currently support scaling out. |
1102 | + |
1103 | +## Known Limitations and Issues |
1104 | + |
1105 | +The only currently supported DNS service for Clearwater is clearwater-route53 (when deploying in Amazon EC2), so will currently only work on EC2. Additional DNS services will be added for other environments in future. |
1106 | + |
1107 | +Note that this charm does not current pass charm proof because its hooks use EC2 APIs directly to obtain the public IP address rather than unit-get public-address. This is to work around what looks like a Juju bug - unit-get public-address on EC2 returns the public hostname of the unit rather than the public IP address. Unfortunately EC2 public hostname are actually split horizon hostnames, so if you attempt to resolve the hostname from within EC2 it actually resolved to a private IP address - it will only resolve to a public address if resolved from outside EC2. |
1108 | + |
1109 | +# Configuration |
1110 | + |
1111 | +Clearwater has a number of configuration fields which are non-defaultable. These are as follows. |
1112 | + |
1113 | +clearwater-route53 |
1114 | + |
1115 | +- `zone:` This must be set to a DNS zone name which is managed by the AWS Route53 service. |
1116 | +- `access_key:` and `secret_key:` These must be set to the AWS access key and secret key of the AWS account which owns the DNS zone name. |
1117 | + |
1118 | +clearwater-ellis |
1119 | + |
1120 | +- `signup_key:` This is used as a signup key on the Ellis self-provisioning portal, so should be set to a unique string for each installation. |
1121 | +- `base_number:` and `number_count:` These define the telephone number range assigned to the Clearwater system. |
1122 | + |
1123 | +# Contact Information |
1124 | + |
1125 | +## Upstream Project Name |
1126 | + |
1127 | +See http:www.projectclearwater.org and https://github.com/Metaswitch/clearwater-docs/wiki for information about clearwater. |
1128 | + |
1129 | +Clearwater source code and issue list can be found at https://github.com/Metaswitch/. |
1130 | + |
1131 | +The Clearwater mailing list is at lists.projectclearwater.org. |
1132 | |
1133 | === added file 'telco/precise/clearwater-ellis/config.yaml' |
1134 | --- telco/precise/clearwater-ellis/config.yaml 1970-01-01 00:00:00 +0000 |
1135 | +++ telco/precise/clearwater-ellis/config.yaml 2014-11-10 14:55:38 +0000 |
1136 | @@ -0,0 +1,34 @@ |
1137 | +options: |
1138 | + zone: |
1139 | + description: The DNS root zone for this service |
1140 | + type: string |
1141 | + smtp_server: |
1142 | + default: "" |
1143 | + description: The SMTP server to send password recovery emails from |
1144 | + type: string |
1145 | + smtp_username: |
1146 | + default: "" |
1147 | + description: Username to authenticate with the SMTP server |
1148 | + type: string |
1149 | + smtp_password: |
1150 | + default: "" |
1151 | + description: Password to authenticate with the SMTP server |
1152 | + type: string |
1153 | + email_sender: |
1154 | + default: "" |
1155 | + description: Email address to send recovery emails from |
1156 | + type: string |
1157 | + signup_key: |
1158 | + description: The secret signup key used to create a new account |
1159 | + type: string |
1160 | + base_number: |
1161 | + description: The first number to be allocated in the number range |
1162 | + type: string |
1163 | + number_count: |
1164 | + default: 1 |
1165 | + description: The count of numbers to allocate |
1166 | + type: int |
1167 | + repo: |
1168 | + default: http://repo.cw-ngv.com/stable |
1169 | + description: The location of the repo server |
1170 | + type: string |
1171 | |
1172 | === added file 'telco/precise/clearwater-ellis/copyright' |
1173 | --- telco/precise/clearwater-ellis/copyright 1970-01-01 00:00:00 +0000 |
1174 | +++ telco/precise/clearwater-ellis/copyright 2014-11-10 14:55:38 +0000 |
1175 | @@ -0,0 +1,31 @@ |
1176 | +Project Clearwater - IMS in the Cloud |
1177 | +Copyright (C) 2013 Metaswitch Networks Ltd |
1178 | + |
1179 | +This program is free software: you can redistribute it and/or modify it |
1180 | +under the terms of the GNU General Public License as published by the |
1181 | +Free Software Foundation, either version 3 of the License, or (at your |
1182 | +option) any later version, along with the "Special Exception" for use of |
1183 | +the program along with SSL, set forth below. This program is distributed |
1184 | +in the hope that it will be useful, but WITHOUT ANY WARRANTY; |
1185 | +without even the implied warranty of MERCHANTABILITY or FITNESS FOR |
1186 | +A PARTICULAR PURPOSE. See the GNU General Public License for more |
1187 | +details. You should have received a copy of the GNU General Public |
1188 | +License along with this program. If not, see |
1189 | +<http://www.gnu.org/licenses/>. |
1190 | + |
1191 | +The author can be reached by email at clearwater@metaswitch.com or by |
1192 | +post at Metaswitch Networks Ltd, 100 Church St, Enfield EN2 6BQ, UK |
1193 | + |
1194 | +Special Exception |
1195 | +Metaswitch Networks Ltd grants you permission to copy, modify, |
1196 | +propagate, and distribute a work formed by combining OpenSSL with The |
1197 | +Software, or a work derivative of such a combination, even if such |
1198 | +copying, modification, propagation, or distribution would otherwise |
1199 | +violate the terms of the GPL. You must comply with the GPL in all |
1200 | +respects for all of the code used other than OpenSSL. |
1201 | +"OpenSSL" means OpenSSL toolkit software distributed by the OpenSSL |
1202 | +Project and licensed under the OpenSSL Licenses, or a work based on such |
1203 | +software and licensed under the OpenSSL Licenses. |
1204 | +"OpenSSL Licenses" means the OpenSSL License and Original SSLeay License |
1205 | +under which the OpenSSL Project distributes the OpenSSL toolkit software, |
1206 | +as those licenses appear in the file LICENSE-OPENSSL. |
1207 | |
1208 | === added directory 'telco/precise/clearwater-ellis/hooks' |
1209 | === added file 'telco/precise/clearwater-ellis/hooks/as-catalog-relation-changed' |
1210 | --- telco/precise/clearwater-ellis/hooks/as-catalog-relation-changed 1970-01-01 00:00:00 +0000 |
1211 | +++ telco/precise/clearwater-ellis/hooks/as-catalog-relation-changed 2014-11-10 14:55:38 +0000 |
1212 | @@ -0,0 +1,32 @@ |
1213 | +#!/bin/bash |
1214 | +set -e |
1215 | + |
1216 | +AS_JSON=/usr/share/clearwater/ellis/web-content/js/app-servers.json |
1217 | +TMP_AS_JSON=/tmp/app-servers.json.$$ |
1218 | + |
1219 | +id=$(cut -d/ -f2 <<< $JUJU_REMOTE_UNIT) |
1220 | +as_name=$(relation-get as-name) |
1221 | +as_uri=$(relation-get as-uri) |
1222 | + |
1223 | +# If an AS name was specified, create/update a file for the AS. Otherwise delete it. |
1224 | +if [ "$as_name" != "" ] ; then |
1225 | + cat > $AS_JSON.$id <<EOF |
1226 | + "$as_name": "<InitialFilterCriteria><Priority>1</Priority><TriggerPoint><ConditionTypeCNF /><SPT><Group>0</Group><Method>REGISTER</Method></SPT><SPT><Group>1</Group><Method>INVITE</Method></SPT><SPT><Group>2</Group><Method>MESSAGE</Method></SPT></TriggerPoint><ApplicationServer><ServerName>$as_uri</ServerName><DefaultHandling>0</DefaultHandling></ApplicationServer></InitialFilterCriteria>", |
1227 | +EOF |
1228 | +else |
1229 | + rm -f $AS_JSON.$id |
1230 | +fi |
1231 | + |
1232 | +{ |
1233 | + # Open the JSON body |
1234 | + echo { |
1235 | + # Concatenate all the AS files, |
1236 | + # remove any duplicates (on the first field) and then |
1237 | + # remove a comma from the end of the last line. |
1238 | + cat $AS_JSON.* 2>/dev/null | |
1239 | + sort -k 1,1 -u | |
1240 | + sed -e '$ s/,$//' |
1241 | + # Close the JSON body |
1242 | + echo } |
1243 | +} > $TMP_AS_JSON |
1244 | +mv $TMP_AS_JSON $AS_JSON |
1245 | |
1246 | === added file 'telco/precise/clearwater-ellis/hooks/as-catalog-relation-departed' |
1247 | --- telco/precise/clearwater-ellis/hooks/as-catalog-relation-departed 1970-01-01 00:00:00 +0000 |
1248 | +++ telco/precise/clearwater-ellis/hooks/as-catalog-relation-departed 2014-11-10 14:55:38 +0000 |
1249 | @@ -0,0 +1,24 @@ |
1250 | +#!/bin/bash |
1251 | +set -e |
1252 | + |
1253 | +AS_JSON=/usr/share/clearwater/ellis/web-content/js/app-servers.json |
1254 | +TMP_AS_JSON=/tmp/app-servers.json.$$ |
1255 | + |
1256 | +id=$(cut -d/ -f2 <<< $JUJU_REMOTE_UNIT) |
1257 | + |
1258 | +# Delete the entry for this relation peer. |
1259 | +rm -f $AS_JSON.$id |
1260 | + |
1261 | +{ |
1262 | + # Open the JSON body |
1263 | + echo { |
1264 | + # Concatenate all the AS files, |
1265 | + # remove any duplicates (on the first field) and then |
1266 | + # remove a comma from the end of the last line. |
1267 | + cat $AS_JSON.* 2>/dev/null | |
1268 | + sort -k 1,1 -u | |
1269 | + sed -e '$ s/,$//' |
1270 | + # Close the JSON body |
1271 | + echo } |
1272 | +} > $TMP_AS_JSON |
1273 | +mv $TMP_AS_JSON $AS_JSON |
1274 | |
1275 | === added file 'telco/precise/clearwater-ellis/hooks/config-changed' |
1276 | --- telco/precise/clearwater-ellis/hooks/config-changed 1970-01-01 00:00:00 +0000 |
1277 | +++ telco/precise/clearwater-ellis/hooks/config-changed 2014-11-10 14:55:38 +0000 |
1278 | @@ -0,0 +1,14 @@ |
1279 | +#!/bin/bash |
1280 | +set -e |
1281 | + |
1282 | +# Update the /etc/clearwater/config file, the node.json, and re-run |
1283 | +# chef-solo |
1284 | +$CHARM_DIR/lib/config_script |
1285 | +$CHARM_DIR/lib/node_json_script |
1286 | +chef-solo -c /home/ubuntu/chef-solo/solo.rb -j /home/ubuntu/chef-solo/node.json |
1287 | +$CHARM_DIR/lib/restart |
1288 | + |
1289 | +# Create subscribers |
1290 | +if [ "$(config-get base_number)" != "" ] ; then |
1291 | + /usr/share/clearwater/ellis/env/bin/python /usr/share/clearwater/ellis/src/metaswitch/ellis/tools/create_numbers.py --start "$(config-get base_number)" --count "$(config-get number_count)" |
1292 | +fi |
1293 | |
1294 | === added file 'telco/precise/clearwater-ellis/hooks/homestead-prov-relation-changed' |
1295 | --- telco/precise/clearwater-ellis/hooks/homestead-prov-relation-changed 1970-01-01 00:00:00 +0000 |
1296 | +++ telco/precise/clearwater-ellis/hooks/homestead-prov-relation-changed 2014-11-10 14:55:38 +0000 |
1297 | @@ -0,0 +1,6 @@ |
1298 | +#!/bin/bash |
1299 | +set -e |
1300 | + |
1301 | +# Update Clearwater configuration and restart |
1302 | +$CHARM_DIR/lib/config_script homestead-hss |
1303 | +$CHARM_DIR/lib/restart |
1304 | |
1305 | === added file 'telco/precise/clearwater-ellis/hooks/install' |
1306 | --- telco/precise/clearwater-ellis/hooks/install 1970-01-01 00:00:00 +0000 |
1307 | +++ telco/precise/clearwater-ellis/hooks/install 2014-11-10 14:55:38 +0000 |
1308 | @@ -0,0 +1,37 @@ |
1309 | +#!/bin/bash |
1310 | + |
1311 | +# This is a big hack. Juju on EC2 returns hostnames rather than IP addresses |
1312 | +# for public-address and private-address. To work-around this, we resolve the |
1313 | +# host names. However, after we've joined to the DNSaaS charm, we can no longer |
1314 | +# resolve these, so add them to /etc/hosts. |
1315 | +if ! grep "# added by clearwater-*/hooks/install" /etc/hosts ; then |
1316 | + private_address=$(unit-get private-address) |
1317 | + public_address=$(unit-get public-address) |
1318 | + private_ip=$($CHARM_DIR/lib/unit-get private-address) |
1319 | + public_ip=$($CHARM_DIR/lib/unit-get public-address) |
1320 | + [ "$private_address" = "$private_ip" ] || echo "$private_ip $private_address # added by clearwater-*/hooks/install" >>/etc/hosts |
1321 | + [ "$public_address" = "$public_ip" ] || echo "$public_ip $public_address $(sed -e 's/\..*$//' <<< $public_address) # added by clearwater-*/hooks/install" >>/etc/hosts |
1322 | + echo "$public_ip ellis-$(cut -d/ -f2 <<< $JUJU_UNIT_NAME).$(config-get zone) # added by clearwater-*/hooks/install" >>/etc/hosts |
1323 | +fi |
1324 | + |
1325 | +# Install chef solo, and create the node.json and config file |
1326 | +$CHARM_DIR/lib/chef_solo_install |
1327 | +$CHARM_DIR/lib/node_json_script |
1328 | +$CHARM_DIR/lib/config_script |
1329 | + |
1330 | +apt-get update |
1331 | + |
1332 | +# Install the node |
1333 | +chef-solo -c /home/ubuntu/chef-solo/solo.rb -j /home/ubuntu/chef-solo/node.json |
1334 | + |
1335 | +# Create subscribers |
1336 | +if [ "$(config-get base_number)" != "" ] ; then |
1337 | + /usr/share/clearwater/ellis/env/bin/python /usr/share/clearwater/ellis/src/metaswitch/ellis/tools/create_numbers.py --start "$(config-get base_number)" --count "$(config-get number_count)" |
1338 | +fi |
1339 | + |
1340 | +# Expose the correct ports |
1341 | +open-port 22/tcp |
1342 | +open-port 80/tcp |
1343 | +open-port 123/udp |
1344 | +open-port 161/udp |
1345 | +open-port 443/tcp |
1346 | |
1347 | === added file 'telco/precise/clearwater-ellis/hooks/programmable-multiple-relation-changed' |
1348 | --- telco/precise/clearwater-ellis/hooks/programmable-multiple-relation-changed 1970-01-01 00:00:00 +0000 |
1349 | +++ telco/precise/clearwater-ellis/hooks/programmable-multiple-relation-changed 2014-11-10 14:55:38 +0000 |
1350 | @@ -0,0 +1,24 @@ |
1351 | +#!/bin/bash |
1352 | +set -e |
1353 | + |
1354 | +# Set our DNS requirements |
1355 | +TTL=300 |
1356 | +id=$(cut -d/ -f2 <<< $JUJU_UNIT_NAME) |
1357 | +ip=$($CHARM_DIR/lib/unit-get public-address) |
1358 | +relation-set domain=$(config-get zone) |
1359 | +relation-set resources='ellis '$TTL' IN A '$ip' |
1360 | +ellis-'$id' '$TTL' IN A '$ip |
1361 | + |
1362 | +# Update our DNS server |
1363 | +if [ "$(relation-get public-address)" != "" ] |
1364 | +then |
1365 | + echo nameserver $(relation-get public-address) > /etc/dnsmasq.resolv.conf |
1366 | + grep -v ^RESOLV_CONF= /etc/default/dnsmasq > /tmp/dnsmasq.$$ || juju-log "WARNING RESOLV_CONF not found" |
1367 | + mv /tmp/dnsmasq.$$ /etc/default/dnsmasq |
1368 | + echo RESOLV_CONF=/etc/dnsmasq.resolv.conf >> /etc/default/dnsmasq |
1369 | + service dnsmasq restart |
1370 | +fi |
1371 | + |
1372 | +# Update Clearwater configuration and restart |
1373 | +$CHARM_DIR/lib/config_script programmable-multiple |
1374 | +$CHARM_DIR/lib/restart |
1375 | |
1376 | === added file 'telco/precise/clearwater-ellis/hooks/start' |
1377 | --- telco/precise/clearwater-ellis/hooks/start 1970-01-01 00:00:00 +0000 |
1378 | +++ telco/precise/clearwater-ellis/hooks/start 2014-11-10 14:55:38 +0000 |
1379 | @@ -0,0 +1,16 @@ |
1380 | +#!/bin/bash |
1381 | +# Here put anything that is needed to start the service. |
1382 | +# Note that currently this is run directly after install |
1383 | +# i.e. 'service apache2 start' |
1384 | +set -e |
1385 | + |
1386 | +# This hook needs to be idempotent, so this could be run when ellis is |
1387 | +# already running, when it's running but not monitored by monit, when |
1388 | +# it's stopped but being monitored (so it's about to start), or stopped |
1389 | +# and unmonitored. To cover all these cases, stop monit, start ellis, start |
1390 | +# monit, then finally have monit monitor ellis |
1391 | +service monit stop |
1392 | +service ellis start |
1393 | +service monit start |
1394 | +sleep 1 |
1395 | +monit monitor ellis |
1396 | |
1397 | === added file 'telco/precise/clearwater-ellis/hooks/stop' |
1398 | --- telco/precise/clearwater-ellis/hooks/stop 1970-01-01 00:00:00 +0000 |
1399 | +++ telco/precise/clearwater-ellis/hooks/stop 2014-11-10 14:55:38 +0000 |
1400 | @@ -0,0 +1,12 @@ |
1401 | +#!/bin/bash |
1402 | +# This will be run when the service is being torn down, allowing you to disable |
1403 | +# it in various ways.. |
1404 | +# For example, if your web app uses a text file to signal to the load balancer |
1405 | +# that it is live... you could remove it and sleep for a bit to allow the load |
1406 | +# balancer to stop sending traffic. |
1407 | +# rm /srv/webroot/server-live.txt && sleep 30 |
1408 | +set -e |
1409 | + |
1410 | +# Stop ellis via monit |
1411 | +sudo service monit start |
1412 | +sudo monit stop ellis |
1413 | |
1414 | === added file 'telco/precise/clearwater-ellis/hooks/upgrade-charm' |
1415 | --- telco/precise/clearwater-ellis/hooks/upgrade-charm 1970-01-01 00:00:00 +0000 |
1416 | +++ telco/precise/clearwater-ellis/hooks/upgrade-charm 2014-11-10 14:55:38 +0000 |
1417 | @@ -0,0 +1,9 @@ |
1418 | +#!/bin/bash |
1419 | +# This hook is executed each time a charm is upgraded after the new charm |
1420 | +# contents have been unpacked |
1421 | +# Best practice suggests you execute the hooks/install and |
1422 | +# hooks/config-changed to ensure all updates are processed |
1423 | +set -e |
1424 | + |
1425 | +$CHARM_DIR/hooks/install |
1426 | +$CHARM_DIR/hooks/config-changed |
1427 | |
1428 | === added file 'telco/precise/clearwater-ellis/hooks/xdms-relation-changed' |
1429 | --- telco/precise/clearwater-ellis/hooks/xdms-relation-changed 1970-01-01 00:00:00 +0000 |
1430 | +++ telco/precise/clearwater-ellis/hooks/xdms-relation-changed 2014-11-10 14:55:38 +0000 |
1431 | @@ -0,0 +1,6 @@ |
1432 | +#!/bin/bash |
1433 | +set -e |
1434 | + |
1435 | +# Update Clearwater configuration and restart |
1436 | +$CHARM_DIR/lib/config_script xdms |
1437 | +$CHARM_DIR/lib/restart |
1438 | |
1439 | === added file 'telco/precise/clearwater-ellis/icon.svg' |
1440 | --- telco/precise/clearwater-ellis/icon.svg 1970-01-01 00:00:00 +0000 |
1441 | +++ telco/precise/clearwater-ellis/icon.svg 2014-11-10 14:55:38 +0000 |
1442 | @@ -0,0 +1,407 @@ |
1443 | +<?xml version="1.0" encoding="UTF-8" standalone="no"?> |
1444 | +<!-- Created with Inkscape (http://www.inkscape.org/) --> |
1445 | + |
1446 | +<svg |
1447 | + xmlns:dc="http://purl.org/dc/elements/1.1/" |
1448 | + xmlns:cc="http://creativecommons.org/ns#" |
1449 | + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" |
1450 | + xmlns:svg="http://www.w3.org/2000/svg" |
1451 | + xmlns="http://www.w3.org/2000/svg" |
1452 | + xmlns:xlink="http://www.w3.org/1999/xlink" |
1453 | + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" |
1454 | + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" |
1455 | + width="96" |
1456 | + height="96" |
1457 | + id="svg6517" |
1458 | + version="1.1" |
1459 | + inkscape:version="0.48.2 r9819" |
1460 | + sodipodi:docname="icon.svg"> |
1461 | + <defs |
1462 | + id="defs6519"> |
1463 | + <linearGradient |
1464 | + id="Background"> |
1465 | + <stop |
1466 | + id="stop4178" |
1467 | + offset="0" |
1468 | + style="stop-color:#b8b8b8;stop-opacity:1" /> |
1469 | + <stop |
1470 | + id="stop4180" |
1471 | + offset="1" |
1472 | + style="stop-color:#c9c9c9;stop-opacity:1" /> |
1473 | + </linearGradient> |
1474 | + <filter |
1475 | + style="color-interpolation-filters:sRGB;" |
1476 | + inkscape:label="Inner Shadow" |
1477 | + id="filter1121"> |
1478 | + <feFlood |
1479 | + flood-opacity="0.59999999999999998" |
1480 | + flood-color="rgb(0,0,0)" |
1481 | + result="flood" |
1482 | + id="feFlood1123" /> |
1483 | + <feComposite |
1484 | + in="flood" |
1485 | + in2="SourceGraphic" |
1486 | + operator="out" |
1487 | + result="composite1" |
1488 | + id="feComposite1125" /> |
1489 | + <feGaussianBlur |
1490 | + in="composite1" |
1491 | + stdDeviation="1" |
1492 | + result="blur" |
1493 | + id="feGaussianBlur1127" /> |
1494 | + <feOffset |
1495 | + dx="0" |
1496 | + dy="2" |
1497 | + result="offset" |
1498 | + id="feOffset1129" /> |
1499 | + <feComposite |
1500 | + in="offset" |
1501 | + in2="SourceGraphic" |
1502 | + operator="atop" |
1503 | + result="composite2" |
1504 | + id="feComposite1131" /> |
1505 | + </filter> |
1506 | + <filter |
1507 | + style="color-interpolation-filters:sRGB;" |
1508 | + inkscape:label="Drop Shadow" |
1509 | + id="filter950"> |
1510 | + <feFlood |
1511 | + flood-opacity="0.25" |
1512 | + flood-color="rgb(0,0,0)" |
1513 | + result="flood" |
1514 | + id="feFlood952" /> |
1515 | + <feComposite |
1516 | + in="flood" |
1517 | + in2="SourceGraphic" |
1518 | + operator="in" |
1519 | + result="composite1" |
1520 | + id="feComposite954" /> |
1521 | + <feGaussianBlur |
1522 | + in="composite1" |
1523 | + stdDeviation="1" |
1524 | + result="blur" |
1525 | + id="feGaussianBlur956" /> |
1526 | + <feOffset |
1527 | + dx="0" |
1528 | + dy="1" |
1529 | + result="offset" |
1530 | + id="feOffset958" /> |
1531 | + <feComposite |
1532 | + in="SourceGraphic" |
1533 | + in2="offset" |
1534 | + operator="over" |
1535 | + result="composite2" |
1536 | + id="feComposite960" /> |
1537 | + </filter> |
1538 | + <clipPath |
1539 | + clipPathUnits="userSpaceOnUse" |
1540 | + id="clipPath873"> |
1541 | + <g |
1542 | + transform="matrix(0,-0.66666667,0.66604479,0,-258.25992,677.00001)" |
1543 | + id="g875" |
1544 | + inkscape:label="Layer 1" |
1545 | + style="fill:#ff00ff;fill-opacity:1;stroke:none;display:inline"> |
1546 | + <path |
1547 | + style="fill:#ff00ff;fill-opacity:1;stroke:none;display:inline" |
1548 | + d="m 46.702703,898.22775 50.594594,0 C 138.16216,898.22775 144,904.06497 144,944.92583 l 0,50.73846 c 0,40.86071 -5.83784,46.69791 -46.702703,46.69791 l -50.594594,0 C 5.8378378,1042.3622 0,1036.525 0,995.66429 L 0,944.92583 C 0,904.06497 5.8378378,898.22775 46.702703,898.22775 Z" |
1549 | + id="path877" |
1550 | + inkscape:connector-curvature="0" |
1551 | + sodipodi:nodetypes="sssssssss" /> |
1552 | + </g> |
1553 | + </clipPath> |
1554 | + <filter |
1555 | + inkscape:collect="always" |
1556 | + id="filter891" |
1557 | + inkscape:label="Badge Shadow"> |
1558 | + <feGaussianBlur |
1559 | + inkscape:collect="always" |
1560 | + stdDeviation="0.71999962" |
1561 | + id="feGaussianBlur893" /> |
1562 | + </filter> |
1563 | + </defs> |
1564 | + <sodipodi:namedview |
1565 | + id="base" |
1566 | + pagecolor="#ffffff" |
1567 | + bordercolor="#666666" |
1568 | + borderopacity="1.0" |
1569 | + inkscape:pageopacity="0.0" |
1570 | + inkscape:pageshadow="2" |
1571 | + inkscape:zoom="1.3995495" |
1572 | + inkscape:cx="18.514671" |
1573 | + inkscape:cy="49.018169" |
1574 | + inkscape:document-units="px" |
1575 | + inkscape:current-layer="layer1" |
1576 | + showgrid="true" |
1577 | + fit-margin-top="0" |
1578 | + fit-margin-left="0" |
1579 | + fit-margin-right="0" |
1580 | + fit-margin-bottom="0" |
1581 | + inkscape:window-width="1331" |
1582 | + inkscape:window-height="674" |
1583 | + inkscape:window-x="19" |
1584 | + inkscape:window-y="1" |
1585 | + inkscape:window-maximized="0" |
1586 | + showborder="true" |
1587 | + showguides="true" |
1588 | + inkscape:guide-bbox="true" |
1589 | + inkscape:showpageshadow="false"> |
1590 | + <inkscape:grid |
1591 | + type="xygrid" |
1592 | + id="grid821" /> |
1593 | + <sodipodi:guide |
1594 | + orientation="1,0" |
1595 | + position="16,48" |
1596 | + id="guide823" /> |
1597 | + <sodipodi:guide |
1598 | + orientation="0,1" |
1599 | + position="64,80" |
1600 | + id="guide825" /> |
1601 | + <sodipodi:guide |
1602 | + orientation="1,0" |
1603 | + position="80,40" |
1604 | + id="guide827" /> |
1605 | + <sodipodi:guide |
1606 | + orientation="0,1" |
1607 | + position="64,16" |
1608 | + id="guide829" /> |
1609 | + </sodipodi:namedview> |
1610 | + <metadata |
1611 | + id="metadata6522"> |
1612 | + <rdf:RDF> |
1613 | + <cc:Work |
1614 | + rdf:about=""> |
1615 | + <dc:format>image/svg+xml</dc:format> |
1616 | + <dc:type |
1617 | + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> |
1618 | + <dc:title></dc:title> |
1619 | + </cc:Work> |
1620 | + </rdf:RDF> |
1621 | + </metadata> |
1622 | + <g |
1623 | + inkscape:label="BACKGROUND" |
1624 | + inkscape:groupmode="layer" |
1625 | + id="layer1" |
1626 | + transform="translate(268,-635.29076)" |
1627 | + style="display:inline"> |
1628 | + <path |
1629 | + style="fill:#e6e6e6;fill-opacity:1;stroke:none;display:inline;filter:url(#filter1121)" |
1630 | + d="m -268,700.15563 0,-33.72973 c 0,-27.24324 3.88785,-31.13513 31.10302,-31.13513 l 33.79408,0 c 27.21507,0 31.1029,3.89189 31.1029,31.13513 l 0,33.72973 c 0,27.24325 -3.88783,31.13514 -31.1029,31.13514 l -33.79408,0 C -264.11215,731.29077 -268,727.39888 -268,700.15563 Z" |
1631 | + id="path6455" |
1632 | + inkscape:connector-curvature="0" |
1633 | + sodipodi:nodetypes="sssssssss" /> |
1634 | + <image |
1635 | + y="633.29077" |
1636 | + x="-270" |
1637 | + id="image3169" |
1638 | + xlink:href="data:image/png;base64,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 |
1767 | +AABJRU5ErkJggg== |
1768 | +" |
1769 | + height="96" |
1770 | + width="96" |
1771 | + style="stroke:#000000;stroke-opacity:0.18666669" /> |
1772 | + </g> |
1773 | + <g |
1774 | + inkscape:groupmode="layer" |
1775 | + id="layer3" |
1776 | + inkscape:label="PLACE YOUR PICTOGRAM HERE" |
1777 | + style="display:inline" /> |
1778 | + <g |
1779 | + inkscape:groupmode="layer" |
1780 | + id="layer2" |
1781 | + inkscape:label="BADGE" |
1782 | + style="display:none" |
1783 | + sodipodi:insensitive="true"> |
1784 | + <g |
1785 | + style="display:inline" |
1786 | + transform="translate(-340.00001,-581)" |
1787 | + id="g4394" |
1788 | + clip-path="none"> |
1789 | + <g |
1790 | + id="g855"> |
1791 | + <g |
1792 | + inkscape:groupmode="maskhelper" |
1793 | + id="g870" |
1794 | + clip-path="url(#clipPath873)" |
1795 | + style="opacity:0.6;filter:url(#filter891)"> |
1796 | + <path |
1797 | + transform="matrix(1.4999992,0,0,1.4999992,-29.999795,-237.54282)" |
1798 | + d="m 264,552.36218 c 0,6.62742 -5.37258,12 -12,12 -6.62742,0 -12,-5.37258 -12,-12 0,-6.62741 5.37258,-12 12,-12 6.62742,0 12,5.37259 12,12 z" |
1799 | + sodipodi:ry="12" |
1800 | + sodipodi:rx="12" |
1801 | + sodipodi:cy="552.36218" |
1802 | + sodipodi:cx="252" |
1803 | + id="path844" |
1804 | + style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:4;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" |
1805 | + sodipodi:type="arc" /> |
1806 | + </g> |
1807 | + <g |
1808 | + id="g862"> |
1809 | + <path |
1810 | + sodipodi:type="arc" |
1811 | + style="color:#000000;fill:#f5f5f5;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:4;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" |
1812 | + id="path4398" |
1813 | + sodipodi:cx="252" |
1814 | + sodipodi:cy="552.36218" |
1815 | + sodipodi:rx="12" |
1816 | + sodipodi:ry="12" |
1817 | + d="m 264,552.36218 c 0,6.62742 -5.37258,12 -12,12 -6.62742,0 -12,-5.37258 -12,-12 0,-6.62741 5.37258,-12 12,-12 6.62742,0 12,5.37259 12,12 z" |
1818 | + transform="matrix(1.4999992,0,0,1.4999992,-29.999795,-238.54282)" /> |
1819 | + <path |
1820 | + transform="matrix(1.25,0,0,1.25,33,-100.45273)" |
1821 | + d="m 264,552.36218 c 0,6.62742 -5.37258,12 -12,12 -6.62742,0 -12,-5.37258 -12,-12 0,-6.62741 5.37258,-12 12,-12 6.62742,0 12,5.37259 12,12 z" |
1822 | + sodipodi:ry="12" |
1823 | + sodipodi:rx="12" |
1824 | + sodipodi:cy="552.36218" |
1825 | + sodipodi:cx="252" |
1826 | + id="path4400" |
1827 | + style="color:#000000;fill:#dd4814;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:4;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" |
1828 | + sodipodi:type="arc" /> |
1829 | + <path |
1830 | + sodipodi:type="star" |
1831 | + style="color:#000000;fill:#f5f5f5;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" |
1832 | + id="path4459" |
1833 | + sodipodi:sides="5" |
1834 | + sodipodi:cx="666.19574" |
1835 | + sodipodi:cy="589.50385" |
1836 | + sodipodi:r1="7.2431178" |
1837 | + sodipodi:r2="4.3458705" |
1838 | + sodipodi:arg1="1.0471976" |
1839 | + sodipodi:arg2="1.6755161" |
1840 | + inkscape:flatsided="false" |
1841 | + inkscape:rounded="0.1" |
1842 | + inkscape:randomized="0" |
1843 | + d="m 669.8173,595.77657 c -0.39132,0.22593 -3.62645,-1.90343 -4.07583,-1.95066 -0.44938,-0.0472 -4.05653,1.36297 -4.39232,1.06062 -0.3358,-0.30235 0.68963,-4.03715 0.59569,-4.47913 -0.0939,-0.44198 -2.5498,-3.43681 -2.36602,-3.8496 0.18379,-0.41279 4.05267,-0.59166 4.44398,-0.81759 0.39132,-0.22593 2.48067,-3.48704 2.93005,-3.4398 0.44938,0.0472 1.81505,3.67147 2.15084,3.97382 0.3358,0.30236 4.08294,1.2817 4.17689,1.72369 0.0939,0.44198 -2.9309,2.86076 -3.11469,3.27355 -0.18379,0.41279 0.0427,4.27917 -0.34859,4.5051 z" |
1844 | + transform="matrix(1.511423,-0.16366377,0.16366377,1.511423,-755.37346,-191.93651)" /> |
1845 | + </g> |
1846 | + </g> |
1847 | + </g> |
1848 | + </g> |
1849 | +</svg> |
1850 | |
1851 | === added directory 'telco/precise/clearwater-ellis/lib' |
1852 | === added file 'telco/precise/clearwater-ellis/lib/chef_solo_install' |
1853 | --- telco/precise/clearwater-ellis/lib/chef_solo_install 1970-01-01 00:00:00 +0000 |
1854 | +++ telco/precise/clearwater-ellis/lib/chef_solo_install 2014-11-10 14:55:38 +0000 |
1855 | @@ -0,0 +1,34 @@ |
1856 | +#!/bin/bash |
1857 | + |
1858 | +# This covers installing chef-solo and the Clearwater chef recipes |
1859 | +# Install needed libraries |
1860 | +apt-get -y install git libxml2-dev libxslt1-dev wget curl |
1861 | + |
1862 | +# Install chef |
1863 | +install_sh="http://opscode.com/chef/install.sh" |
1864 | +version_string="-v 11.6.0" |
1865 | +bash <(wget ${install_sh} -O -) ${version_string} |
1866 | + |
1867 | +# Pull down the Clearwater chef recipes |
1868 | +if [ ! -d /home/ubuntu/chef-solo ] |
1869 | +then |
1870 | + mkdir /home/ubuntu/chef-solo |
1871 | + git clone --recursive -b master git://github.com/Metaswitch/chef.git /home/ubuntu/chef-solo |
1872 | +fi |
1873 | + |
1874 | +# Update the chef recipes |
1875 | +cd /home/ubuntu/chef-solo |
1876 | +git pull origin --recurse-submodules master |
1877 | + |
1878 | +# Create the solo.rb file |
1879 | +cat > /home/ubuntu/chef-solo/solo.rb <<EOP |
1880 | +file_cache_path "/var/chef-solo" |
1881 | +cookbook_path [ |
1882 | + "/home/ubuntu/chef-solo/cookbooks" |
1883 | +] |
1884 | +data_bag_path "/home/ubuntu/chef-solo/data_bags" |
1885 | +environment_path "/home/ubuntu/chef-solo/environments" |
1886 | +role_path "/home/ubuntu/chef-solo/roles" |
1887 | +verbose_logging true |
1888 | +log_level :debug |
1889 | +EOP |
1890 | |
1891 | === added file 'telco/precise/clearwater-ellis/lib/config_script' |
1892 | --- telco/precise/clearwater-ellis/lib/config_script 1970-01-01 00:00:00 +0000 |
1893 | +++ telco/precise/clearwater-ellis/lib/config_script 2014-11-10 14:55:38 +0000 |
1894 | @@ -0,0 +1,63 @@ |
1895 | +#!/bin/bash |
1896 | + |
1897 | +relation_name=$1 |
1898 | + |
1899 | +set -e |
1900 | + |
1901 | +# Defaults |
1902 | +sprout_hostname=sprout.$(config-get zone) |
1903 | +hs_hostname=homestead.$(config-get zone):8888 |
1904 | +hs_provisioning_hostname=homestead.$(config-get zone):8889 |
1905 | +xdms_hostname=homer.$(config-get zone):7888 |
1906 | +ralf_hostname= |
1907 | +sas_server=0.0.0.0 |
1908 | +enum_server= |
1909 | +ellis_cookie_key=secret |
1910 | +ellis_api_key=$(hexdump -v -n 15 -e '1/1 "%02x"' /dev/random) |
1911 | + |
1912 | +# Import existing configuration |
1913 | +[ ! -f /etc/clearwater/config ] || . /etc/clearwater/config |
1914 | + |
1915 | +# Apply new configuration |
1916 | +home_domain=$(config-get zone) |
1917 | +[ "$relation-name" != "homestead-hss" ] || [ "$(relation-get public-address)" = "" ] || sprout_hostname=$(relation-get public-address) |
1918 | +[ "$relation-name" != "xdms" ] || [ "$(relation-get public-address)" = "" ] || xdms_hostname=$(relation-get public-address):9888 |
1919 | +sas_server=$(config-get sas) |
1920 | +local_ip=$($CHARM_DIR/lib/unit-get private-address) |
1921 | +public_ip=$($CHARM_DIR/lib/unit-get public-address) |
1922 | +public_hostname=ellis-$(cut -d/ -f2 <<< $JUJU_UNIT_NAME).$(config-get zone) |
1923 | +smtp_smarthost=$(config-get smtp_server) |
1924 | +smtp_username=$(config-get smtp_username) |
1925 | +smtp_password=$(config-get smtp_password) |
1926 | +email_recovery_sender=$(config-get email_sender) |
1927 | +signup_key=$(config-get signup_key) |
1928 | + |
1929 | +# Write configuration back |
1930 | +mkdir -p /etc/clearwater |
1931 | +cat >/etc/clearwater/config <<EOF |
1932 | +# Deployment definitions |
1933 | +home_domain=$home_domain |
1934 | +sprout_hostname=$sprout_hostname |
1935 | +hs_hostname=$hs_hostname |
1936 | +hs_provisioning_hostname=$hs_provisioning_hostname |
1937 | +xdms_hostname=$xdms_hostname |
1938 | +ralf_hostname=$ralf_hostname |
1939 | +sas_server=$sas_server |
1940 | +enum_server=$enum_server |
1941 | + |
1942 | +# Local IP configuration |
1943 | +local_ip=$local_ip |
1944 | +public_ip=$public_ip |
1945 | +public_hostname=$public_hostname |
1946 | + |
1947 | +# Email server configuration |
1948 | +smtp_smarthost=$smtp_smarthost |
1949 | +smtp_username=$smtp_username |
1950 | +smtp_password=$smtp_password |
1951 | +email_recovery_sender=$email_recovery_sender |
1952 | + |
1953 | +# Keys |
1954 | +signup_key=$signup_key |
1955 | +ellis_cookie_key=$ellis_cookie_key |
1956 | +ellis_api_key=$ellis_api_key |
1957 | +EOF |
1958 | |
1959 | === added file 'telco/precise/clearwater-ellis/lib/node_json_script' |
1960 | --- telco/precise/clearwater-ellis/lib/node_json_script 1970-01-01 00:00:00 +0000 |
1961 | +++ telco/precise/clearwater-ellis/lib/node_json_script 2014-11-10 14:55:38 +0000 |
1962 | @@ -0,0 +1,57 @@ |
1963 | +#!/usr/bin/python |
1964 | + |
1965 | +import subprocess |
1966 | +import string |
1967 | +import socket |
1968 | +import os |
1969 | +import argparse |
1970 | + |
1971 | +# Create the ~/chef-solo/node.json file. |
1972 | +# |
1973 | +# The node.json file contains the machines IP address, the machine ID (a number) |
1974 | +# and the repo server. |
1975 | +# |
1976 | +# If the node is being clustered, the role 'clustered' is added, and after |
1977 | +# clustering the tag 'clustered' is added (for homer/homestead) |
1978 | +# |
1979 | +# The node.json file is templated in lib/node_json_template. |
1980 | + |
1981 | +parser = argparse.ArgumentParser() |
1982 | + |
1983 | +parser.add_argument('--cluster', action='store_true') |
1984 | +parser.add_argument('--tag', action='store_true') |
1985 | + |
1986 | +args = parser.parse_args() |
1987 | + |
1988 | +# Populate the dictionary |
1989 | +d = {} |
1990 | + |
1991 | +d['LOCAL_IP'] = socket.gethostbyname(subprocess.check_output(["unit-get", "private-address"]).rstrip()) |
1992 | +d['MACHINE_ID'] = str(int(os.environ['JUJU_UNIT_NAME'].split('/')[1]) + 1) |
1993 | +d['REPO'] = subprocess.check_output(["config-get", "repo"]).rstrip() |
1994 | + |
1995 | +node_file = "/home/ubuntu/chef-solo/node.json" |
1996 | +if args.cluster or (os.path.exists(node_file) and "clustered" in open(node_file).read()): |
1997 | + d['CLUSTER'] = ",\n \"role[clustered]\"" |
1998 | + d['CLUSTERED'] = ", \"clustered\"" |
1999 | + d['TAG'] = "" |
2000 | + |
2001 | + if args.tag or (os.path.exists(node_file) and "tags" in open(node_file).read()): |
2002 | + d['TAG'] = ",\n \"tags\": [\"clustered\"]" |
2003 | + |
2004 | +else: |
2005 | + d['CLUSTER'] = "" |
2006 | + d['CLUSTERED'] = "" |
2007 | + d['TAG'] = "" |
2008 | + |
2009 | +# Open template file |
2010 | +charm_dir = os.environ['CHARM_DIR'] |
2011 | +with open( '%s/lib/node_json_template' % charm_dir ) as f: |
2012 | + src = string.Template( f.read() ) |
2013 | + |
2014 | +# Make the substitutions |
2015 | +result = src.substitute(d) |
2016 | + |
2017 | +# Write to ~/chef-solo/node.json |
2018 | +with open('/home/ubuntu/chef-solo/node.json', 'w') as f: |
2019 | + f.write(result) |
2020 | |
2021 | === added file 'telco/precise/clearwater-ellis/lib/node_json_template' |
2022 | --- telco/precise/clearwater-ellis/lib/node_json_template 1970-01-01 00:00:00 +0000 |
2023 | +++ telco/precise/clearwater-ellis/lib/node_json_template 2014-11-10 14:55:38 +0000 |
2024 | @@ -0,0 +1,22 @@ |
2025 | +{ |
2026 | + "id": "$LOCAL_IP", |
2027 | + "name": "$LOCAL_IP", |
2028 | + "chef_environment": "_default", |
2029 | + "role": "ellis", |
2030 | + "roles": ["clearwater-infrastructure", "ellis"$CLUSTERED], |
2031 | + "cloud": { |
2032 | + "local_ipv4": "$LOCAL_IP" |
2033 | + }, |
2034 | + "clearwater": { |
2035 | + "index": $MACHINE_ID, |
2036 | + "repo_server": "$REPO", |
2037 | + "number_start": 0, |
2038 | + "number_count": 0, |
2039 | + "pstn_number_start": 0, |
2040 | + "pstn_number_count": 0, |
2041 | + "repo_server": "$REPO" |
2042 | + }, |
2043 | + "run_list": [ |
2044 | + "role[ellis]"$CLUSTER |
2045 | + ]$TAG |
2046 | +} |
2047 | |
2048 | === added file 'telco/precise/clearwater-ellis/lib/restart' |
2049 | --- telco/precise/clearwater-ellis/lib/restart 1970-01-01 00:00:00 +0000 |
2050 | +++ telco/precise/clearwater-ellis/lib/restart 2014-11-10 14:55:38 +0000 |
2051 | @@ -0,0 +1,6 @@ |
2052 | +#!/bin/bash |
2053 | +set -e |
2054 | + |
2055 | +# Restart clearwater-infrastructure, and stop ellis (to be restarted by monit) |
2056 | +service clearwater-infrastructure restart |
2057 | +service ellis stop |
2058 | |
2059 | === added file 'telco/precise/clearwater-ellis/lib/unit-get' |
2060 | --- telco/precise/clearwater-ellis/lib/unit-get 1970-01-01 00:00:00 +0000 |
2061 | +++ telco/precise/clearwater-ellis/lib/unit-get 2014-11-10 14:55:38 +0000 |
2062 | @@ -0,0 +1,36 @@ |
2063 | +#!/bin/bash |
2064 | +set -ex |
2065 | +onEC2=false |
2066 | +key=$1 |
2067 | +val=$(unit-get $1) |
2068 | + |
2069 | +if [ -f $CHARM_DIR/lib/provider.txt ] |
2070 | +then |
2071 | + PROVIDER=`cat $CHARM_DIR/lib/provider.txt ` |
2072 | +else |
2073 | + #checking dirty ec2 hack will work |
2074 | + wget -q http://169.254.169.254/latest/meta-data/public-ipv4 && onEC2=true |
2075 | + if ( "$onEC2" == true ) |
2076 | + then |
2077 | + echo "EC2" > $CHARM_DIR/lib/provider.txt |
2078 | + else |
2079 | + echo "NOTEC2" > $CHARM_DIR/lib/provider.txt |
2080 | + fi |
2081 | +fi |
2082 | + |
2083 | +if [ "$PROVIDER" == "EC2" ] |
2084 | +then |
2085 | + if [ "$key" = "public-address" ] && [ -n "$(dig +short $val | head -1)" ] |
2086 | + then |
2087 | + val=$(curl http://169.254.169.254/latest/meta-data/public-ipv4) |
2088 | + elif [ "$key" = "private-address" ] |
2089 | + then |
2090 | + val_ip=$(dig +short $val | head -1) |
2091 | + [ -z "$val_ip" ] || val=$val_ip |
2092 | + ##if val_ip is empty getting the system IP |
2093 | + [ -z "$val_ip" ] && val=`ip route | grep src | cut -d " " -f 12` |
2094 | + fi |
2095 | +fi |
2096 | + |
2097 | +echo $val |
2098 | + |
2099 | |
2100 | === added file 'telco/precise/clearwater-ellis/metadata.yaml' |
2101 | --- telco/precise/clearwater-ellis/metadata.yaml 1970-01-01 00:00:00 +0000 |
2102 | +++ telco/precise/clearwater-ellis/metadata.yaml 2014-11-10 14:55:38 +0000 |
2103 | @@ -0,0 +1,17 @@ |
2104 | +name: clearwater-ellis |
2105 | +summary: Ellis charm for Project Clearwater |
2106 | +maintainer: Project Clearwater Maintainers <maintainers@projectclearwater.org> |
2107 | +description: Ellis charm for Project Clearwater |
2108 | +categories: |
2109 | + - misc |
2110 | +subordinate: false |
2111 | +requires: |
2112 | + programmable-multiple: |
2113 | + interface: dns-multi |
2114 | + homestead-prov: |
2115 | + interface: homestead-prov-interface |
2116 | + xdms: |
2117 | + interface: 3GPP-Ut |
2118 | +provides: |
2119 | + as-catalog: |
2120 | + interface: as-register |
2121 | |
2122 | === added file 'telco/precise/clearwater-ellis/revision' |
2123 | --- telco/precise/clearwater-ellis/revision 1970-01-01 00:00:00 +0000 |
2124 | +++ telco/precise/clearwater-ellis/revision 2014-11-10 14:55:38 +0000 |
2125 | @@ -0,0 +1,1 @@ |
2126 | +1 |
2127 | |
2128 | === added directory 'telco/precise/clearwater-homer' |
2129 | === added file 'telco/precise/clearwater-homer/README.md' |
2130 | --- telco/precise/clearwater-homer/README.md 1970-01-01 00:00:00 +0000 |
2131 | +++ telco/precise/clearwater-homer/README.md 2014-11-10 14:55:38 +0000 |
2132 | @@ -0,0 +1,90 @@ |
2133 | +# Overview |
2134 | + |
2135 | +This charm supports deployment and scaling of the Homer component of a Project Clearwater system. See http://www.projectclearwater.org for more information on Project Clearwater. |
2136 | + |
2137 | +# Usage |
2138 | + |
2139 | +The Homer service should be deployed as part of a Clearwater system. A Clearwater system can be deployed in a Juju environment by creating a config.yaml file then running the following commands. |
2140 | + |
2141 | + juju deploy --config config.yaml clearwater-route53 |
2142 | + juju deploy --config config.yaml --constraints arch=amd64 clearwater-ellis |
2143 | + juju deploy --config config.yaml --constraints arch=amd64 clearwater-bono |
2144 | + juju deploy --config config.yaml --constraints arch=amd64 clearwater-sprout |
2145 | + juju deploy --config config.yaml --constraints arch=amd64 clearwater-homestead |
2146 | + juju deploy --config config.yaml --constraints arch=amd64 clearwater-homer |
2147 | + juju add-relation clearwater-ellis clearwater-route53:register-ellis |
2148 | + juju add-relation clearwater-bono clearwater-route53:register-bono |
2149 | + juju add-relation clearwater-sprout clearwater-route53:register-sprout |
2150 | + juju add-relation clearwater-homestead clearwater-route53:register-homestead |
2151 | + juju add-relation clearwater-homer clearwater-route53:register-homer |
2152 | + juju expose clearwater-bono |
2153 | + juju expose clearwater-ellis |
2154 | + |
2155 | +The config.yaml configuration file takes the following format. |
2156 | + |
2157 | + clearwater-route53: |
2158 | + zone: <domain> |
2159 | + access_key: <ec2 access key> |
2160 | + secret_key: <ec2 secret access key> |
2161 | + sas: "0.0.0.0" |
2162 | + |
2163 | + clearwater-ellis: |
2164 | + smtp_server: smtp.cw-ngv.com |
2165 | + smtp_username: username |
2166 | + smtp_password: password |
2167 | + email_sender: blackhole@cw-ngv.com<mailto:blackhole@cw-ngv.com> |
2168 | + signup_key: secret |
2169 | + base_number: "6505550000" |
2170 | + number_count: 1000 |
2171 | + repo: http://repo.cw-ngv.com/stable |
2172 | + |
2173 | + clearwater-bono: |
2174 | + turn_workaround: password |
2175 | + repo: http://repo.cw-ngv.com/stable |
2176 | + |
2177 | + clearwater-sprout: |
2178 | + reg_min_expires: 400 |
2179 | + session_max_expires: 900 |
2180 | + repo: http://repo.cw-ngv.com/stable |
2181 | + |
2182 | + clearwater-homestead: |
2183 | + repo: http://repo.cw-ngv.com/stable |
2184 | + |
2185 | + clearwater-homer: |
2186 | + repo: http://repo.cw-ngv.com/stable |
2187 | + |
2188 | +Note that the clearwater-homer charm can only be deployed on the `amd64` architecture. |
2189 | + |
2190 | +## Scale out Usage |
2191 | + |
2192 | +## Known Limitations and Issues |
2193 | + |
2194 | +The only currently supported DNS service for Clearwater is clearwater-route53 (when deploying in Amazon EC2), so will currently only work on EC2. Additional DNS services will be added for other environments in future. |
2195 | + |
2196 | +clearwater-homer currently only supports running as a single unit. Clustering support will be released shortly, which will allow units to be added to and removed from a clearwater-homer deployment using juju add-unit and juju remove-unit commands. |
2197 | + |
2198 | +Note that this charm does not current pass charm proof because its hooks use EC2 APIs directly to obtain the public IP address rather than unit-get public-address. This is to work around what looks like a Juju bug - unit-get public-address on EC2 returns the public hostname of the unit rather than the public IP address. Unfortunately EC2 public hostname are actually split horizon hostnames, so if you attempt to resolve the hostname from within EC2 it actually resolved to a private IP address - it will only resolve to a public address if resolved from outside EC2. |
2199 | + |
2200 | +# Configuration |
2201 | + |
2202 | +Clearwater has a number of configuration fields which are non-defaultable. These are as follows. |
2203 | + |
2204 | +clearwater-route53 |
2205 | + |
2206 | +- `zone:` This must be set to a DNS zone name which is managed by the AWS Route53 service. |
2207 | +- `access_key:` and `secret_key:` These must be set to the AWS access key and secret key of the AWS account which owns the DNS zone name. |
2208 | + |
2209 | +clearwater-ellis |
2210 | + |
2211 | +- `signup_key:` This is used as a signup key on the Ellis self-provisioning portal, so should be set to a unique string for each installation. |
2212 | +- `base_number:` and `number_count:` These define the telephone number range assigned to the Clearwater system. |
2213 | + |
2214 | +# Contact Information |
2215 | + |
2216 | +## Upstream Project Name |
2217 | + |
2218 | +See http:www.projectclearwater.org and https://github.com/Metaswitch/clearwater-docs/wiki for information about clearwater. |
2219 | + |
2220 | +Clearwater source code and issue list can be found at https://github.com/Metaswitch/. |
2221 | + |
2222 | +The Clearwater mailing list is at lists.projectclearwater.org. |
2223 | |
2224 | === added file 'telco/precise/clearwater-homer/config.yaml' |
2225 | --- telco/precise/clearwater-homer/config.yaml 1970-01-01 00:00:00 +0000 |
2226 | +++ telco/precise/clearwater-homer/config.yaml 2014-11-10 14:55:38 +0000 |
2227 | @@ -0,0 +1,8 @@ |
2228 | +options: |
2229 | + zone: |
2230 | + description: The DNS root zone for this service |
2231 | + type: string |
2232 | + repo: |
2233 | + default: http://repo.cw-ngv.com/stable |
2234 | + description: The location of the repo server |
2235 | + type: string |
2236 | |
2237 | === added file 'telco/precise/clearwater-homer/copyright' |
2238 | --- telco/precise/clearwater-homer/copyright 1970-01-01 00:00:00 +0000 |
2239 | +++ telco/precise/clearwater-homer/copyright 2014-11-10 14:55:38 +0000 |
2240 | @@ -0,0 +1,31 @@ |
2241 | +Project Clearwater - IMS in the Cloud |
2242 | +Copyright (C) 2013 Metaswitch Networks Ltd |
2243 | + |
2244 | +This program is free software: you can redistribute it and/or modify it |
2245 | +under the terms of the GNU General Public License as published by the |
2246 | +Free Software Foundation, either version 3 of the License, or (at your |
2247 | +option) any later version, along with the "Special Exception" for use of |
2248 | +the program along with SSL, set forth below. This program is distributed |
2249 | +in the hope that it will be useful, but WITHOUT ANY WARRANTY; |
2250 | +without even the implied warranty of MERCHANTABILITY or FITNESS FOR |
2251 | +A PARTICULAR PURPOSE. See the GNU General Public License for more |
2252 | +details. You should have received a copy of the GNU General Public |
2253 | +License along with this program. If not, see |
2254 | +<http://www.gnu.org/licenses/>. |
2255 | + |
2256 | +The author can be reached by email at clearwater@metaswitch.com or by |
2257 | +post at Metaswitch Networks Ltd, 100 Church St, Enfield EN2 6BQ, UK |
2258 | + |
2259 | +Special Exception |
2260 | +Metaswitch Networks Ltd grants you permission to copy, modify, |
2261 | +propagate, and distribute a work formed by combining OpenSSL with The |
2262 | +Software, or a work derivative of such a combination, even if such |
2263 | +copying, modification, propagation, or distribution would otherwise |
2264 | +violate the terms of the GPL. You must comply with the GPL in all |
2265 | +respects for all of the code used other than OpenSSL. |
2266 | +"OpenSSL" means OpenSSL toolkit software distributed by the OpenSSL |
2267 | +Project and licensed under the OpenSSL Licenses, or a work based on such |
2268 | +software and licensed under the OpenSSL Licenses. |
2269 | +"OpenSSL Licenses" means the OpenSSL License and Original SSLeay License |
2270 | +under which the OpenSSL Project distributes the OpenSSL toolkit software, |
2271 | +as those licenses appear in the file LICENSE-OPENSSL. |
2272 | |
2273 | === added directory 'telco/precise/clearwater-homer/hooks' |
2274 | === added file 'telco/precise/clearwater-homer/hooks/config-changed' |
2275 | --- telco/precise/clearwater-homer/hooks/config-changed 1970-01-01 00:00:00 +0000 |
2276 | +++ telco/precise/clearwater-homer/hooks/config-changed 2014-11-10 14:55:38 +0000 |
2277 | @@ -0,0 +1,9 @@ |
2278 | +#!/bin/bash |
2279 | +set -e |
2280 | + |
2281 | +# Update the /etc/clearwater/config file, the node.json, and re-run |
2282 | +# chef-solo |
2283 | +$CHARM_DIR/lib/config_script |
2284 | +$CHARM_DIR/lib/node_json_script |
2285 | +chef-solo -c /home/ubuntu/chef-solo/solo.rb -j /home/ubuntu/chef-solo/node.json |
2286 | +$CHARM_DIR/lib/restart |
2287 | |
2288 | === added file 'telco/precise/clearwater-homer/hooks/homer-relation-changed' |
2289 | --- telco/precise/clearwater-homer/hooks/homer-relation-changed 1970-01-01 00:00:00 +0000 |
2290 | +++ telco/precise/clearwater-homer/hooks/homer-relation-changed 2014-11-10 14:55:38 +0000 |
2291 | @@ -0,0 +1,22 @@ |
2292 | +#!/bin/bash |
2293 | +set -e |
2294 | + |
2295 | +# Get the IP address of this unit and the remote unit |
2296 | +peer_ip=$(relation-get private-address) |
2297 | +this_ip=$(unit-get private-address) |
2298 | + |
2299 | +# Get the machine number of this unit and the remote unit. This |
2300 | +# takes the form '<charm name>/<index> |
2301 | +peer_index=$(echo $JUJU_REMOTE_UNIT | cut -d'/' -f2) |
2302 | +this_index=$(echo $JUJU_UNIT_NAME | cut -d'/' -f2) |
2303 | + |
2304 | +# Re-create the node.json files in the data bags |
2305 | +$CHARM_DIR/lib/node_json_clustered_script --ip "$peer_ip" --index "$peer_index" --cluster |
2306 | +$CHARM_DIR/lib/node_json_clustered_script --ip "$this_ip" --index "$this_index" --cluster |
2307 | + |
2308 | +# Re-create the node.json file and re-run chef sole |
2309 | +$CHARM_DIR/lib/node_json_script --cluster |
2310 | +chef-solo -c /home/ubuntu/chef-solo/solo.rb -j /home/ubuntu/chef-solo/node.json |
2311 | + |
2312 | +# Re-create the node.json with the tag. |
2313 | +$CHARM_DIR/lib/node_json_script --cluster --tag |
2314 | |
2315 | === added file 'telco/precise/clearwater-homer/hooks/homer-relation-departed' |
2316 | --- telco/precise/clearwater-homer/hooks/homer-relation-departed 1970-01-01 00:00:00 +0000 |
2317 | +++ telco/precise/clearwater-homer/hooks/homer-relation-departed 2014-11-10 14:55:38 +0000 |
2318 | @@ -0,0 +1,25 @@ |
2319 | +#!/bin/bash |
2320 | +set -e |
2321 | + |
2322 | +# Get the machine number of this unit and the remote unit. This |
2323 | +# takes the form '<charm name>/<index> |
2324 | +peer_index=$(echo $JUJU_REMOTE_UNIT | cut -d'/' -f2) |
2325 | +this_index=$(echo $JUJU_UNIT_NAME | cut -d'/' -f2) |
2326 | + |
2327 | +if [ $this_index -gt $peer_index ] |
2328 | + then |
2329 | + # Remove this node. This relation can be called more than once, so check |
2330 | + # whether the node has already been decommissioned. |
2331 | + decommissioned=$(nodetool netstats | grep DECOMMISSIONED > /dev/null; echo $?) |
2332 | + if [[ $decommissioned == 1* ]] |
2333 | + then |
2334 | + monit stop homer |
2335 | + monit unmonitor cassandra |
2336 | + nodetool decommission |
2337 | + fi |
2338 | + else |
2339 | + # Remove the node.json in databags that corresponds to the node being removed. |
2340 | + file_name="/home/ubuntu/chef-solo/data_bags/node/"$peer_index".json" |
2341 | + rm $file_name |
2342 | + chef-solo -c /home/ubuntu/chef-solo/solo.rb -j /home/ubuntu/chef-solo/node.json |
2343 | +fi |
2344 | |
2345 | === added file 'telco/precise/clearwater-homer/hooks/homer-relation-joined' |
2346 | --- telco/precise/clearwater-homer/hooks/homer-relation-joined 1970-01-01 00:00:00 +0000 |
2347 | +++ telco/precise/clearwater-homer/hooks/homer-relation-joined 2014-11-10 14:55:38 +0000 |
2348 | @@ -0,0 +1,33 @@ |
2349 | +#!/bin/bash |
2350 | +set -e |
2351 | + |
2352 | +# Get the IP address of this unit and the remote unit |
2353 | +peer_ip=$(relation-get private-address) |
2354 | +this_ip=$(unit-get private-address) |
2355 | + |
2356 | +# Get the machine number of this unit and the remote unit. This |
2357 | +# takes the form '<charm name>/<index> |
2358 | +peer_index=$(echo $JUJU_REMOTE_UNIT | cut -d'/' -f2) |
2359 | +this_index=$(echo $JUJU_UNIT_NAME | cut -d'/' -f2) |
2360 | + |
2361 | +# Re-create the node.json files in the data bags. Mark the new |
2362 | +# node as joining - the new node is the one with the higher index |
2363 | +if [ $this_index -gt $peer_index ] |
2364 | + then |
2365 | + $CHARM_DIR/lib/node_json_clustered_script --ip "$peer_ip" --index "$peer_index" --cluster |
2366 | + $CHARM_DIR/lib/node_json_clustered_script --ip "$this_ip" --index "$this_index" --cluster --joining |
2367 | + else |
2368 | + $CHARM_DIR/lib/node_json_clustered_script --ip "$peer_ip" --index "$peer_index" --cluster --joining |
2369 | + $CHARM_DIR/lib/node_json_clustered_script --ip "$this_ip" --index "$this_index" --cluster |
2370 | +fi |
2371 | + |
2372 | +# Re-create the node.json file and re-run chef solo |
2373 | +$CHARM_DIR/lib/node_json_script --cluster |
2374 | +chef-solo -c /home/ubuntu/chef-solo/solo.rb -j /home/ubuntu/chef-solo/node.json |
2375 | + |
2376 | +# Re-create the node.json with the tag. Only do this for the existing node, not the |
2377 | +# joining node |
2378 | +if [ $this_index -lt $peer_index ] |
2379 | + then |
2380 | + $CHARM_DIR/lib/node_json_script --cluster --tag |
2381 | +fi |
2382 | |
2383 | === added file 'telco/precise/clearwater-homer/hooks/install' |
2384 | --- telco/precise/clearwater-homer/hooks/install 1970-01-01 00:00:00 +0000 |
2385 | +++ telco/precise/clearwater-homer/hooks/install 2014-11-10 14:55:38 +0000 |
2386 | @@ -0,0 +1,40 @@ |
2387 | +#!/bin/bash |
2388 | +set -e |
2389 | + |
2390 | +# This is a big hack. Juju on EC2 returns hostnames rather than IP addresses |
2391 | +# for public-address and private-address. To work-around this, we resolve the |
2392 | +# host names. However, after we've joined to the DNSaaS charm, we can no longer |
2393 | +# resolve these, so add them to /etc/hosts. |
2394 | +if ! grep "# added by clearwater-*/hooks/install" /etc/hosts ; then |
2395 | + private_address=$(unit-get private-address) |
2396 | + public_address=$(unit-get public-address) |
2397 | + private_ip=$($CHARM_DIR/lib/unit-get private-address) |
2398 | + public_ip=$($CHARM_DIR/lib/unit-get public-address) |
2399 | + [ "$private_address" = "$private_ip" ] || echo "$private_ip $private_address # added by clearwater-*/hooks/install" >>/etc/hosts |
2400 | + [ "$public_address" = "$public_ip" ] || echo "$public_ip $public_address $(sed -e 's/\..*$//' <<< $public_address) # added by clearwater-*/hooks/install" >>/etc/hosts |
2401 | + echo "$private_ip homer-$(cut -d/ -f2 <<< $JUJU_UNIT_NAME).$(config-get zone) # added by clearwater-*/hooks/install" >>/etc/hosts |
2402 | +fi |
2403 | + |
2404 | +# Install chef solo |
2405 | +$CHARM_DIR/lib/chef_solo_install |
2406 | + |
2407 | +# Get the ip address and machine number of this unit. The index |
2408 | +# takes the form '<charm name>/<index> |
2409 | +this_ip=$(unit-get private-address) |
2410 | +this_index=$(echo $JUJU_UNIT_NAME | cut -d'/' -f2) |
2411 | + |
2412 | +$CHARM_DIR/lib/node_json_clustered_script --ip "$this_ip" --index "$this_index" |
2413 | +$CHARM_DIR/lib/node_json_script |
2414 | + |
2415 | +# Update the config file |
2416 | +$CHARM_DIR/lib/config_script |
2417 | + |
2418 | +apt-get update |
2419 | + |
2420 | +# Install the node |
2421 | +chef-solo -c /home/ubuntu/chef-solo/solo.rb -j /home/ubuntu/chef-solo/node.json |
2422 | + |
2423 | +# Expose the correct ports |
2424 | +open-port 22/tcp |
2425 | +open-port 123/udp |
2426 | +open-port 161/udp |
2427 | |
2428 | === added file 'telco/precise/clearwater-homer/hooks/programmable-multiple-relation-changed' |
2429 | --- telco/precise/clearwater-homer/hooks/programmable-multiple-relation-changed 1970-01-01 00:00:00 +0000 |
2430 | +++ telco/precise/clearwater-homer/hooks/programmable-multiple-relation-changed 2014-11-10 14:55:38 +0000 |
2431 | @@ -0,0 +1,24 @@ |
2432 | +#!/bin/bash |
2433 | +set -e |
2434 | + |
2435 | +# Set our DNS requirements |
2436 | +TTL=300 |
2437 | +id=$(cut -d/ -f2 <<< $JUJU_UNIT_NAME) |
2438 | +ip=$($CHARM_DIR/lib/unit-get private-address) |
2439 | +relation-set domain=$(config-get zone) |
2440 | +relation-set resources='homer '$TTL' IN A '$ip' |
2441 | +homer-'$id' '$TTL' IN A '$ip |
2442 | + |
2443 | +# Update our DNS server |
2444 | +if [ "$(relation-get public-address)" != "" ] |
2445 | +then |
2446 | + echo nameserver $(relation-get public-address) > /etc/dnsmasq.resolv.conf |
2447 | + grep -v ^RESOLV_CONF= /etc/default/dnsmasq > /tmp/dnsmasq.$$ || juju-log "WARNING RESOLV_CONF not found" |
2448 | + mv /tmp/dnsmasq.$$ /etc/default/dnsmasq |
2449 | + echo RESOLV_CONF=/etc/dnsmasq.resolv.conf >> /etc/default/dnsmasq |
2450 | + service dnsmasq restart |
2451 | +fi |
2452 | + |
2453 | +# Update Clearwater configuration and restart |
2454 | +$CHARM_DIR/lib/config_script programmable-multiple |
2455 | +$CHARM_DIR/lib/restart |
2456 | |
2457 | === added file 'telco/precise/clearwater-homer/hooks/start' |
2458 | --- telco/precise/clearwater-homer/hooks/start 1970-01-01 00:00:00 +0000 |
2459 | +++ telco/precise/clearwater-homer/hooks/start 2014-11-10 14:55:38 +0000 |
2460 | @@ -0,0 +1,16 @@ |
2461 | +#!/bin/bash |
2462 | +# Here put anything that is needed to start the service. |
2463 | +# Note that currently this is run directly after install |
2464 | +# i.e. 'service apache2 start' |
2465 | +set -e |
2466 | + |
2467 | +# This hook needs to be idempotent, so this could be run when homer is |
2468 | +# already running, when it's running but not monitored by monit, when |
2469 | +# it's stopped but being monitored (so it's about to start), or stopped |
2470 | +# and unmonitored. To cover all these cases, stop monit, start homer, start |
2471 | +# monit, then finally have monit monitor homer |
2472 | +service monit stop |
2473 | +service homer start |
2474 | +service monit start |
2475 | +sleep 1 |
2476 | +monit monitor homer |
2477 | |
2478 | === added file 'telco/precise/clearwater-homer/hooks/stop' |
2479 | --- telco/precise/clearwater-homer/hooks/stop 1970-01-01 00:00:00 +0000 |
2480 | +++ telco/precise/clearwater-homer/hooks/stop 2014-11-10 14:55:38 +0000 |
2481 | @@ -0,0 +1,12 @@ |
2482 | +#!/bin/bash |
2483 | +# This will be run when the service is being torn down, allowing you to disable |
2484 | +# it in various ways.. |
2485 | +# For example, if your web app uses a text file to signal to the load balancer |
2486 | +# that it is live... you could remove it and sleep for a bit to allow the load |
2487 | +# balancer to stop sending traffic. |
2488 | +# rm /srv/webroot/server-live.txt && sleep 30 |
2489 | +set -e |
2490 | + |
2491 | +# Stop homer via monit |
2492 | +sudo service monit start |
2493 | +sudo monit stop homer |
2494 | |
2495 | === added file 'telco/precise/clearwater-homer/hooks/upgrade-charm' |
2496 | --- telco/precise/clearwater-homer/hooks/upgrade-charm 1970-01-01 00:00:00 +0000 |
2497 | +++ telco/precise/clearwater-homer/hooks/upgrade-charm 2014-11-10 14:55:38 +0000 |
2498 | @@ -0,0 +1,9 @@ |
2499 | +#!/bin/bash |
2500 | +# This hook is executed each time a charm is upgraded after the new charm |
2501 | +# contents have been unpacked |
2502 | +# Best practice suggests you execute the hooks/install and |
2503 | +# hooks/config-changed to ensure all updates are processed |
2504 | +set -e |
2505 | + |
2506 | +$CHARM_DIR/hooks/install |
2507 | +$CHARM_DIR/hooks/config-changed |
2508 | |
2509 | === added file 'telco/precise/clearwater-homer/hooks/xdms-user-relation-joined' |
2510 | --- telco/precise/clearwater-homer/hooks/xdms-user-relation-joined 1970-01-01 00:00:00 +0000 |
2511 | +++ telco/precise/clearwater-homer/hooks/xdms-user-relation-joined 2014-11-10 14:55:38 +0000 |
2512 | @@ -0,0 +1,4 @@ |
2513 | +#!/bin/bash |
2514 | +set -e |
2515 | + |
2516 | +relation-set public-address=homer.$(config-get zone) |
2517 | |
2518 | === added file 'telco/precise/clearwater-homer/icon.svg' |
2519 | --- telco/precise/clearwater-homer/icon.svg 1970-01-01 00:00:00 +0000 |
2520 | +++ telco/precise/clearwater-homer/icon.svg 2014-11-10 14:55:38 +0000 |
2521 | @@ -0,0 +1,407 @@ |
2522 | +<?xml version="1.0" encoding="UTF-8" standalone="no"?> |
2523 | +<!-- Created with Inkscape (http://www.inkscape.org/) --> |
2524 | + |
2525 | +<svg |
2526 | + xmlns:dc="http://purl.org/dc/elements/1.1/" |
2527 | + xmlns:cc="http://creativecommons.org/ns#" |
2528 | + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" |
2529 | + xmlns:svg="http://www.w3.org/2000/svg" |
2530 | + xmlns="http://www.w3.org/2000/svg" |
2531 | + xmlns:xlink="http://www.w3.org/1999/xlink" |
2532 | + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" |
2533 | + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" |
2534 | + width="96" |
2535 | + height="96" |
2536 | + id="svg6517" |
2537 | + version="1.1" |
2538 | + inkscape:version="0.48.2 r9819" |
2539 | + sodipodi:docname="icon.svg"> |
2540 | + <defs |
2541 | + id="defs6519"> |
2542 | + <linearGradient |
2543 | + id="Background"> |
2544 | + <stop |
2545 | + id="stop4178" |
2546 | + offset="0" |
2547 | + style="stop-color:#b8b8b8;stop-opacity:1" /> |
2548 | + <stop |
2549 | + id="stop4180" |
2550 | + offset="1" |
2551 | + style="stop-color:#c9c9c9;stop-opacity:1" /> |
2552 | + </linearGradient> |
2553 | + <filter |
2554 | + style="color-interpolation-filters:sRGB;" |
2555 | + inkscape:label="Inner Shadow" |
2556 | + id="filter1121"> |
2557 | + <feFlood |
2558 | + flood-opacity="0.59999999999999998" |
2559 | + flood-color="rgb(0,0,0)" |
2560 | + result="flood" |
2561 | + id="feFlood1123" /> |
2562 | + <feComposite |
2563 | + in="flood" |
2564 | + in2="SourceGraphic" |
2565 | + operator="out" |
2566 | + result="composite1" |
2567 | + id="feComposite1125" /> |
2568 | + <feGaussianBlur |
2569 | + in="composite1" |
2570 | + stdDeviation="1" |
2571 | + result="blur" |
2572 | + id="feGaussianBlur1127" /> |
2573 | + <feOffset |
2574 | + dx="0" |
2575 | + dy="2" |
2576 | + result="offset" |
2577 | + id="feOffset1129" /> |
2578 | + <feComposite |
2579 | + in="offset" |
2580 | + in2="SourceGraphic" |
2581 | + operator="atop" |
2582 | + result="composite2" |
2583 | + id="feComposite1131" /> |
2584 | + </filter> |
2585 | + <filter |
2586 | + style="color-interpolation-filters:sRGB;" |
2587 | + inkscape:label="Drop Shadow" |
2588 | + id="filter950"> |
2589 | + <feFlood |
2590 | + flood-opacity="0.25" |
2591 | + flood-color="rgb(0,0,0)" |
2592 | + result="flood" |
2593 | + id="feFlood952" /> |
2594 | + <feComposite |
2595 | + in="flood" |
2596 | + in2="SourceGraphic" |
2597 | + operator="in" |
2598 | + result="composite1" |
2599 | + id="feComposite954" /> |
2600 | + <feGaussianBlur |
2601 | + in="composite1" |
2602 | + stdDeviation="1" |
2603 | + result="blur" |
2604 | + id="feGaussianBlur956" /> |
2605 | + <feOffset |
2606 | + dx="0" |
2607 | + dy="1" |
2608 | + result="offset" |
2609 | + id="feOffset958" /> |
2610 | + <feComposite |
2611 | + in="SourceGraphic" |
2612 | + in2="offset" |
2613 | + operator="over" |
2614 | + result="composite2" |
2615 | + id="feComposite960" /> |
2616 | + </filter> |
2617 | + <clipPath |
2618 | + clipPathUnits="userSpaceOnUse" |
2619 | + id="clipPath873"> |
2620 | + <g |
2621 | + transform="matrix(0,-0.66666667,0.66604479,0,-258.25992,677.00001)" |
2622 | + id="g875" |
2623 | + inkscape:label="Layer 1" |
2624 | + style="fill:#ff00ff;fill-opacity:1;stroke:none;display:inline"> |
2625 | + <path |
2626 | + style="fill:#ff00ff;fill-opacity:1;stroke:none;display:inline" |
2627 | + d="m 46.702703,898.22775 50.594594,0 C 138.16216,898.22775 144,904.06497 144,944.92583 l 0,50.73846 c 0,40.86071 -5.83784,46.69791 -46.702703,46.69791 l -50.594594,0 C 5.8378378,1042.3622 0,1036.525 0,995.66429 L 0,944.92583 C 0,904.06497 5.8378378,898.22775 46.702703,898.22775 Z" |
2628 | + id="path877" |
2629 | + inkscape:connector-curvature="0" |
2630 | + sodipodi:nodetypes="sssssssss" /> |
2631 | + </g> |
2632 | + </clipPath> |
2633 | + <filter |
2634 | + inkscape:collect="always" |
2635 | + id="filter891" |
2636 | + inkscape:label="Badge Shadow"> |
2637 | + <feGaussianBlur |
2638 | + inkscape:collect="always" |
2639 | + stdDeviation="0.71999962" |
2640 | + id="feGaussianBlur893" /> |
2641 | + </filter> |
2642 | + </defs> |
2643 | + <sodipodi:namedview |
2644 | + id="base" |
2645 | + pagecolor="#ffffff" |
2646 | + bordercolor="#666666" |
2647 | + borderopacity="1.0" |
2648 | + inkscape:pageopacity="0.0" |
2649 | + inkscape:pageshadow="2" |
2650 | + inkscape:zoom="1.3995495" |
2651 | + inkscape:cx="18.514671" |
2652 | + inkscape:cy="49.018169" |
2653 | + inkscape:document-units="px" |
2654 | + inkscape:current-layer="layer1" |
2655 | + showgrid="true" |
2656 | + fit-margin-top="0" |
2657 | + fit-margin-left="0" |
2658 | + fit-margin-right="0" |
2659 | + fit-margin-bottom="0" |
2660 | + inkscape:window-width="1331" |
2661 | + inkscape:window-height="674" |
2662 | + inkscape:window-x="19" |
2663 | + inkscape:window-y="1" |
2664 | + inkscape:window-maximized="0" |
2665 | + showborder="true" |
2666 | + showguides="true" |
2667 | + inkscape:guide-bbox="true" |
2668 | + inkscape:showpageshadow="false"> |
2669 | + <inkscape:grid |
2670 | + type="xygrid" |
2671 | + id="grid821" /> |
2672 | + <sodipodi:guide |
2673 | + orientation="1,0" |
2674 | + position="16,48" |
2675 | + id="guide823" /> |
2676 | + <sodipodi:guide |
2677 | + orientation="0,1" |
2678 | + position="64,80" |
2679 | + id="guide825" /> |
2680 | + <sodipodi:guide |
2681 | + orientation="1,0" |
2682 | + position="80,40" |
2683 | + id="guide827" /> |
2684 | + <sodipodi:guide |
2685 | + orientation="0,1" |
2686 | + position="64,16" |
2687 | + id="guide829" /> |
2688 | + </sodipodi:namedview> |
2689 | + <metadata |
2690 | + id="metadata6522"> |
2691 | + <rdf:RDF> |
2692 | + <cc:Work |
2693 | + rdf:about=""> |
2694 | + <dc:format>image/svg+xml</dc:format> |
2695 | + <dc:type |
2696 | + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> |
2697 | + <dc:title></dc:title> |
2698 | + </cc:Work> |
2699 | + </rdf:RDF> |
2700 | + </metadata> |
2701 | + <g |
2702 | + inkscape:label="BACKGROUND" |
2703 | + inkscape:groupmode="layer" |
2704 | + id="layer1" |
2705 | + transform="translate(268,-635.29076)" |
2706 | + style="display:inline"> |
2707 | + <path |
2708 | + style="fill:#e6e6e6;fill-opacity:1;stroke:none;display:inline;filter:url(#filter1121)" |
2709 | + d="m -268,700.15563 0,-33.72973 c 0,-27.24324 3.88785,-31.13513 31.10302,-31.13513 l 33.79408,0 c 27.21507,0 31.1029,3.89189 31.1029,31.13513 l 0,33.72973 c 0,27.24325 -3.88783,31.13514 -31.1029,31.13514 l -33.79408,0 C -264.11215,731.29077 -268,727.39888 -268,700.15563 Z" |
2710 | + id="path6455" |
2711 | + inkscape:connector-curvature="0" |
2712 | + sodipodi:nodetypes="sssssssss" /> |
2713 | + <image |
2714 | + y="633.29077" |
2715 | + x="-270" |
2716 | + id="image3169" |
2717 | + xlink:href="data:image/png;base64,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 |
2846 | +AABJRU5ErkJggg== |
2847 | +" |
2848 | + height="96" |
2849 | + width="96" |
2850 | + style="stroke:#000000;stroke-opacity:0.18666669" /> |
2851 | + </g> |
2852 | + <g |
2853 | + inkscape:groupmode="layer" |
2854 | + id="layer3" |
2855 | + inkscape:label="PLACE YOUR PICTOGRAM HERE" |
2856 | + style="display:inline" /> |
2857 | + <g |
2858 | + inkscape:groupmode="layer" |
2859 | + id="layer2" |
2860 | + inkscape:label="BADGE" |
2861 | + style="display:none" |
2862 | + sodipodi:insensitive="true"> |
2863 | + <g |
2864 | + style="display:inline" |
2865 | + transform="translate(-340.00001,-581)" |
2866 | + id="g4394" |
2867 | + clip-path="none"> |
2868 | + <g |
2869 | + id="g855"> |
2870 | + <g |
2871 | + inkscape:groupmode="maskhelper" |
2872 | + id="g870" |
2873 | + clip-path="url(#clipPath873)" |
2874 | + style="opacity:0.6;filter:url(#filter891)"> |
2875 | + <path |
2876 | + transform="matrix(1.4999992,0,0,1.4999992,-29.999795,-237.54282)" |
2877 | + d="m 264,552.36218 c 0,6.62742 -5.37258,12 -12,12 -6.62742,0 -12,-5.37258 -12,-12 0,-6.62741 5.37258,-12 12,-12 6.62742,0 12,5.37259 12,12 z" |
2878 | + sodipodi:ry="12" |
2879 | + sodipodi:rx="12" |
2880 | + sodipodi:cy="552.36218" |
2881 | + sodipodi:cx="252" |
2882 | + id="path844" |
2883 | + style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:4;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" |
2884 | + sodipodi:type="arc" /> |
2885 | + </g> |
2886 | + <g |
2887 | + id="g862"> |
2888 | + <path |
2889 | + sodipodi:type="arc" |
2890 | + style="color:#000000;fill:#f5f5f5;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:4;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" |
2891 | + id="path4398" |
2892 | + sodipodi:cx="252" |
2893 | + sodipodi:cy="552.36218" |
2894 | + sodipodi:rx="12" |
2895 | + sodipodi:ry="12" |
2896 | + d="m 264,552.36218 c 0,6.62742 -5.37258,12 -12,12 -6.62742,0 -12,-5.37258 -12,-12 0,-6.62741 5.37258,-12 12,-12 6.62742,0 12,5.37259 12,12 z" |
2897 | + transform="matrix(1.4999992,0,0,1.4999992,-29.999795,-238.54282)" /> |
2898 | + <path |
2899 | + transform="matrix(1.25,0,0,1.25,33,-100.45273)" |
2900 | + d="m 264,552.36218 c 0,6.62742 -5.37258,12 -12,12 -6.62742,0 -12,-5.37258 -12,-12 0,-6.62741 5.37258,-12 12,-12 6.62742,0 12,5.37259 12,12 z" |
2901 | + sodipodi:ry="12" |
2902 | + sodipodi:rx="12" |
2903 | + sodipodi:cy="552.36218" |
2904 | + sodipodi:cx="252" |
2905 | + id="path4400" |
2906 | + style="color:#000000;fill:#dd4814;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:4;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" |
2907 | + sodipodi:type="arc" /> |
2908 | + <path |
2909 | + sodipodi:type="star" |
2910 | + style="color:#000000;fill:#f5f5f5;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" |
2911 | + id="path4459" |
2912 | + sodipodi:sides="5" |
2913 | + sodipodi:cx="666.19574" |
2914 | + sodipodi:cy="589.50385" |
2915 | + sodipodi:r1="7.2431178" |
2916 | + sodipodi:r2="4.3458705" |
2917 | + sodipodi:arg1="1.0471976" |
2918 | + sodipodi:arg2="1.6755161" |
2919 | + inkscape:flatsided="false" |
2920 | + inkscape:rounded="0.1" |
2921 | + inkscape:randomized="0" |
2922 | + d="m 669.8173,595.77657 c -0.39132,0.22593 -3.62645,-1.90343 -4.07583,-1.95066 -0.44938,-0.0472 -4.05653,1.36297 -4.39232,1.06062 -0.3358,-0.30235 0.68963,-4.03715 0.59569,-4.47913 -0.0939,-0.44198 -2.5498,-3.43681 -2.36602,-3.8496 0.18379,-0.41279 4.05267,-0.59166 4.44398,-0.81759 0.39132,-0.22593 2.48067,-3.48704 2.93005,-3.4398 0.44938,0.0472 1.81505,3.67147 2.15084,3.97382 0.3358,0.30236 4.08294,1.2817 4.17689,1.72369 0.0939,0.44198 -2.9309,2.86076 -3.11469,3.27355 -0.18379,0.41279 0.0427,4.27917 -0.34859,4.5051 z" |
2923 | + transform="matrix(1.511423,-0.16366377,0.16366377,1.511423,-755.37346,-191.93651)" /> |
2924 | + </g> |
2925 | + </g> |
2926 | + </g> |
2927 | + </g> |
2928 | +</svg> |
2929 | |
2930 | === added directory 'telco/precise/clearwater-homer/lib' |
2931 | === added file 'telco/precise/clearwater-homer/lib/chef_solo_install' |
2932 | --- telco/precise/clearwater-homer/lib/chef_solo_install 1970-01-01 00:00:00 +0000 |
2933 | +++ telco/precise/clearwater-homer/lib/chef_solo_install 2014-11-10 14:55:38 +0000 |
2934 | @@ -0,0 +1,34 @@ |
2935 | +#!/bin/bash |
2936 | + |
2937 | +# This covers installing chef-solo and the Clearwater chef recipes |
2938 | +# Install needed libraries |
2939 | +apt-get -y install git libxml2-dev libxslt1-dev wget curl |
2940 | + |
2941 | +# Install chef |
2942 | +install_sh="http://opscode.com/chef/install.sh" |
2943 | +version_string="-v 11.6.0" |
2944 | +bash <(wget ${install_sh} -O -) ${version_string} |
2945 | + |
2946 | +# Pull down the Clearwater chef recipes |
2947 | +if [ ! -d /home/ubuntu/chef-solo ] |
2948 | +then |
2949 | + mkdir /home/ubuntu/chef-solo |
2950 | + git clone --recursive -b master git://github.com/Metaswitch/chef.git /home/ubuntu/chef-solo |
2951 | +fi |
2952 | + |
2953 | +# Update the chef recipes |
2954 | +cd /home/ubuntu/chef-solo |
2955 | +git pull origin --recurse-submodules master |
2956 | + |
2957 | +# Create the solo.rb file |
2958 | +cat > /home/ubuntu/chef-solo/solo.rb <<EOP |
2959 | +file_cache_path "/var/chef-solo" |
2960 | +cookbook_path [ |
2961 | + "/home/ubuntu/chef-solo/cookbooks" |
2962 | +] |
2963 | +data_bag_path "/home/ubuntu/chef-solo/data_bags" |
2964 | +environment_path "/home/ubuntu/chef-solo/environments" |
2965 | +role_path "/home/ubuntu/chef-solo/roles" |
2966 | +verbose_logging true |
2967 | +log_level :debug |
2968 | +EOP |
2969 | |
2970 | === added file 'telco/precise/clearwater-homer/lib/config_script' |
2971 | --- telco/precise/clearwater-homer/lib/config_script 1970-01-01 00:00:00 +0000 |
2972 | +++ telco/precise/clearwater-homer/lib/config_script 2014-11-10 14:55:38 +0000 |
2973 | @@ -0,0 +1,43 @@ |
2974 | +#!/bin/bash |
2975 | + |
2976 | +relation_name=$1 |
2977 | + |
2978 | +set -e |
2979 | + |
2980 | +# Defaults |
2981 | +sprout_hostname=sprout.$(config-get zone) |
2982 | +hs_hostname=homestead.$(config-get zone):8888 |
2983 | +hs_provisioning_hostname=homestead.$(config-get zone):8889 |
2984 | +xdms_hostname=homer.$(config-get zone):7888 |
2985 | +ralf_hostname= |
2986 | +sas_server=0.0.0.0 |
2987 | +enum_server= |
2988 | + |
2989 | +# Import existing configuration |
2990 | +[ ! -f /etc/clearwater/config ] || . /etc/clearwater/config |
2991 | + |
2992 | +# Apply new configuration |
2993 | +home_domain=$(config-get zone) |
2994 | +sas_server=$(config-get sas) |
2995 | +local_ip=$($CHARM_DIR/lib/unit-get private-address) |
2996 | +public_ip=$($CHARM_DIR/lib/unit-get public-address) |
2997 | +public_hostname=homer-$(cut -d/ -f2 <<< $JUJU_UNIT_NAME).$(config-get zone) |
2998 | + |
2999 | +# Write configuration back |
3000 | +mkdir -p /etc/clearwater |
3001 | +cat >/etc/clearwater/config <<EOF |
3002 | +# Deployment definitions |
3003 | +home_domain=$home_domain |
3004 | +sprout_hostname=$sprout_hostname |
3005 | +hs_hostname=$hs_hostname |
3006 | +hs_provisioning_hostname=$hs_provisioning_hostname |
3007 | +xdms_hostname=$xdms_hostname |
3008 | +ralf_hostname=$ralf_hostname |
3009 | +sas_server=$sas_server |
3010 | +enum_server=$enum_server |
3011 | + |
3012 | +# Local IP configuration |
3013 | +local_ip=$local_ip |
3014 | +public_ip=$public_ip |
3015 | +public_hostname=$public_hostname |
3016 | +EOF |
3017 | |
3018 | === added file 'telco/precise/clearwater-homer/lib/node_json_clustered_script' |
3019 | --- telco/precise/clearwater-homer/lib/node_json_clustered_script 1970-01-01 00:00:00 +0000 |
3020 | +++ telco/precise/clearwater-homer/lib/node_json_clustered_script 2014-11-10 14:55:38 +0000 |
3021 | @@ -0,0 +1,58 @@ |
3022 | +#!/usr/bin/python |
3023 | +import subprocess |
3024 | +import string |
3025 | +import socket |
3026 | +import os |
3027 | +import sys |
3028 | +import argparse |
3029 | + |
3030 | +# Create the ~/chef-solo/data_bags/node/<index>.json files. |
3031 | +# |
3032 | +# The node.json file contains the machines IP address, the machine ID (a number) |
3033 | +# and the repo server. |
3034 | +# |
3035 | +# If the node is being clustered, the role 'clustered' is added, and if the |
3036 | +# node is joinging the attribute 'joining' is added |
3037 | +# |
3038 | +# The node.json file is templated in lib/node_json_clustered_template. |
3039 | + |
3040 | +parser = argparse.ArgumentParser() |
3041 | + |
3042 | +parser.add_argument('--cluster', action='store_true') |
3043 | +parser.add_argument('--joining', action='store_true') |
3044 | +parser.add_argument('--index', type=int, required=True) |
3045 | +parser.add_argument('--ip', type=str, required=True) |
3046 | + |
3047 | +args = parser.parse_args() |
3048 | + |
3049 | +# Populate the dictionary |
3050 | +d = {} |
3051 | + |
3052 | +d['LOCAL_IP'] = socket.gethostbyname(args.ip) |
3053 | +d['MACHINE_ID'] = str(args.index + 1) |
3054 | +d['REPO'] = subprocess.check_output(["config-get", "repo"]).rstrip() |
3055 | + |
3056 | +if args.cluster: |
3057 | + d['CLUSTER'] = ",\n \"role[clustered]\"" |
3058 | + d['CLUSTERED'] = ", \"clustered\"" |
3059 | +else: |
3060 | + d['CLUSTER'] = "" |
3061 | + d['CLUSTERED'] = "" |
3062 | + |
3063 | +if args.joining: |
3064 | + d['JOINING'] = ",\n \"joining\": true" |
3065 | +else: |
3066 | + d['JOINING'] = "" |
3067 | + |
3068 | +# Open template file |
3069 | +charm_dir = os.environ['CHARM_DIR'] |
3070 | +with open( '%s/lib/node_json_clustered_template' % charm_dir ) as f: |
3071 | + src = string.Template( f.read() ) |
3072 | + |
3073 | +# Make the substitutions |
3074 | +result = src.substitute(d) |
3075 | + |
3076 | +# Write to ~/chef-solo/data_bags/node/<index>.json |
3077 | +node_file = str(args.index + 1) + ".json" |
3078 | +with open('/home/ubuntu/chef-solo/data_bags/node/%s' % node_file, 'w') as f: |
3079 | + f.write(result) |
3080 | |
3081 | === added file 'telco/precise/clearwater-homer/lib/node_json_clustered_template' |
3082 | --- telco/precise/clearwater-homer/lib/node_json_clustered_template 1970-01-01 00:00:00 +0000 |
3083 | +++ telco/precise/clearwater-homer/lib/node_json_clustered_template 2014-11-10 14:55:38 +0000 |
3084 | @@ -0,0 +1,20 @@ |
3085 | +{ |
3086 | + "id": "$LOCAL_IP", |
3087 | + "name": "$LOCAL_IP", |
3088 | + "chef_environment": "_default", |
3089 | + "json_class": "Chef::Node", |
3090 | + "automatic": { |
3091 | + "role": "homer", |
3092 | + "roles": ["clearwater-infrastructure", "homer"$CLUSTERED], |
3093 | + "cloud": { |
3094 | + "local_ipv4": "$LOCAL_IP" |
3095 | + }, |
3096 | + "clearwater": { |
3097 | + "index": $MACHINE_ID$JOINING |
3098 | + } |
3099 | + }, |
3100 | + "chef_type": "node", |
3101 | + "run_list": [ |
3102 | + "role[homer]"$CLUSTER |
3103 | + ] |
3104 | +} |
3105 | |
3106 | === added file 'telco/precise/clearwater-homer/lib/node_json_script' |
3107 | --- telco/precise/clearwater-homer/lib/node_json_script 1970-01-01 00:00:00 +0000 |
3108 | +++ telco/precise/clearwater-homer/lib/node_json_script 2014-11-10 14:55:38 +0000 |
3109 | @@ -0,0 +1,57 @@ |
3110 | +#!/usr/bin/python |
3111 | + |
3112 | +import subprocess |
3113 | +import string |
3114 | +import socket |
3115 | +import os |
3116 | +import argparse |
3117 | + |
3118 | +# Create the ~/chef-solo/node.json file. |
3119 | +# |
3120 | +# The node.json file contains the machines IP address, the machine ID (a number) |
3121 | +# and the repo server. |
3122 | +# |
3123 | +# If the node is being clustered, the role 'clustered' is added, and after |
3124 | +# clustering the tag 'clustered' is added (for homer/homestead) |
3125 | +# |
3126 | +# The node.json file is templated in lib/node_json_template. |
3127 | + |
3128 | +parser = argparse.ArgumentParser() |
3129 | + |
3130 | +parser.add_argument('--cluster', action='store_true') |
3131 | +parser.add_argument('--tag', action='store_true') |
3132 | + |
3133 | +args = parser.parse_args() |
3134 | + |
3135 | +# Populate the dictionary |
3136 | +d = {} |
3137 | + |
3138 | +d['LOCAL_IP'] = socket.gethostbyname(subprocess.check_output(["unit-get", "private-address"]).rstrip()) |
3139 | +d['MACHINE_ID'] = str(int(os.environ['JUJU_UNIT_NAME'].split('/')[1]) + 1) |
3140 | +d['REPO'] = subprocess.check_output(["config-get", "repo"]).rstrip() |
3141 | + |
3142 | +node_file = "/home/ubuntu/chef-solo/node.json" |
3143 | +if args.cluster or (os.path.exists(node_file) and "clustered" in open(node_file).read()): |
3144 | + d['CLUSTER'] = ",\n \"role[clustered]\"" |
3145 | + d['CLUSTERED'] = ", \"clustered\"" |
3146 | + d['TAG'] = "" |
3147 | + |
3148 | + if args.tag or (os.path.exists(node_file) and "tags" in open(node_file).read()): |
3149 | + d['TAG'] = ",\n \"tags\": [\"clustered\"]" |
3150 | + |
3151 | +else: |
3152 | + d['CLUSTER'] = "" |
3153 | + d['CLUSTERED'] = "" |
3154 | + d['TAG'] = "" |
3155 | + |
3156 | +# Open template file |
3157 | +charm_dir = os.environ['CHARM_DIR'] |
3158 | +with open( '%s/lib/node_json_template' % charm_dir ) as f: |
3159 | + src = string.Template( f.read() ) |
3160 | + |
3161 | +# Make the substitutions |
3162 | +result = src.substitute(d) |
3163 | + |
3164 | +# Write to ~/chef-solo/node.json |
3165 | +with open('/home/ubuntu/chef-solo/node.json', 'w') as f: |
3166 | + f.write(result) |
3167 | |
3168 | === added file 'telco/precise/clearwater-homer/lib/node_json_template' |
3169 | --- telco/precise/clearwater-homer/lib/node_json_template 1970-01-01 00:00:00 +0000 |
3170 | +++ telco/precise/clearwater-homer/lib/node_json_template 2014-11-10 14:55:38 +0000 |
3171 | @@ -0,0 +1,17 @@ |
3172 | +{ |
3173 | + "id": "$LOCAL_IP", |
3174 | + "name": "$LOCAL_IP", |
3175 | + "chef_environment": "_default", |
3176 | + "role": "homer", |
3177 | + "roles": ["clearwater-infrastructure", "homer"$CLUSTERED], |
3178 | + "cloud": { |
3179 | + "local_ipv4": "$LOCAL_IP" |
3180 | + }, |
3181 | + "clearwater": { |
3182 | + "index": $MACHINE_ID, |
3183 | + "repo_server": "$REPO" |
3184 | + }, |
3185 | + "run_list": [ |
3186 | + "role[homer]"$CLUSTER |
3187 | + ]$TAG |
3188 | +} |
3189 | |
3190 | === added file 'telco/precise/clearwater-homer/lib/restart' |
3191 | --- telco/precise/clearwater-homer/lib/restart 1970-01-01 00:00:00 +0000 |
3192 | +++ telco/precise/clearwater-homer/lib/restart 2014-11-10 14:55:38 +0000 |
3193 | @@ -0,0 +1,6 @@ |
3194 | +#!/bin/bash |
3195 | +set -e |
3196 | + |
3197 | +# Restart clearwater-infrastructure, and stop homer (to be restarted by monit) |
3198 | +service clearwater-infrastructure restart |
3199 | +service homer stop |
3200 | |
3201 | === added file 'telco/precise/clearwater-homer/lib/unit-get' |
3202 | --- telco/precise/clearwater-homer/lib/unit-get 1970-01-01 00:00:00 +0000 |
3203 | +++ telco/precise/clearwater-homer/lib/unit-get 2014-11-10 14:55:38 +0000 |
3204 | @@ -0,0 +1,36 @@ |
3205 | +#!/bin/bash |
3206 | +set -ex |
3207 | +onEC2=false |
3208 | +key=$1 |
3209 | +val=$(unit-get $1) |
3210 | + |
3211 | +if [ -f $CHARM_DIR/lib/provider.txt ] |
3212 | +then |
3213 | + PROVIDER=`cat $CHARM_DIR/lib/provider.txt ` |
3214 | +else |
3215 | + #checking dirty ec2 hack will work |
3216 | + wget -q http://169.254.169.254/latest/meta-data/public-ipv4 && onEC2=true |
3217 | + if ( "$onEC2" == true ) |
3218 | + then |
3219 | + echo "EC2" > $CHARM_DIR/lib/provider.txt |
3220 | + else |
3221 | + echo "NOTEC2" > $CHARM_DIR/lib/provider.txt |
3222 | + fi |
3223 | +fi |
3224 | + |
3225 | +if [ "$PROVIDER" == "EC2" ] |
3226 | +then |
3227 | + if [ "$key" = "public-address" ] && [ -n "$(dig +short $val | head -1)" ] |
3228 | + then |
3229 | + val=$(curl http://169.254.169.254/latest/meta-data/public-ipv4) |
3230 | + elif [ "$key" = "private-address" ] |
3231 | + then |
3232 | + val_ip=$(dig +short $val | head -1) |
3233 | + [ -z "$val_ip" ] || val=$val_ip |
3234 | + ##if val_ip is empty getting the system IP |
3235 | + [ -z "$val_ip" ] && val=`ip route | grep src | cut -d " " -f 12` |
3236 | + fi |
3237 | +fi |
3238 | + |
3239 | +echo $val |
3240 | + |
3241 | |
3242 | === added file 'telco/precise/clearwater-homer/metadata.yaml' |
3243 | --- telco/precise/clearwater-homer/metadata.yaml 1970-01-01 00:00:00 +0000 |
3244 | +++ telco/precise/clearwater-homer/metadata.yaml 2014-11-10 14:55:38 +0000 |
3245 | @@ -0,0 +1,16 @@ |
3246 | +name: clearwater-homer |
3247 | +summary: Homer charm for Project Clearwater |
3248 | +maintainer: Project Clearwater Maintainers <maintainers@projectclearwater.org> |
3249 | +description: Homer charm for Project Clearwater |
3250 | +categories: |
3251 | + - misc |
3252 | +subordinate: false |
3253 | +requires: |
3254 | + programmable-multiple: |
3255 | + interface: dns-multi |
3256 | +provides: |
3257 | + xdms-user: |
3258 | + interface: 3GPP-Ut |
3259 | +peers: |
3260 | + homer: |
3261 | + interface: homer-interface |
3262 | |
3263 | === added file 'telco/precise/clearwater-homer/revision' |
3264 | --- telco/precise/clearwater-homer/revision 1970-01-01 00:00:00 +0000 |
3265 | +++ telco/precise/clearwater-homer/revision 2014-11-10 14:55:38 +0000 |
3266 | @@ -0,0 +1,1 @@ |
3267 | +1 |
3268 | |
3269 | === added directory 'telco/precise/clearwater-homestead' |
3270 | === added file 'telco/precise/clearwater-homestead/README.md' |
3271 | --- telco/precise/clearwater-homestead/README.md 1970-01-01 00:00:00 +0000 |
3272 | +++ telco/precise/clearwater-homestead/README.md 2014-11-10 14:55:38 +0000 |
3273 | @@ -0,0 +1,90 @@ |
3274 | +# Overview |
3275 | + |
3276 | +This charm supports deployment and scaling of the Homestead component of a Project Clearwater system. See http://www.projectclearwater.org for more information on Project Clearwater. |
3277 | + |
3278 | +# Usage |
3279 | + |
3280 | +The Homestead service should be deployed as part of a Clearwater system. A Clearwater system can be deployed in a Juju environment by creating a config.yaml file then running the following commands. |
3281 | + |
3282 | + juju deploy --config config.yaml clearwater-route53 |
3283 | + juju deploy --config config.yaml --constraints arch=amd64 clearwater-ellis |
3284 | + juju deploy --config config.yaml --constraints arch=amd64 clearwater-bono |
3285 | + juju deploy --config config.yaml --constraints arch=amd64 clearwater-sprout |
3286 | + juju deploy --config config.yaml --constraints arch=amd64 clearwater-homestead |
3287 | + juju deploy --config config.yaml --constraints arch=amd64 clearwater-homer |
3288 | + juju add-relation clearwater-ellis clearwater-route53:register-ellis |
3289 | + juju add-relation clearwater-bono clearwater-route53:register-bono |
3290 | + juju add-relation clearwater-sprout clearwater-route53:register-sprout |
3291 | + juju add-relation clearwater-homestead clearwater-route53:register-homestead |
3292 | + juju add-relation clearwater-homer clearwater-route53:register-homer |
3293 | + juju expose clearwater-bono |
3294 | + juju expose clearwater-ellis |
3295 | + |
3296 | +The config.yaml configuration file takes the following format. |
3297 | + |
3298 | + clearwater-route53: |
3299 | + zone: <domain> |
3300 | + access_key: <ec2 access key> |
3301 | + secret_key: <ec2 secret access key> |
3302 | + sas: "0.0.0.0" |
3303 | + |
3304 | + clearwater-ellis: |
3305 | + smtp_server: smtp.cw-ngv.com |
3306 | + smtp_username: username |
3307 | + smtp_password: password |
3308 | + email_sender: blackhole@cw-ngv.com<mailto:blackhole@cw-ngv.com> |
3309 | + signup_key: secret |
3310 | + base_number: "6505550000" |
3311 | + number_count: 1000 |
3312 | + repo: http://repo.cw-ngv.com/stable |
3313 | + |
3314 | + clearwater-bono: |
3315 | + turn_workaround: password |
3316 | + repo: http://repo.cw-ngv.com/stable |
3317 | + |
3318 | + clearwater-sprout: |
3319 | + reg_min_expires: 400 |
3320 | + session_max_expires: 900 |
3321 | + repo: http://repo.cw-ngv.com/stable |
3322 | + |
3323 | + clearwater-homestead: |
3324 | + repo: http://repo.cw-ngv.com/stable |
3325 | + |
3326 | + clearwater-homer: |
3327 | + repo: http://repo.cw-ngv.com/stable |
3328 | + |
3329 | +Note that the clearwater-homestead charm can only be deployed on the `amd64` architecture. |
3330 | + |
3331 | +## Scale out Usage |
3332 | + |
3333 | +## Known Limitations and Issues |
3334 | + |
3335 | +The only currently supported DNS service for Clearwater is clearwater-route53 (when deploying in Amazon EC2), so will currently only work on EC2. Additional DNS services will be added for other environments in future. |
3336 | + |
3337 | +clearwater-homestead currently only supports running as a single unit. Clustering support will be released shortly, which will allow units to be added to and removed from a clearwater-homestead deployment using juju add-unit and juju remove-unit commands. |
3338 | + |
3339 | +Note that this charm does not current pass charm proof because its hooks use EC2 APIs directly to obtain the public IP address rather than unit-get public-address. This is to work around what looks like a Juju bug - unit-get public-address on EC2 returns the public hostname of the unit rather than the public IP address. Unfortunately EC2 public hostname are actually split horizon hostnames, so if you attempt to resolve the hostname from within EC2 it actually resolved to a private IP address - it will only resolve to a public address if resolved from outside EC2. |
3340 | + |
3341 | +# Configuration |
3342 | + |
3343 | +Clearwater has a number of configuration fields which are non-defaultable. These are as follows. |
3344 | + |
3345 | +clearwater-route53 |
3346 | + |
3347 | +- `zone:` This must be set to a DNS zone name which is managed by the AWS Route53 service. |
3348 | +- `access_key:` and `secret_key:` These must be set to the AWS access key and secret key of the AWS account which owns the DNS zone name. |
3349 | + |
3350 | +clearwater-ellis |
3351 | + |
3352 | +- `signup_key:` This is used as a signup key on the Ellis self-provisioning portal, so should be set to a unique string for each installation. |
3353 | +- `base_number:` and `number_count:` These define the telephone number range assigned to the Clearwater system. |
3354 | + |
3355 | +# Contact Information |
3356 | + |
3357 | +## Upstream Project Name |
3358 | + |
3359 | +See http:www.projectclearwater.org and https://github.com/Metaswitch/clearwater-docs/wiki for information about clearwater. |
3360 | + |
3361 | +Clearwater source code and issue list can be found at https://github.com/Metaswitch/. |
3362 | + |
3363 | +The Clearwater mailing list is at lists.projectclearwater.org. |
3364 | |
3365 | === added file 'telco/precise/clearwater-homestead/config.yaml' |
3366 | --- telco/precise/clearwater-homestead/config.yaml 1970-01-01 00:00:00 +0000 |
3367 | +++ telco/precise/clearwater-homestead/config.yaml 2014-11-10 14:55:38 +0000 |
3368 | @@ -0,0 +1,12 @@ |
3369 | +options: |
3370 | + zone: |
3371 | + description: The DNS root zone for this service |
3372 | + type: string |
3373 | + sas: |
3374 | + default: "" |
3375 | + description: The location of the SAS server |
3376 | + type: string |
3377 | + repo: |
3378 | + default: http://repo.cw-ngv.com/stable |
3379 | + description: The location of the repo server |
3380 | + type: string |
3381 | |
3382 | === added file 'telco/precise/clearwater-homestead/copyright' |
3383 | --- telco/precise/clearwater-homestead/copyright 1970-01-01 00:00:00 +0000 |
3384 | +++ telco/precise/clearwater-homestead/copyright 2014-11-10 14:55:38 +0000 |
3385 | @@ -0,0 +1,31 @@ |
3386 | +Project Clearwater - IMS in the Cloud |
3387 | +Copyright (C) 2013 Metaswitch Networks Ltd |
3388 | + |
3389 | +This program is free software: you can redistribute it and/or modify it |
3390 | +under the terms of the GNU General Public License as published by the |
3391 | +Free Software Foundation, either version 3 of the License, or (at your |
3392 | +option) any later version, along with the "Special Exception" for use of |
3393 | +the program along with SSL, set forth below. This program is distributed |
3394 | +in the hope that it will be useful, but WITHOUT ANY WARRANTY; |
3395 | +without even the implied warranty of MERCHANTABILITY or FITNESS FOR |
3396 | +A PARTICULAR PURPOSE. See the GNU General Public License for more |
3397 | +details. You should have received a copy of the GNU General Public |
3398 | +License along with this program. If not, see |
3399 | +<http://www.gnu.org/licenses/>. |
3400 | + |
3401 | +The author can be reached by email at clearwater@metaswitch.com or by |
3402 | +post at Metaswitch Networks Ltd, 100 Church St, Enfield EN2 6BQ, UK |
3403 | + |
3404 | +Special Exception |
3405 | +Metaswitch Networks Ltd grants you permission to copy, modify, |
3406 | +propagate, and distribute a work formed by combining OpenSSL with The |
3407 | +Software, or a work derivative of such a combination, even if such |
3408 | +copying, modification, propagation, or distribution would otherwise |
3409 | +violate the terms of the GPL. You must comply with the GPL in all |
3410 | +respects for all of the code used other than OpenSSL. |
3411 | +"OpenSSL" means OpenSSL toolkit software distributed by the OpenSSL |
3412 | +Project and licensed under the OpenSSL Licenses, or a work based on such |
3413 | +software and licensed under the OpenSSL Licenses. |
3414 | +"OpenSSL Licenses" means the OpenSSL License and Original SSLeay License |
3415 | +under which the OpenSSL Project distributes the OpenSSL toolkit software, |
3416 | +as those licenses appear in the file LICENSE-OPENSSL. |
3417 | |
3418 | === added directory 'telco/precise/clearwater-homestead/hooks' |
3419 | === added file 'telco/precise/clearwater-homestead/hooks/config-changed' |
3420 | --- telco/precise/clearwater-homestead/hooks/config-changed 1970-01-01 00:00:00 +0000 |
3421 | +++ telco/precise/clearwater-homestead/hooks/config-changed 2014-11-10 14:55:38 +0000 |
3422 | @@ -0,0 +1,9 @@ |
3423 | +#!/bin/bash |
3424 | +set -e |
3425 | + |
3426 | +# Update the /etc/clearwater/config file, the node.json, and re-run |
3427 | +# chef-solo |
3428 | +$CHARM_DIR/lib/config_script |
3429 | +$CHARM_DIR/lib/node_json_script |
3430 | +chef-solo -c /home/ubuntu/chef-solo/solo.rb -j /home/ubuntu/chef-solo/node.json |
3431 | +$CHARM_DIR/lib/restart |
3432 | |
3433 | === added file 'telco/precise/clearwater-homestead/hooks/homestead-cscf-relation-joined' |
3434 | --- telco/precise/clearwater-homestead/hooks/homestead-cscf-relation-joined 1970-01-01 00:00:00 +0000 |
3435 | +++ telco/precise/clearwater-homestead/hooks/homestead-cscf-relation-joined 2014-11-10 14:55:38 +0000 |
3436 | @@ -0,0 +1,4 @@ |
3437 | +#!/bin/bash |
3438 | +set -e |
3439 | + |
3440 | +relation-set public-address=homestead.$(config-get zone) |
3441 | |
3442 | === added file 'telco/precise/clearwater-homestead/hooks/homestead-prov-user-relation-joined' |
3443 | --- telco/precise/clearwater-homestead/hooks/homestead-prov-user-relation-joined 1970-01-01 00:00:00 +0000 |
3444 | +++ telco/precise/clearwater-homestead/hooks/homestead-prov-user-relation-joined 2014-11-10 14:55:38 +0000 |
3445 | @@ -0,0 +1,4 @@ |
3446 | +#!/bin/bash |
3447 | +set -e |
3448 | + |
3449 | +relation-set public-address=homestead.$(config-get zone) |
3450 | |
3451 | === added file 'telco/precise/clearwater-homestead/hooks/homestead-relation-changed' |
3452 | --- telco/precise/clearwater-homestead/hooks/homestead-relation-changed 1970-01-01 00:00:00 +0000 |
3453 | +++ telco/precise/clearwater-homestead/hooks/homestead-relation-changed 2014-11-10 14:55:38 +0000 |
3454 | @@ -0,0 +1,22 @@ |
3455 | +#!/bin/bash |
3456 | +set -e |
3457 | + |
3458 | +# Get the IP address of this unit and the remote unit |
3459 | +peer_ip=$(relation-get private-address) |
3460 | +this_ip=$(unit-get private-address) |
3461 | + |
3462 | +# Get the machine number of this unit and the remote unit. This |
3463 | +# takes the form '<charm name>/<index> |
3464 | +peer_index=$(echo $JUJU_REMOTE_UNIT | cut -d'/' -f2) |
3465 | +this_index=$(echo $JUJU_UNIT_NAME | cut -d'/' -f2) |
3466 | + |
3467 | +# Re-create the node.json files in the data bags |
3468 | +$CHARM_DIR/lib/node_json_clustered_script --ip "$peer_ip" --index "$peer_index" --cluster |
3469 | +$CHARM_DIR/lib/node_json_clustered_script --ip "$this_ip" --index "$this_index" --cluster |
3470 | + |
3471 | +# Re-create the node.json file and re-run chef sole |
3472 | +$CHARM_DIR/lib/node_json_script --cluster |
3473 | +chef-solo -c /home/ubuntu/chef-solo/solo.rb -j /home/ubuntu/chef-solo/node.json |
3474 | + |
3475 | +# Re-create the node.json with the tag. |
3476 | +$CHARM_DIR/lib/node_json_script --cluster --tag |
3477 | |
3478 | === added file 'telco/precise/clearwater-homestead/hooks/homestead-relation-departed' |
3479 | --- telco/precise/clearwater-homestead/hooks/homestead-relation-departed 1970-01-01 00:00:00 +0000 |
3480 | +++ telco/precise/clearwater-homestead/hooks/homestead-relation-departed 2014-11-10 14:55:38 +0000 |
3481 | @@ -0,0 +1,25 @@ |
3482 | +#!/bin/bash |
3483 | +set -e |
3484 | + |
3485 | +# Get the machine number of this unit and the remote unit. This |
3486 | +# takes the form '<charm name>/<index> |
3487 | +peer_index=$(echo $JUJU_REMOTE_UNIT | cut -d'/' -f2) |
3488 | +this_index=$(echo $JUJU_UNIT_NAME | cut -d'/' -f2) |
3489 | + |
3490 | +if [ $this_index -gt $peer_index ] |
3491 | + then |
3492 | + # Remove this node. This relation can be called more than once, so check |
3493 | + # whether the node has already been decommissioned. |
3494 | + decommissioned=$(nodetool netstats | grep DECOMMISSIONED > /dev/null; echo $?) |
3495 | + if [[ $decommissioned == 1* ]] |
3496 | + then |
3497 | + monit stop homestead |
3498 | + monit unmonitor cassandra |
3499 | + nodetool decommission |
3500 | + fi |
3501 | + else |
3502 | + # Remove the node.json in databags that corresponds to the node being removed. |
3503 | + file_name="/home/ubuntu/chef-solo/data_bags/node/"$peer_index".json" |
3504 | + rm $file_name |
3505 | + chef-solo -c /home/ubuntu/chef-solo/solo.rb -j /home/ubuntu/chef-solo/node.json |
3506 | +fi |
3507 | |
3508 | === added file 'telco/precise/clearwater-homestead/hooks/homestead-relation-joined' |
3509 | --- telco/precise/clearwater-homestead/hooks/homestead-relation-joined 1970-01-01 00:00:00 +0000 |
3510 | +++ telco/precise/clearwater-homestead/hooks/homestead-relation-joined 2014-11-10 14:55:38 +0000 |
3511 | @@ -0,0 +1,33 @@ |
3512 | +#!/bin/bash |
3513 | +set -e |
3514 | + |
3515 | +# Get the IP address of this unit and the remote unit |
3516 | +peer_ip=$(relation-get private-address) |
3517 | +this_ip=$(unit-get private-address) |
3518 | + |
3519 | +# Get the machine number of this unit and the remote unit. This |
3520 | +# takes the form '<charm name>/<index> |
3521 | +peer_index=$(echo $JUJU_REMOTE_UNIT | cut -d'/' -f2) |
3522 | +this_index=$(echo $JUJU_UNIT_NAME | cut -d'/' -f2) |
3523 | + |
3524 | +# Re-create the node.json files in the data bags. Mark the new |
3525 | +# node as joining - the new node is the one with the higher index |
3526 | +if [ $this_index -gt $peer_index ] |
3527 | + then |
3528 | + $CHARM_DIR/lib/node_json_clustered_script --ip "$peer_ip" --index "$peer_index" --cluster |
3529 | + $CHARM_DIR/lib/node_json_clustered_script --ip "$this_ip" --index "$this_index" --cluster --joining |
3530 | + else |
3531 | + $CHARM_DIR/lib/node_json_clustered_script --ip "$peer_ip" --index "$peer_index" --cluster --joining |
3532 | + $CHARM_DIR/lib/node_json_clustered_script --ip "$this_ip" --index "$this_index" --cluster |
3533 | +fi |
3534 | + |
3535 | +# Re-create the node.json file and re-run chef solo |
3536 | +$CHARM_DIR/lib/node_json_script --cluster |
3537 | +chef-solo -c /home/ubuntu/chef-solo/solo.rb -j /home/ubuntu/chef-solo/node.json |
3538 | + |
3539 | +# Re-create the node.json with the tag. Only do this for the existing node, not the |
3540 | +# joining node |
3541 | +if [ $this_index -lt $peer_index ] |
3542 | + then |
3543 | + $CHARM_DIR/lib/node_json_script --cluster --tag |
3544 | +fi |
3545 | |
3546 | === added file 'telco/precise/clearwater-homestead/hooks/install' |
3547 | --- telco/precise/clearwater-homestead/hooks/install 1970-01-01 00:00:00 +0000 |
3548 | +++ telco/precise/clearwater-homestead/hooks/install 2014-11-10 14:55:38 +0000 |
3549 | @@ -0,0 +1,37 @@ |
3550 | +#!/bin/bash |
3551 | +set -e |
3552 | + |
3553 | +# This is a big hack. Juju on EC2 returns hostnames rather than IP addresses |
3554 | +# for public-address and private-address. To work-around this, we resolve the |
3555 | +# host names. However, after we've joined to the DNSaaS charm, we can no longer |
3556 | +# resolve these, so add them to /etc/hosts. |
3557 | +if ! grep "# added by clearwater-*/hooks/install" /etc/hosts ; then |
3558 | + private_address=$(unit-get private-address) |
3559 | + public_address=$(unit-get public-address) |
3560 | + private_ip=$($CHARM_DIR/lib/unit-get private-address) |
3561 | + public_ip=$($CHARM_DIR/lib/unit-get public-address) |
3562 | + [ "$private_address" = "$private_ip" ] || echo "$private_ip $private_address # added by clearwater-*/hooks/install" >>/etc/hosts |
3563 | + [ "$public_address" = "$public_ip" ] || echo "$public_ip $public_address $(sed -e 's/\..*$//' <<< $public_address) # added by clearwater-*/hooks/install" >>/etc/hosts |
3564 | + echo "$private_ip homestead-$(cut -d/ -f2 <<< $JUJU_UNIT_NAME).$(config-get zone) # added by clearwater-*/hooks/install" >>/etc/hosts |
3565 | +fi |
3566 | + |
3567 | +# Install chef solo |
3568 | +$CHARM_DIR/lib/chef_solo_install |
3569 | + |
3570 | +this_ip=$(unit-get private-address) |
3571 | +this_index=$(echo $JUJU_UNIT_NAME | cut -d'/' -f2) |
3572 | +$CHARM_DIR/lib/node_json_clustered_script --ip "$this_ip" --index "$this_index" |
3573 | +$CHARM_DIR/lib/node_json_script |
3574 | + |
3575 | +# Update the config file |
3576 | +$CHARM_DIR/lib/config_script |
3577 | + |
3578 | +apt-get update |
3579 | + |
3580 | +# Install the node |
3581 | +chef-solo -c /home/ubuntu/chef-solo/solo.rb -j /home/ubuntu/chef-solo/node.json |
3582 | + |
3583 | +# Expose the correct ports |
3584 | +open-port 22/tcp |
3585 | +open-port 123/udp |
3586 | +open-port 161/udp |
3587 | |
3588 | === added file 'telco/precise/clearwater-homestead/hooks/programmable-multiple-relation-changed' |
3589 | --- telco/precise/clearwater-homestead/hooks/programmable-multiple-relation-changed 1970-01-01 00:00:00 +0000 |
3590 | +++ telco/precise/clearwater-homestead/hooks/programmable-multiple-relation-changed 2014-11-10 14:55:38 +0000 |
3591 | @@ -0,0 +1,24 @@ |
3592 | +#!/bin/bash |
3593 | +set -e |
3594 | + |
3595 | +# Set our DNS requirements |
3596 | +TTL=300 |
3597 | +id=$(cut -d/ -f2 <<< $JUJU_UNIT_NAME) |
3598 | +ip=$($CHARM_DIR/lib/unit-get private-address) |
3599 | +relation-set domain=$(config-get zone) |
3600 | +relation-set resources='homestead '$TTL' IN A '$ip' |
3601 | +homestead-'$id' '$TTL' IN A '$ip |
3602 | + |
3603 | +# Update our DNS server |
3604 | +if [ "$(relation-get public-address)" != "" ] |
3605 | +then |
3606 | + echo nameserver $(relation-get public-address) > /etc/dnsmasq.resolv.conf |
3607 | + grep -v ^RESOLV_CONF= /etc/default/dnsmasq > /tmp/dnsmasq.$$ || juju-log "WARNING RESOLV_CONF not found" |
3608 | + mv /tmp/dnsmasq.$$ /etc/default/dnsmasq |
3609 | + echo RESOLV_CONF=/etc/dnsmasq.resolv.conf >> /etc/default/dnsmasq |
3610 | + service dnsmasq restart |
3611 | +fi |
3612 | + |
3613 | +# Update Clearwater configuration and restart |
3614 | +$CHARM_DIR/lib/config_script programmable-multiple |
3615 | +$CHARM_DIR/lib/restart |
3616 | |
3617 | === added file 'telco/precise/clearwater-homestead/hooks/start' |
3618 | --- telco/precise/clearwater-homestead/hooks/start 1970-01-01 00:00:00 +0000 |
3619 | +++ telco/precise/clearwater-homestead/hooks/start 2014-11-10 14:55:38 +0000 |
3620 | @@ -0,0 +1,18 @@ |
3621 | +#!/bin/bash |
3622 | +# Here put anything that is needed to start the service. |
3623 | +# Note that currently this is run directly after install |
3624 | +# i.e. 'service apache2 start' |
3625 | +set -e |
3626 | + |
3627 | +# This hook needs to be idempotent, so this could be run when homestead is |
3628 | +# already running, when it's running but not monitored by monit, when |
3629 | +# it's stopped but being monitored (so it's about to start), or stopped |
3630 | +# and unmonitored. To cover all these cases, stop monit, start homestead, start |
3631 | +# monit, then finally have monit monitor homestead |
3632 | +service monit stop |
3633 | +service homestead start |
3634 | +service homestead-prov start |
3635 | +service monit start |
3636 | +sleep 1 |
3637 | +monit monitor homestead |
3638 | +monit monitor homestead-prov |
3639 | |
3640 | === added file 'telco/precise/clearwater-homestead/hooks/stop' |
3641 | --- telco/precise/clearwater-homestead/hooks/stop 1970-01-01 00:00:00 +0000 |
3642 | +++ telco/precise/clearwater-homestead/hooks/stop 2014-11-10 14:55:38 +0000 |
3643 | @@ -0,0 +1,13 @@ |
3644 | +#!/bin/bash |
3645 | +# This will be run when the service is being torn down, allowing you to disable |
3646 | +# it in various ways.. |
3647 | +# For example, if your web app uses a text file to signal to the load balancer |
3648 | +# that it is live... you could remove it and sleep for a bit to allow the load |
3649 | +# balancer to stop sending traffic. |
3650 | +# rm /srv/webroot/server-live.txt && sleep 30 |
3651 | +set -e |
3652 | + |
3653 | +# Stop homestead via monit |
3654 | +service monit start |
3655 | +monit stop homestead |
3656 | +monit stop homestead-prov |
3657 | |
3658 | === added file 'telco/precise/clearwater-homestead/hooks/upgrade-charm' |
3659 | --- telco/precise/clearwater-homestead/hooks/upgrade-charm 1970-01-01 00:00:00 +0000 |
3660 | +++ telco/precise/clearwater-homestead/hooks/upgrade-charm 2014-11-10 14:55:38 +0000 |
3661 | @@ -0,0 +1,9 @@ |
3662 | +#!/bin/bash |
3663 | +# This hook is executed each time a charm is upgraded after the new charm |
3664 | +# contents have been unpacked |
3665 | +# Best practice suggests you execute the hooks/install and |
3666 | +# hooks/config-changed to ensure all updates are processed |
3667 | +set -e |
3668 | + |
3669 | +$CHARM_DIR/hooks/install |
3670 | +$CHARM_DIR/hooks/config-changed |
3671 | |
3672 | === added file 'telco/precise/clearwater-homestead/icon.svg' |
3673 | --- telco/precise/clearwater-homestead/icon.svg 1970-01-01 00:00:00 +0000 |
3674 | +++ telco/precise/clearwater-homestead/icon.svg 2014-11-10 14:55:38 +0000 |
3675 | @@ -0,0 +1,407 @@ |
3676 | +<?xml version="1.0" encoding="UTF-8" standalone="no"?> |
3677 | +<!-- Created with Inkscape (http://www.inkscape.org/) --> |
3678 | + |
3679 | +<svg |
3680 | + xmlns:dc="http://purl.org/dc/elements/1.1/" |
3681 | + xmlns:cc="http://creativecommons.org/ns#" |
3682 | + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" |
3683 | + xmlns:svg="http://www.w3.org/2000/svg" |
3684 | + xmlns="http://www.w3.org/2000/svg" |
3685 | + xmlns:xlink="http://www.w3.org/1999/xlink" |
3686 | + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" |
3687 | + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" |
3688 | + width="96" |
3689 | + height="96" |
3690 | + id="svg6517" |
3691 | + version="1.1" |
3692 | + inkscape:version="0.48.2 r9819" |
3693 | + sodipodi:docname="icon.svg"> |
3694 | + <defs |
3695 | + id="defs6519"> |
3696 | + <linearGradient |
3697 | + id="Background"> |
3698 | + <stop |
3699 | + id="stop4178" |
3700 | + offset="0" |
3701 | + style="stop-color:#b8b8b8;stop-opacity:1" /> |
3702 | + <stop |
3703 | + id="stop4180" |
3704 | + offset="1" |
3705 | + style="stop-color:#c9c9c9;stop-opacity:1" /> |
3706 | + </linearGradient> |
3707 | + <filter |
3708 | + style="color-interpolation-filters:sRGB;" |
3709 | + inkscape:label="Inner Shadow" |
3710 | + id="filter1121"> |
3711 | + <feFlood |
3712 | + flood-opacity="0.59999999999999998" |
3713 | + flood-color="rgb(0,0,0)" |
3714 | + result="flood" |
3715 | + id="feFlood1123" /> |
3716 | + <feComposite |
3717 | + in="flood" |
3718 | + in2="SourceGraphic" |
3719 | + operator="out" |
3720 | + result="composite1" |
3721 | + id="feComposite1125" /> |
3722 | + <feGaussianBlur |
3723 | + in="composite1" |
3724 | + stdDeviation="1" |
3725 | + result="blur" |
3726 | + id="feGaussianBlur1127" /> |
3727 | + <feOffset |
3728 | + dx="0" |
3729 | + dy="2" |
3730 | + result="offset" |
3731 | + id="feOffset1129" /> |
3732 | + <feComposite |
3733 | + in="offset" |
3734 | + in2="SourceGraphic" |
3735 | + operator="atop" |
3736 | + result="composite2" |
3737 | + id="feComposite1131" /> |
3738 | + </filter> |
3739 | + <filter |
3740 | + style="color-interpolation-filters:sRGB;" |
3741 | + inkscape:label="Drop Shadow" |
3742 | + id="filter950"> |
3743 | + <feFlood |
3744 | + flood-opacity="0.25" |
3745 | + flood-color="rgb(0,0,0)" |
3746 | + result="flood" |
3747 | + id="feFlood952" /> |
3748 | + <feComposite |
3749 | + in="flood" |
3750 | + in2="SourceGraphic" |
3751 | + operator="in" |
3752 | + result="composite1" |
3753 | + id="feComposite954" /> |
3754 | + <feGaussianBlur |
3755 | + in="composite1" |
3756 | + stdDeviation="1" |
3757 | + result="blur" |
3758 | + id="feGaussianBlur956" /> |
3759 | + <feOffset |
3760 | + dx="0" |
3761 | + dy="1" |
3762 | + result="offset" |
3763 | + id="feOffset958" /> |
3764 | + <feComposite |
3765 | + in="SourceGraphic" |
3766 | + in2="offset" |
3767 | + operator="over" |
3768 | + result="composite2" |
3769 | + id="feComposite960" /> |
3770 | + </filter> |
3771 | + <clipPath |
3772 | + clipPathUnits="userSpaceOnUse" |
3773 | + id="clipPath873"> |
3774 | + <g |
3775 | + transform="matrix(0,-0.66666667,0.66604479,0,-258.25992,677.00001)" |
3776 | + id="g875" |
3777 | + inkscape:label="Layer 1" |
3778 | + style="fill:#ff00ff;fill-opacity:1;stroke:none;display:inline"> |
3779 | + <path |
3780 | + style="fill:#ff00ff;fill-opacity:1;stroke:none;display:inline" |
3781 | + d="m 46.702703,898.22775 50.594594,0 C 138.16216,898.22775 144,904.06497 144,944.92583 l 0,50.73846 c 0,40.86071 -5.83784,46.69791 -46.702703,46.69791 l -50.594594,0 C 5.8378378,1042.3622 0,1036.525 0,995.66429 L 0,944.92583 C 0,904.06497 5.8378378,898.22775 46.702703,898.22775 Z" |
3782 | + id="path877" |
3783 | + inkscape:connector-curvature="0" |
3784 | + sodipodi:nodetypes="sssssssss" /> |
3785 | + </g> |
3786 | + </clipPath> |
3787 | + <filter |
3788 | + inkscape:collect="always" |
3789 | + id="filter891" |
3790 | + inkscape:label="Badge Shadow"> |
3791 | + <feGaussianBlur |
3792 | + inkscape:collect="always" |
3793 | + stdDeviation="0.71999962" |
3794 | + id="feGaussianBlur893" /> |
3795 | + </filter> |
3796 | + </defs> |
3797 | + <sodipodi:namedview |
3798 | + id="base" |
3799 | + pagecolor="#ffffff" |
3800 | + bordercolor="#666666" |
3801 | + borderopacity="1.0" |
3802 | + inkscape:pageopacity="0.0" |
3803 | + inkscape:pageshadow="2" |
3804 | + inkscape:zoom="1.3995495" |
3805 | + inkscape:cx="18.514671" |
3806 | + inkscape:cy="49.018169" |
3807 | + inkscape:document-units="px" |
3808 | + inkscape:current-layer="layer1" |
3809 | + showgrid="true" |
3810 | + fit-margin-top="0" |
3811 | + fit-margin-left="0" |
3812 | + fit-margin-right="0" |
3813 | + fit-margin-bottom="0" |
3814 | + inkscape:window-width="1331" |
3815 | + inkscape:window-height="674" |
3816 | + inkscape:window-x="19" |
3817 | + inkscape:window-y="1" |
3818 | + inkscape:window-maximized="0" |
3819 | + showborder="true" |
3820 | + showguides="true" |
3821 | + inkscape:guide-bbox="true" |
3822 | + inkscape:showpageshadow="false"> |
3823 | + <inkscape:grid |
3824 | + type="xygrid" |
3825 | + id="grid821" /> |
3826 | + <sodipodi:guide |
3827 | + orientation="1,0" |
3828 | + position="16,48" |
3829 | + id="guide823" /> |
3830 | + <sodipodi:guide |
3831 | + orientation="0,1" |
3832 | + position="64,80" |
3833 | + id="guide825" /> |
3834 | + <sodipodi:guide |
3835 | + orientation="1,0" |
3836 | + position="80,40" |
3837 | + id="guide827" /> |
3838 | + <sodipodi:guide |
3839 | + orientation="0,1" |
3840 | + position="64,16" |
3841 | + id="guide829" /> |
3842 | + </sodipodi:namedview> |
3843 | + <metadata |
3844 | + id="metadata6522"> |
3845 | + <rdf:RDF> |
3846 | + <cc:Work |
3847 | + rdf:about=""> |
3848 | + <dc:format>image/svg+xml</dc:format> |
3849 | + <dc:type |
3850 | + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> |
3851 | + <dc:title></dc:title> |
3852 | + </cc:Work> |
3853 | + </rdf:RDF> |
3854 | + </metadata> |
3855 | + <g |
3856 | + inkscape:label="BACKGROUND" |
3857 | + inkscape:groupmode="layer" |
3858 | + id="layer1" |
3859 | + transform="translate(268,-635.29076)" |
3860 | + style="display:inline"> |
3861 | + <path |
3862 | + style="fill:#e6e6e6;fill-opacity:1;stroke:none;display:inline;filter:url(#filter1121)" |
3863 | + d="m -268,700.15563 0,-33.72973 c 0,-27.24324 3.88785,-31.13513 31.10302,-31.13513 l 33.79408,0 c 27.21507,0 31.1029,3.89189 31.1029,31.13513 l 0,33.72973 c 0,27.24325 -3.88783,31.13514 -31.1029,31.13514 l -33.79408,0 C -264.11215,731.29077 -268,727.39888 -268,700.15563 Z" |
3864 | + id="path6455" |
3865 | + inkscape:connector-curvature="0" |
3866 | + sodipodi:nodetypes="sssssssss" /> |
3867 | + <image |
3868 | + y="633.29077" |
3869 | + x="-270" |
3870 | + id="image3169" |
3871 | + xlink:href="data:image/png;base64,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 |
4000 | +AABJRU5ErkJggg== |
4001 | +" |
4002 | + height="96" |
4003 | + width="96" |
4004 | + style="stroke:#000000;stroke-opacity:0.18666669" /> |
4005 | + </g> |
4006 | + <g |
4007 | + inkscape:groupmode="layer" |
4008 | + id="layer3" |
4009 | + inkscape:label="PLACE YOUR PICTOGRAM HERE" |
4010 | + style="display:inline" /> |
4011 | + <g |
4012 | + inkscape:groupmode="layer" |
4013 | + id="layer2" |
4014 | + inkscape:label="BADGE" |
4015 | + style="display:none" |
4016 | + sodipodi:insensitive="true"> |
4017 | + <g |
4018 | + style="display:inline" |
4019 | + transform="translate(-340.00001,-581)" |
4020 | + id="g4394" |
4021 | + clip-path="none"> |
4022 | + <g |
4023 | + id="g855"> |
4024 | + <g |
4025 | + inkscape:groupmode="maskhelper" |
4026 | + id="g870" |
4027 | + clip-path="url(#clipPath873)" |
4028 | + style="opacity:0.6;filter:url(#filter891)"> |
4029 | + <path |
4030 | + transform="matrix(1.4999992,0,0,1.4999992,-29.999795,-237.54282)" |
4031 | + d="m 264,552.36218 c 0,6.62742 -5.37258,12 -12,12 -6.62742,0 -12,-5.37258 -12,-12 0,-6.62741 5.37258,-12 12,-12 6.62742,0 12,5.37259 12,12 z" |
4032 | + sodipodi:ry="12" |
4033 | + sodipodi:rx="12" |
4034 | + sodipodi:cy="552.36218" |
4035 | + sodipodi:cx="252" |
4036 | + id="path844" |
4037 | + style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:4;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" |
4038 | + sodipodi:type="arc" /> |
4039 | + </g> |
4040 | + <g |
4041 | + id="g862"> |
4042 | + <path |
4043 | + sodipodi:type="arc" |
4044 | + style="color:#000000;fill:#f5f5f5;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:4;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" |
4045 | + id="path4398" |
4046 | + sodipodi:cx="252" |
4047 | + sodipodi:cy="552.36218" |
4048 | + sodipodi:rx="12" |
4049 | + sodipodi:ry="12" |
4050 | + d="m 264,552.36218 c 0,6.62742 -5.37258,12 -12,12 -6.62742,0 -12,-5.37258 -12,-12 0,-6.62741 5.37258,-12 12,-12 6.62742,0 12,5.37259 12,12 z" |
4051 | + transform="matrix(1.4999992,0,0,1.4999992,-29.999795,-238.54282)" /> |
4052 | + <path |
4053 | + transform="matrix(1.25,0,0,1.25,33,-100.45273)" |
4054 | + d="m 264,552.36218 c 0,6.62742 -5.37258,12 -12,12 -6.62742,0 -12,-5.37258 -12,-12 0,-6.62741 5.37258,-12 12,-12 6.62742,0 12,5.37259 12,12 z" |
4055 | + sodipodi:ry="12" |
4056 | + sodipodi:rx="12" |
4057 | + sodipodi:cy="552.36218" |
4058 | + sodipodi:cx="252" |
4059 | + id="path4400" |
4060 | + style="color:#000000;fill:#dd4814;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:4;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" |
4061 | + sodipodi:type="arc" /> |
4062 | + <path |
4063 | + sodipodi:type="star" |
4064 | + style="color:#000000;fill:#f5f5f5;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" |
4065 | + id="path4459" |
4066 | + sodipodi:sides="5" |
4067 | + sodipodi:cx="666.19574" |
4068 | + sodipodi:cy="589.50385" |
4069 | + sodipodi:r1="7.2431178" |
4070 | + sodipodi:r2="4.3458705" |
4071 | + sodipodi:arg1="1.0471976" |
4072 | + sodipodi:arg2="1.6755161" |
4073 | + inkscape:flatsided="false" |
4074 | + inkscape:rounded="0.1" |
4075 | + inkscape:randomized="0" |
4076 | + d="m 669.8173,595.77657 c -0.39132,0.22593 -3.62645,-1.90343 -4.07583,-1.95066 -0.44938,-0.0472 -4.05653,1.36297 -4.39232,1.06062 -0.3358,-0.30235 0.68963,-4.03715 0.59569,-4.47913 -0.0939,-0.44198 -2.5498,-3.43681 -2.36602,-3.8496 0.18379,-0.41279 4.05267,-0.59166 4.44398,-0.81759 0.39132,-0.22593 2.48067,-3.48704 2.93005,-3.4398 0.44938,0.0472 1.81505,3.67147 2.15084,3.97382 0.3358,0.30236 4.08294,1.2817 4.17689,1.72369 0.0939,0.44198 -2.9309,2.86076 -3.11469,3.27355 -0.18379,0.41279 0.0427,4.27917 -0.34859,4.5051 z" |
4077 | + transform="matrix(1.511423,-0.16366377,0.16366377,1.511423,-755.37346,-191.93651)" /> |
4078 | + </g> |
4079 | + </g> |
4080 | + </g> |
4081 | + </g> |
4082 | +</svg> |
4083 | |
4084 | === added directory 'telco/precise/clearwater-homestead/lib' |
4085 | === added file 'telco/precise/clearwater-homestead/lib/chef_solo_install' |
4086 | --- telco/precise/clearwater-homestead/lib/chef_solo_install 1970-01-01 00:00:00 +0000 |
4087 | +++ telco/precise/clearwater-homestead/lib/chef_solo_install 2014-11-10 14:55:38 +0000 |
4088 | @@ -0,0 +1,34 @@ |
4089 | +#!/bin/bash |
4090 | + |
4091 | +# This covers installing chef-solo and the Clearwater chef recipes |
4092 | +# Install needed libraries |
4093 | +apt-get -y install git libxml2-dev libxslt1-dev wget curl |
4094 | + |
4095 | +# Install chef |
4096 | +install_sh="http://opscode.com/chef/install.sh" |
4097 | +version_string="-v 11.6.0" |
4098 | +bash <(wget ${install_sh} -O -) ${version_string} |
4099 | + |
4100 | +# Pull down the Clearwater chef recipes |
4101 | +if [ ! -d /home/ubuntu/chef-solo ] |
4102 | +then |
4103 | + mkdir /home/ubuntu/chef-solo |
4104 | + git clone --recursive -b master git://github.com/Metaswitch/chef.git /home/ubuntu/chef-solo |
4105 | +fi |
4106 | + |
4107 | +# Update the chef recipes |
4108 | +cd /home/ubuntu/chef-solo |
4109 | +git pull origin --recurse-submodules master |
4110 | + |
4111 | +# Create the solo.rb file |
4112 | +cat > /home/ubuntu/chef-solo/solo.rb <<EOP |
4113 | +file_cache_path "/var/chef-solo" |
4114 | +cookbook_path [ |
4115 | + "/home/ubuntu/chef-solo/cookbooks" |
4116 | +] |
4117 | +data_bag_path "/home/ubuntu/chef-solo/data_bags" |
4118 | +environment_path "/home/ubuntu/chef-solo/environments" |
4119 | +role_path "/home/ubuntu/chef-solo/roles" |
4120 | +verbose_logging true |
4121 | +log_level :debug |
4122 | +EOP |
4123 | |
4124 | === added file 'telco/precise/clearwater-homestead/lib/config_script' |
4125 | --- telco/precise/clearwater-homestead/lib/config_script 1970-01-01 00:00:00 +0000 |
4126 | +++ telco/precise/clearwater-homestead/lib/config_script 2014-11-10 14:55:38 +0000 |
4127 | @@ -0,0 +1,43 @@ |
4128 | +#!/bin/bash |
4129 | + |
4130 | +relation_name=$1 |
4131 | + |
4132 | +set -e |
4133 | + |
4134 | +# Defaults |
4135 | +sprout_hostname=sprout.$(config-get zone) |
4136 | +hs_hostname=homestead.$(config-get zone):8888 |
4137 | +hs_provisioning_hostname=homestead.$(config-get zone):8889 |
4138 | +xdms_hostname=homer.$(config-get zone):7888 |
4139 | +ralf_hostname= |
4140 | +sas_server=0.0.0.0 |
4141 | +enum_server= |
4142 | + |
4143 | +# Import existing configuration |
4144 | +[ ! -f /etc/clearwater/config ] || . /etc/clearwater/config |
4145 | + |
4146 | +# Apply new configuration |
4147 | +home_domain=$(config-get zone) |
4148 | +sas_server=$(config-get sas) |
4149 | +local_ip=$($CHARM_DIR/lib/unit-get private-address) |
4150 | +public_ip=$($CHARM_DIR/lib/unit-get public-address) |
4151 | +public_hostname=homestead-$(cut -d/ -f2 <<< $JUJU_UNIT_NAME).$(config-get zone) |
4152 | + |
4153 | +# Write configuration back |
4154 | +mkdir -p /etc/clearwater |
4155 | +cat >/etc/clearwater/config <<EOF |
4156 | +# Deployment definitions |
4157 | +home_domain=$home_domain |
4158 | +sprout_hostname=$sprout_hostname |
4159 | +hs_hostname=$hs_hostname |
4160 | +hs_provisioning_hostname=$hs_provisioning_hostname |
4161 | +xdms_hostname=$xdms_hostname |
4162 | +ralf_hostname=$ralf_hostname |
4163 | +sas_server=$sas_server |
4164 | +enum_server=$enum_server |
4165 | + |
4166 | +# Local IP configuration |
4167 | +local_ip=$local_ip |
4168 | +public_ip=$public_ip |
4169 | +public_hostname=$public_hostname |
4170 | +EOF |
4171 | |
4172 | === added file 'telco/precise/clearwater-homestead/lib/node_json_clustered_script' |
4173 | --- telco/precise/clearwater-homestead/lib/node_json_clustered_script 1970-01-01 00:00:00 +0000 |
4174 | +++ telco/precise/clearwater-homestead/lib/node_json_clustered_script 2014-11-10 14:55:38 +0000 |
4175 | @@ -0,0 +1,58 @@ |
4176 | +#!/usr/bin/python |
4177 | +import subprocess |
4178 | +import string |
4179 | +import socket |
4180 | +import os |
4181 | +import sys |
4182 | +import argparse |
4183 | + |
4184 | +# Create the ~/chef-solo/data_bags/node/<index>.json files. |
4185 | +# |
4186 | +# The node.json file contains the machines IP address, the machine ID (a number) |
4187 | +# and the repo server. |
4188 | +# |
4189 | +# If the node is being clustered, the role 'clustered' is added, and if the |
4190 | +# node is joinging the attribute 'joining' is added |
4191 | +# |
4192 | +# The node.json file is templated in lib/node_json_clustered_template. |
4193 | + |
4194 | +parser = argparse.ArgumentParser() |
4195 | + |
4196 | +parser.add_argument('--cluster', action='store_true') |
4197 | +parser.add_argument('--joining', action='store_true') |
4198 | +parser.add_argument('--index', type=int, required=True) |
4199 | +parser.add_argument('--ip', type=str, required=True) |
4200 | + |
4201 | +args = parser.parse_args() |
4202 | + |
4203 | +# Populate the dictionary |
4204 | +d = {} |
4205 | + |
4206 | +d['LOCAL_IP'] = socket.gethostbyname(args.ip) |
4207 | +d['MACHINE_ID'] = str(args.index + 1) |
4208 | +d['REPO'] = subprocess.check_output(["config-get", "repo"]).rstrip() |
4209 | + |
4210 | +if args.cluster: |
4211 | + d['CLUSTER'] = ",\n \"role[clustered]\"" |
4212 | + d['CLUSTERED'] = ", \"clustered\"" |
4213 | +else: |
4214 | + d['CLUSTER'] = "" |
4215 | + d['CLUSTERED'] = "" |
4216 | + |
4217 | +if args.joining: |
4218 | + d['JOINING'] = ",\n \"joining\": true" |
4219 | +else: |
4220 | + d['JOINING'] = "" |
4221 | + |
4222 | +# Open template file |
4223 | +charm_dir = os.environ['CHARM_DIR'] |
4224 | +with open( '%s/lib/node_json_clustered_template' % charm_dir ) as f: |
4225 | + src = string.Template( f.read() ) |
4226 | + |
4227 | +# Make the substitutions |
4228 | +result = src.substitute(d) |
4229 | + |
4230 | +# Write to ~/chef-solo/data_bags/node/<index>.json |
4231 | +node_file = str(args.index + 1) + ".json" |
4232 | +with open('/home/ubuntu/chef-solo/data_bags/node/%s' % node_file, 'w') as f: |
4233 | + f.write(result) |
4234 | |
4235 | === added file 'telco/precise/clearwater-homestead/lib/node_json_clustered_template' |
4236 | --- telco/precise/clearwater-homestead/lib/node_json_clustered_template 1970-01-01 00:00:00 +0000 |
4237 | +++ telco/precise/clearwater-homestead/lib/node_json_clustered_template 2014-11-10 14:55:38 +0000 |
4238 | @@ -0,0 +1,20 @@ |
4239 | +{ |
4240 | + "id": "$LOCAL_IP", |
4241 | + "name": "$LOCAL_IP", |
4242 | + "chef_environment": "_default", |
4243 | + "json_class": "Chef::Node", |
4244 | + "automatic": { |
4245 | + "role": "homestead", |
4246 | + "roles": ["clearwater-infrastructure", "homestead"$CLUSTERED], |
4247 | + "cloud": { |
4248 | + "local_ipv4": "$LOCAL_IP" |
4249 | + }, |
4250 | + "clearwater": { |
4251 | + "index": $MACHINE_ID$JOINING |
4252 | + } |
4253 | + }, |
4254 | + "chef_type": "node", |
4255 | + "run_list": [ |
4256 | + "role[homestead]"$CLUSTER |
4257 | + ] |
4258 | +} |
4259 | |
4260 | === added file 'telco/precise/clearwater-homestead/lib/node_json_script' |
4261 | --- telco/precise/clearwater-homestead/lib/node_json_script 1970-01-01 00:00:00 +0000 |
4262 | +++ telco/precise/clearwater-homestead/lib/node_json_script 2014-11-10 14:55:38 +0000 |
4263 | @@ -0,0 +1,57 @@ |
4264 | +#!/usr/bin/python |
4265 | + |
4266 | +import subprocess |
4267 | +import string |
4268 | +import socket |
4269 | +import os |
4270 | +import argparse |
4271 | + |
4272 | +# Create the ~/chef-solo/node.json file. |
4273 | +# |
4274 | +# The node.json file contains the machines IP address, the machine ID (a number) |
4275 | +# and the repo server. |
4276 | +# |
4277 | +# If the node is being clustered, the role 'clustered' is added, and after |
4278 | +# clustering the tag 'clustered' is added (for homer/homestead) |
4279 | +# |
4280 | +# The node.json file is templated in lib/node_json_template. |
4281 | + |
4282 | +parser = argparse.ArgumentParser() |
4283 | + |
4284 | +parser.add_argument('--cluster', action='store_true') |
4285 | +parser.add_argument('--tag', action='store_true') |
4286 | + |
4287 | +args = parser.parse_args() |
4288 | + |
4289 | +# Populate the dictionary |
4290 | +d = {} |
4291 | + |
4292 | +d['LOCAL_IP'] = socket.gethostbyname(subprocess.check_output(["unit-get", "private-address"]).rstrip()) |
4293 | +d['MACHINE_ID'] = str(int(os.environ['JUJU_UNIT_NAME'].split('/')[1]) + 1) |
4294 | +d['REPO'] = subprocess.check_output(["config-get", "repo"]).rstrip() |
4295 | + |
4296 | +node_file = "/home/ubuntu/chef-solo/node.json" |
4297 | +if args.cluster or (os.path.exists(node_file) and "clustered" in open(node_file).read()): |
4298 | + d['CLUSTER'] = ",\n \"role[clustered]\"" |
4299 | + d['CLUSTERED'] = ", \"clustered\"" |
4300 | + d['TAG'] = "" |
4301 | + |
4302 | + if args.tag or (os.path.exists(node_file) and "tags" in open(node_file).read()): |
4303 | + d['TAG'] = ",\n \"tags\": [\"clustered\"]" |
4304 | + |
4305 | +else: |
4306 | + d['CLUSTER'] = "" |
4307 | + d['CLUSTERED'] = "" |
4308 | + d['TAG'] = "" |
4309 | + |
4310 | +# Open template file |
4311 | +charm_dir = os.environ['CHARM_DIR'] |
4312 | +with open( '%s/lib/node_json_template' % charm_dir ) as f: |
4313 | + src = string.Template( f.read() ) |
4314 | + |
4315 | +# Make the substitutions |
4316 | +result = src.substitute(d) |
4317 | + |
4318 | +# Write to ~/chef-solo/node.json |
4319 | +with open('/home/ubuntu/chef-solo/node.json', 'w') as f: |
4320 | + f.write(result) |
4321 | |
4322 | === added file 'telco/precise/clearwater-homestead/lib/node_json_template' |
4323 | --- telco/precise/clearwater-homestead/lib/node_json_template 1970-01-01 00:00:00 +0000 |
4324 | +++ telco/precise/clearwater-homestead/lib/node_json_template 2014-11-10 14:55:38 +0000 |
4325 | @@ -0,0 +1,17 @@ |
4326 | +{ |
4327 | + "id": "$LOCAL_IP", |
4328 | + "name": "$LOCAL_IP", |
4329 | + "chef_environment": "_default", |
4330 | + "role": "homestead", |
4331 | + "roles": ["clearwater-infrastructure", "homestead"$CLUSTERED], |
4332 | + "cloud": { |
4333 | + "local_ipv4": "$LOCAL_IP" |
4334 | + }, |
4335 | + "clearwater": { |
4336 | + "index": $MACHINE_ID, |
4337 | + "repo_server": "$REPO" |
4338 | + }, |
4339 | + "run_list": [ |
4340 | + "role[homestead]"$CLUSTER |
4341 | + ]$TAG |
4342 | +} |
4343 | |
4344 | === added file 'telco/precise/clearwater-homestead/lib/restart' |
4345 | --- telco/precise/clearwater-homestead/lib/restart 1970-01-01 00:00:00 +0000 |
4346 | +++ telco/precise/clearwater-homestead/lib/restart 2014-11-10 14:55:38 +0000 |
4347 | @@ -0,0 +1,7 @@ |
4348 | +#!/bin/bash |
4349 | +set -e |
4350 | + |
4351 | +# Restart clearwater-infrastructure, and stop homestead/homestead-prov (to be restarted by monit) |
4352 | +service clearwater-infrastructure restart |
4353 | +service homestead stop |
4354 | +service homestead-prov stop |
4355 | |
4356 | === added file 'telco/precise/clearwater-homestead/lib/unit-get' |
4357 | --- telco/precise/clearwater-homestead/lib/unit-get 1970-01-01 00:00:00 +0000 |
4358 | +++ telco/precise/clearwater-homestead/lib/unit-get 2014-11-10 14:55:38 +0000 |
4359 | @@ -0,0 +1,36 @@ |
4360 | +#!/bin/bash |
4361 | +set -ex |
4362 | +onEC2=false |
4363 | +key=$1 |
4364 | +val=$(unit-get $1) |
4365 | + |
4366 | +if [ -f $CHARM_DIR/lib/provider.txt ] |
4367 | +then |
4368 | + PROVIDER=`cat $CHARM_DIR/lib/provider.txt ` |
4369 | +else |
4370 | + #checking dirty ec2 hack will work |
4371 | + wget -q http://169.254.169.254/latest/meta-data/public-ipv4 && onEC2=true |
4372 | + if ( "$onEC2" == true ) |
4373 | + then |
4374 | + echo "EC2" > $CHARM_DIR/lib/provider.txt |
4375 | + else |
4376 | + echo "NOTEC2" > $CHARM_DIR/lib/provider.txt |
4377 | + fi |
4378 | +fi |
4379 | + |
4380 | +if [ "$PROVIDER" == "EC2" ] |
4381 | +then |
4382 | + if [ "$key" = "public-address" ] && [ -n "$(dig +short $val | head -1)" ] |
4383 | + then |
4384 | + val=$(curl http://169.254.169.254/latest/meta-data/public-ipv4) |
4385 | + elif [ "$key" = "private-address" ] |
4386 | + then |
4387 | + val_ip=$(dig +short $val | head -1) |
4388 | + [ -z "$val_ip" ] || val=$val_ip |
4389 | + ##if val_ip is empty getting the system IP |
4390 | + [ -z "$val_ip" ] && val=`ip route | grep src | cut -d " " -f 12` |
4391 | + fi |
4392 | +fi |
4393 | + |
4394 | +echo $val |
4395 | + |
4396 | |
4397 | === added file 'telco/precise/clearwater-homestead/metadata.yaml' |
4398 | --- telco/precise/clearwater-homestead/metadata.yaml 1970-01-01 00:00:00 +0000 |
4399 | +++ telco/precise/clearwater-homestead/metadata.yaml 2014-11-10 14:55:38 +0000 |
4400 | @@ -0,0 +1,18 @@ |
4401 | +name: clearwater-homestead |
4402 | +summary: Homestead charm for Project Clearwater |
4403 | +maintainer: Project Clearwater Maintainers <maintainers@projectclearwater.org> |
4404 | +description: Homestead charm for Project Clearwater |
4405 | +categories: |
4406 | + - misc |
4407 | +subordinate: false |
4408 | +requires: |
4409 | + programmable-multiple: |
4410 | + interface: dns-multi |
4411 | +provides: |
4412 | + homestead-cscf: |
4413 | + interface: homestead-hss-interface |
4414 | + homestead-prov-user: |
4415 | + interface: homestead-prov-interface |
4416 | +peers: |
4417 | + homestead: |
4418 | + interface: homestead-interface |
4419 | |
4420 | === added file 'telco/precise/clearwater-homestead/revision' |
4421 | --- telco/precise/clearwater-homestead/revision 1970-01-01 00:00:00 +0000 |
4422 | +++ telco/precise/clearwater-homestead/revision 2014-11-10 14:55:38 +0000 |
4423 | @@ -0,0 +1,1 @@ |
4424 | +1 |
4425 | |
4426 | === added directory 'telco/precise/clearwater-ralf' |
4427 | === added file 'telco/precise/clearwater-ralf/README.md' |
4428 | --- telco/precise/clearwater-ralf/README.md 1970-01-01 00:00:00 +0000 |
4429 | +++ telco/precise/clearwater-ralf/README.md 2014-11-10 14:55:38 +0000 |
4430 | @@ -0,0 +1,90 @@ |
4431 | +# Overview |
4432 | + |
4433 | +This charm supports deployment and scaling of the Ralf component of a Project Clearwater system. See http://www.projectclearwater.org for more information on Project Clearwater. |
4434 | + |
4435 | +# Usage |
4436 | + |
4437 | +The Ralf service should be deployed as part of a Clearwater system. A Clearwater system can be deployed in a Juju environment by creating a config.yaml file then running the following commands. |
4438 | + |
4439 | + juju deploy --config config.yaml clearwater-route53 |
4440 | + juju deploy --config config.yaml --constraints arch=amd64 clearwater-ellis |
4441 | + juju deploy --config config.yaml --constraints arch=amd64 clearwater-bono |
4442 | + juju deploy --config config.yaml --constraints arch=amd64 clearwater-sprout |
4443 | + juju deploy --config config.yaml --constraints arch=amd64 clearwater-homestead |
4444 | + juju deploy --config config.yaml --constraints arch=amd64 clearwater-homer |
4445 | + juju add-relation clearwater-ellis clearwater-route53:register-ellis |
4446 | + juju add-relation clearwater-bono clearwater-route53:register-bono |
4447 | + juju add-relation clearwater-sprout clearwater-route53:register-sprout |
4448 | + juju add-relation clearwater-homestead clearwater-route53:register-homestead |
4449 | + juju add-relation clearwater-homer clearwater-route53:register-homer |
4450 | + juju expose clearwater-bono |
4451 | + juju expose clearwater-ellis |
4452 | + |
4453 | +The config.yaml configuration file takes the following format. |
4454 | + |
4455 | + clearwater-route53: |
4456 | + zone: <domain> |
4457 | + access_key: <ec2 access key> |
4458 | + secret_key: <ec2 secret access key> |
4459 | + sas: "0.0.0.0" |
4460 | + |
4461 | + clearwater-ellis: |
4462 | + smtp_server: smtp.cw-ngv.com |
4463 | + smtp_username: username |
4464 | + smtp_password: password |
4465 | + email_sender: blackhole@cw-ngv.com<mailto:blackhole@cw-ngv.com> |
4466 | + signup_key: secret |
4467 | + base_number: "6505550000" |
4468 | + number_count: 1000 |
4469 | + repo: http://repo.cw-ngv.com/stable |
4470 | + |
4471 | + clearwater-bono: |
4472 | + turn_workaround: password |
4473 | + repo: http://repo.cw-ngv.com/stable |
4474 | + |
4475 | + clearwater-sprout: |
4476 | + reg_min_expires: 400 |
4477 | + session_max_expires: 900 |
4478 | + repo: http://repo.cw-ngv.com/stable |
4479 | + |
4480 | + clearwater-homestead: |
4481 | + repo: http://repo.cw-ngv.com/stable |
4482 | + |
4483 | + clearwater-homer: |
4484 | + repo: http://repo.cw-ngv.com/stable |
4485 | + |
4486 | +Note that the clearwater-ralf charm can only be deployed on the `amd64` architecture. |
4487 | + |
4488 | +## Scale out Usage |
4489 | + |
4490 | +## Known Limitations and Issues |
4491 | + |
4492 | +The only currently supported DNS service for Clearwater is clearwater-route53 (when deploying in Amazon EC2), so will currently only work on EC2. Additional DNS services will be added for other environments in future. |
4493 | + |
4494 | +clearwater-ralf currently only supports running as a single unit. Clustering support will be released shortly, which will allow units to be added to and removed from a clearwater-ralf deployment using juju add-unit and juju remove-unit commands. |
4495 | + |
4496 | +Note that this charm does not current pass charm proof because its hooks use EC2 APIs directly to obtain the public IP address rather than unit-get public-address. This is to work around what looks like a Juju bug - unit-get public-address on EC2 returns the public hostname of the unit rather than the public IP address. Unfortunately EC2 public hostname are actually split horizon hostnames, so if you attempt to resolve the hostname from within EC2 it actually resolved to a private IP address - it will only resolve to a public address if resolved from outside EC2. |
4497 | + |
4498 | +# Configuration |
4499 | + |
4500 | +Clearwater has a number of configuration fields which are non-defaultable. These are as follows. |
4501 | + |
4502 | +clearwater-route53 |
4503 | + |
4504 | +- `zone:` This must be set to a DNS zone name which is managed by the AWS Route53 service. |
4505 | +- `access_key:` and `secret_key:` These must be set to the AWS access key and secret key of the AWS account which owns the DNS zone name. |
4506 | + |
4507 | +clearwater-ellis |
4508 | + |
4509 | +- `signup_key:` This is used as a signup key on the Ellis self-provisioning portal, so should be set to a unique string for each installation. |
4510 | +- `base_number:` and `number_count:` These define the telephone number range assigned to the Clearwater system. |
4511 | + |
4512 | +# Contact Information |
4513 | + |
4514 | +## Upstream Project Name |
4515 | + |
4516 | +See http:www.projectclearwater.org and https://github.com/Metaswitch/clearwater-docs/wiki for information about clearwater. |
4517 | + |
4518 | +Clearwater source code and issue list can be found at https://github.com/Metaswitch/. |
4519 | + |
4520 | +The Clearwater mailing list is at lists.projectclearwater.org. |
4521 | |
4522 | === added file 'telco/precise/clearwater-ralf/config.yaml' |
4523 | --- telco/precise/clearwater-ralf/config.yaml 1970-01-01 00:00:00 +0000 |
4524 | +++ telco/precise/clearwater-ralf/config.yaml 2014-11-10 14:55:38 +0000 |
4525 | @@ -0,0 +1,12 @@ |
4526 | +options: |
4527 | + zone: |
4528 | + description: The DNS root zone for this service |
4529 | + type: string |
4530 | + sas: |
4531 | + default: "" |
4532 | + description: The location of the SAS server |
4533 | + type: string |
4534 | + repo: |
4535 | + default: http://repo.cw-ngv.com/stable |
4536 | + description: The location of the repo server |
4537 | + type: string |
4538 | |
4539 | === added file 'telco/precise/clearwater-ralf/copyright' |
4540 | --- telco/precise/clearwater-ralf/copyright 1970-01-01 00:00:00 +0000 |
4541 | +++ telco/precise/clearwater-ralf/copyright 2014-11-10 14:55:38 +0000 |
4542 | @@ -0,0 +1,31 @@ |
4543 | +Project Clearwater - IMS in the Cloud |
4544 | +Copyright (C) 2013 Metaswitch Networks Ltd |
4545 | + |
4546 | +This program is free software: you can redistribute it and/or modify it |
4547 | +under the terms of the GNU General Public License as published by the |
4548 | +Free Software Foundation, either version 3 of the License, or (at your |
4549 | +option) any later version, along with the "Special Exception" for use of |
4550 | +the program along with SSL, set forth below. This program is distributed |
4551 | +in the hope that it will be useful, but WITHOUT ANY WARRANTY; |
4552 | +without even the implied warranty of MERCHANTABILITY or FITNESS FOR |
4553 | +A PARTICULAR PURPOSE. See the GNU General Public License for more |
4554 | +details. You should have received a copy of the GNU General Public |
4555 | +License along with this program. If not, see |
4556 | +<http://www.gnu.org/licenses/>. |
4557 | + |
4558 | +The author can be reached by email at clearwater@metaswitch.com or by |
4559 | +post at Metaswitch Networks Ltd, 100 Church St, Enfield EN2 6BQ, UK |
4560 | + |
4561 | +Special Exception |
4562 | +Metaswitch Networks Ltd grants you permission to copy, modify, |
4563 | +propagate, and distribute a work formed by combining OpenSSL with The |
4564 | +Software, or a work derivative of such a combination, even if such |
4565 | +copying, modification, propagation, or distribution would otherwise |
4566 | +violate the terms of the GPL. You must comply with the GPL in all |
4567 | +respects for all of the code used other than OpenSSL. |
4568 | +"OpenSSL" means OpenSSL toolkit software distributed by the OpenSSL |
4569 | +Project and licensed under the OpenSSL Licenses, or a work based on such |
4570 | +software and licensed under the OpenSSL Licenses. |
4571 | +"OpenSSL Licenses" means the OpenSSL License and Original SSLeay License |
4572 | +under which the OpenSSL Project distributes the OpenSSL toolkit software, |
4573 | +as those licenses appear in the file LICENSE-OPENSSL. |
4574 | |
4575 | === added directory 'telco/precise/clearwater-ralf/hooks' |
4576 | === added file 'telco/precise/clearwater-ralf/hooks/config-changed' |
4577 | --- telco/precise/clearwater-ralf/hooks/config-changed 1970-01-01 00:00:00 +0000 |
4578 | +++ telco/precise/clearwater-ralf/hooks/config-changed 2014-11-10 14:55:38 +0000 |
4579 | @@ -0,0 +1,9 @@ |
4580 | +#!/bin/bash |
4581 | +set -e |
4582 | + |
4583 | +# Update the /etc/clearwater/config file, the node.json, and re-run |
4584 | +# chef-solo |
4585 | +$CHARM_DIR/lib/config_script |
4586 | +$CHARM_DIR/lib/node_json_script |
4587 | +chef-solo -c /home/ubuntu/chef-solo/solo.rb -j /home/ubuntu/chef-solo/node.json |
4588 | +$CHARM_DIR/lib/restart |
4589 | |
4590 | === added file 'telco/precise/clearwater-ralf/hooks/install' |
4591 | --- telco/precise/clearwater-ralf/hooks/install 1970-01-01 00:00:00 +0000 |
4592 | +++ telco/precise/clearwater-ralf/hooks/install 2014-11-10 14:55:38 +0000 |
4593 | @@ -0,0 +1,37 @@ |
4594 | +#!/bin/bash |
4595 | +set -e |
4596 | + |
4597 | +# This is a big hack. Juju on EC2 returns hostnames rather than IP addresses |
4598 | +# for public-address and private-address. To work-around this, we resolve the |
4599 | +# host names. However, after we've joined to the DNSaaS charm, we can no longer |
4600 | +# resolve these, so add them to /etc/hosts. |
4601 | +if ! grep "# added by clearwater-*/hooks/install" /etc/hosts ; then |
4602 | + private_address=$(unit-get private-address) |
4603 | + public_address=$(unit-get public-address) |
4604 | + private_ip=$($CHARM_DIR/lib/unit-get private-address) |
4605 | + public_ip=$($CHARM_DIR/lib/unit-get public-address) |
4606 | + [ "$private_address" = "$private_ip" ] || echo "$private_ip $private_address # added by clearwater-*/hooks/install" >>/etc/hosts |
4607 | + [ "$public_address" = "$public_ip" ] || echo "$public_ip $public_address $(sed -e 's/\..*$//' <<< $public_address) # added by clearwater-*/hooks/install" >>/etc/hosts |
4608 | + echo "$private_ip ralf-$(cut -d/ -f2 <<< $JUJU_UNIT_NAME).$(config-get zone) # added by clearwater-*/hooks/install" >>/etc/hosts |
4609 | +fi |
4610 | + |
4611 | +# Install chef solo |
4612 | +$CHARM_DIR/lib/chef_solo_install |
4613 | + |
4614 | +this_ip=`unit-get private-address` |
4615 | +this_index=$(echo $JUJU_UNIT_NAME | cut -d'/' -f2) |
4616 | +$CHARM_DIR/lib/node_json_clustered_script --ip "$this_ip" --index "$this_index" |
4617 | +$CHARM_DIR/lib/node_json_script |
4618 | + |
4619 | +# Update the config file |
4620 | +$CHARM_DIR/lib/config_script |
4621 | + |
4622 | +apt-get update |
4623 | + |
4624 | +# Install the node |
4625 | +chef-solo -c /home/ubuntu/chef-solo/solo.rb -j /home/ubuntu/chef-solo/node.json |
4626 | + |
4627 | +# Expose the correct ports |
4628 | +open-port 22/tcp |
4629 | +open-port 123/udp |
4630 | +open-port 161/udp |
4631 | |
4632 | === added file 'telco/precise/clearwater-ralf/hooks/programmable-multiple-relation-changed' |
4633 | --- telco/precise/clearwater-ralf/hooks/programmable-multiple-relation-changed 1970-01-01 00:00:00 +0000 |
4634 | +++ telco/precise/clearwater-ralf/hooks/programmable-multiple-relation-changed 2014-11-10 14:55:38 +0000 |
4635 | @@ -0,0 +1,24 @@ |
4636 | +#!/bin/bash |
4637 | +set -e |
4638 | + |
4639 | +# Set our DNS requirements |
4640 | +TTL=300 |
4641 | +id=$(cut -d/ -f2 <<< $JUJU_UNIT_NAME) |
4642 | +ip=$($CHARM_DIR/lib/unit-get private-address) |
4643 | +relation-set domain=$(config-get zone) |
4644 | +relation-set resources='ralf '$TTL' IN A '$ip' |
4645 | +ralf-'$id' '$TTL' IN A '$ip |
4646 | + |
4647 | +# Update our DNS server |
4648 | +if [ "$(relation-get public-address)" != "" ] |
4649 | +then |
4650 | + echo nameserver $(relation-get public-address) > /etc/dnsmasq.resolv.conf |
4651 | + grep -v ^RESOLV_CONF= /etc/default/dnsmasq > /tmp/dnsmasq.$$ || juju-log "WARNING RESOLV_CONF not found" |
4652 | + mv /tmp/dnsmasq.$$ /etc/default/dnsmasq |
4653 | + echo RESOLV_CONF=/etc/dnsmasq.resolv.conf >> /etc/default/dnsmasq |
4654 | + service dnsmasq restart |
4655 | +fi |
4656 | + |
4657 | +# Update Clearwater configuration and restart |
4658 | +$CHARM_DIR/lib/config_script programmable-multiple |
4659 | +$CHARM_DIR/lib/restart |
4660 | |
4661 | === added file 'telco/precise/clearwater-ralf/hooks/ralf-cscf-relation-joined' |
4662 | --- telco/precise/clearwater-ralf/hooks/ralf-cscf-relation-joined 1970-01-01 00:00:00 +0000 |
4663 | +++ telco/precise/clearwater-ralf/hooks/ralf-cscf-relation-joined 2014-11-10 14:55:38 +0000 |
4664 | @@ -0,0 +1,4 @@ |
4665 | +#!/bin/bash |
4666 | +set -e |
4667 | + |
4668 | +relation-set public-address=ralf.$(config-get zone) |
4669 | |
4670 | === added file 'telco/precise/clearwater-ralf/hooks/start' |
4671 | --- telco/precise/clearwater-ralf/hooks/start 1970-01-01 00:00:00 +0000 |
4672 | +++ telco/precise/clearwater-ralf/hooks/start 2014-11-10 14:55:38 +0000 |
4673 | @@ -0,0 +1,16 @@ |
4674 | +#!/bin/bash |
4675 | +# Here put anything that is needed to start the service. |
4676 | +# Note that currently this is run directly after install |
4677 | +# i.e. 'service apache2 start' |
4678 | +set -e |
4679 | + |
4680 | +# This hook needs to be idempotent, so this could be run when ralf is |
4681 | +# already running, when it's running but not monitored by monit, when |
4682 | +# it's stopped but being monitored (so it's about to start), or stopped |
4683 | +# and unmonitored. To cover all these cases, stop monit, start ralf, start |
4684 | +# monit, then finally have monit monitor ralf |
4685 | +service monit stop |
4686 | +service ralf start |
4687 | +service monit start |
4688 | +sleep 1 |
4689 | +monit monitor ralf |
4690 | |
4691 | === added file 'telco/precise/clearwater-ralf/hooks/stop' |
4692 | --- telco/precise/clearwater-ralf/hooks/stop 1970-01-01 00:00:00 +0000 |
4693 | +++ telco/precise/clearwater-ralf/hooks/stop 2014-11-10 14:55:38 +0000 |
4694 | @@ -0,0 +1,12 @@ |
4695 | +#!/bin/bash |
4696 | +# This will be run when the service is being torn down, allowing you to disable |
4697 | +# it in various ways.. |
4698 | +# For example, if your web app uses a text file to signal to the load balancer |
4699 | +# that it is live... you could remove it and sleep for a bit to allow the load |
4700 | +# balancer to stop sending traffic. |
4701 | +# rm /srv/webroot/server-live.txt && sleep 30 |
4702 | +set -e |
4703 | + |
4704 | +# Stop ralf via monit |
4705 | +sudo service monit start |
4706 | +sudo monit stop ralf |
4707 | |
4708 | === added file 'telco/precise/clearwater-ralf/hooks/upgrade-charm' |
4709 | --- telco/precise/clearwater-ralf/hooks/upgrade-charm 1970-01-01 00:00:00 +0000 |
4710 | +++ telco/precise/clearwater-ralf/hooks/upgrade-charm 2014-11-10 14:55:38 +0000 |
4711 | @@ -0,0 +1,9 @@ |
4712 | +#!/bin/bash |
4713 | +# This hook is executed each time a charm is upgraded after the new charm |
4714 | +# contents have been unpacked |
4715 | +# Best practice suggests you execute the hooks/install and |
4716 | +# hooks/config-changed to ensure all updates are processed |
4717 | +set -e |
4718 | + |
4719 | +$CHARM_DIR/hooks/install |
4720 | +$CHARM_DIR/hooks/config-changed |
4721 | |
4722 | === added file 'telco/precise/clearwater-ralf/icon.svg' |
4723 | --- telco/precise/clearwater-ralf/icon.svg 1970-01-01 00:00:00 +0000 |
4724 | +++ telco/precise/clearwater-ralf/icon.svg 2014-11-10 14:55:38 +0000 |
4725 | @@ -0,0 +1,407 @@ |
4726 | +<?xml version="1.0" encoding="UTF-8" standalone="no"?> |
4727 | +<!-- Created with Inkscape (http://www.inkscape.org/) --> |
4728 | + |
4729 | +<svg |
4730 | + xmlns:dc="http://purl.org/dc/elements/1.1/" |
4731 | + xmlns:cc="http://creativecommons.org/ns#" |
4732 | + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" |
4733 | + xmlns:svg="http://www.w3.org/2000/svg" |
4734 | + xmlns="http://www.w3.org/2000/svg" |
4735 | + xmlns:xlink="http://www.w3.org/1999/xlink" |
4736 | + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" |
4737 | + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" |
4738 | + width="96" |
4739 | + height="96" |
4740 | + id="svg6517" |
4741 | + version="1.1" |
4742 | + inkscape:version="0.48.2 r9819" |
4743 | + sodipodi:docname="icon.svg"> |
4744 | + <defs |
4745 | + id="defs6519"> |
4746 | + <linearGradient |
4747 | + id="Background"> |
4748 | + <stop |
4749 | + id="stop4178" |
4750 | + offset="0" |
4751 | + style="stop-color:#b8b8b8;stop-opacity:1" /> |
4752 | + <stop |
4753 | + id="stop4180" |
4754 | + offset="1" |
4755 | + style="stop-color:#c9c9c9;stop-opacity:1" /> |
4756 | + </linearGradient> |
4757 | + <filter |
4758 | + style="color-interpolation-filters:sRGB;" |
4759 | + inkscape:label="Inner Shadow" |
4760 | + id="filter1121"> |
4761 | + <feFlood |
4762 | + flood-opacity="0.59999999999999998" |
4763 | + flood-color="rgb(0,0,0)" |
4764 | + result="flood" |
4765 | + id="feFlood1123" /> |
4766 | + <feComposite |
4767 | + in="flood" |
4768 | + in2="SourceGraphic" |
4769 | + operator="out" |
4770 | + result="composite1" |
4771 | + id="feComposite1125" /> |
4772 | + <feGaussianBlur |
4773 | + in="composite1" |
4774 | + stdDeviation="1" |
4775 | + result="blur" |
4776 | + id="feGaussianBlur1127" /> |
4777 | + <feOffset |
4778 | + dx="0" |
4779 | + dy="2" |
4780 | + result="offset" |
4781 | + id="feOffset1129" /> |
4782 | + <feComposite |
4783 | + in="offset" |
4784 | + in2="SourceGraphic" |
4785 | + operator="atop" |
4786 | + result="composite2" |
4787 | + id="feComposite1131" /> |
4788 | + </filter> |
4789 | + <filter |
4790 | + style="color-interpolation-filters:sRGB;" |
4791 | + inkscape:label="Drop Shadow" |
4792 | + id="filter950"> |
4793 | + <feFlood |
4794 | + flood-opacity="0.25" |
4795 | + flood-color="rgb(0,0,0)" |
4796 | + result="flood" |
4797 | + id="feFlood952" /> |
4798 | + <feComposite |
4799 | + in="flood" |
4800 | + in2="SourceGraphic" |
4801 | + operator="in" |
4802 | + result="composite1" |
4803 | + id="feComposite954" /> |
4804 | + <feGaussianBlur |
4805 | + in="composite1" |
4806 | + stdDeviation="1" |
4807 | + result="blur" |
4808 | + id="feGaussianBlur956" /> |
4809 | + <feOffset |
4810 | + dx="0" |
4811 | + dy="1" |
4812 | + result="offset" |
4813 | + id="feOffset958" /> |
4814 | + <feComposite |
4815 | + in="SourceGraphic" |
4816 | + in2="offset" |
4817 | + operator="over" |
4818 | + result="composite2" |
4819 | + id="feComposite960" /> |
4820 | + </filter> |
4821 | + <clipPath |
4822 | + clipPathUnits="userSpaceOnUse" |
4823 | + id="clipPath873"> |
4824 | + <g |
4825 | + transform="matrix(0,-0.66666667,0.66604479,0,-258.25992,677.00001)" |
4826 | + id="g875" |
4827 | + inkscape:label="Layer 1" |
4828 | + style="fill:#ff00ff;fill-opacity:1;stroke:none;display:inline"> |
4829 | + <path |
4830 | + style="fill:#ff00ff;fill-opacity:1;stroke:none;display:inline" |
4831 | + d="m 46.702703,898.22775 50.594594,0 C 138.16216,898.22775 144,904.06497 144,944.92583 l 0,50.73846 c 0,40.86071 -5.83784,46.69791 -46.702703,46.69791 l -50.594594,0 C 5.8378378,1042.3622 0,1036.525 0,995.66429 L 0,944.92583 C 0,904.06497 5.8378378,898.22775 46.702703,898.22775 Z" |
4832 | + id="path877" |
4833 | + inkscape:connector-curvature="0" |
4834 | + sodipodi:nodetypes="sssssssss" /> |
4835 | + </g> |
4836 | + </clipPath> |
4837 | + <filter |
4838 | + inkscape:collect="always" |
4839 | + id="filter891" |
4840 | + inkscape:label="Badge Shadow"> |
4841 | + <feGaussianBlur |
4842 | + inkscape:collect="always" |
4843 | + stdDeviation="0.71999962" |
4844 | + id="feGaussianBlur893" /> |
4845 | + </filter> |
4846 | + </defs> |
4847 | + <sodipodi:namedview |
4848 | + id="base" |
4849 | + pagecolor="#ffffff" |
4850 | + bordercolor="#666666" |
4851 | + borderopacity="1.0" |
4852 | + inkscape:pageopacity="0.0" |
4853 | + inkscape:pageshadow="2" |
4854 | + inkscape:zoom="1.3995495" |
4855 | + inkscape:cx="18.514671" |
4856 | + inkscape:cy="49.018169" |
4857 | + inkscape:document-units="px" |
4858 | + inkscape:current-layer="layer1" |
4859 | + showgrid="true" |
4860 | + fit-margin-top="0" |
4861 | + fit-margin-left="0" |
4862 | + fit-margin-right="0" |
4863 | + fit-margin-bottom="0" |
4864 | + inkscape:window-width="1331" |
4865 | + inkscape:window-height="674" |
4866 | + inkscape:window-x="19" |
4867 | + inkscape:window-y="1" |
4868 | + inkscape:window-maximized="0" |
4869 | + showborder="true" |
4870 | + showguides="true" |
4871 | + inkscape:guide-bbox="true" |
4872 | + inkscape:showpageshadow="false"> |
4873 | + <inkscape:grid |
4874 | + type="xygrid" |
4875 | + id="grid821" /> |
4876 | + <sodipodi:guide |
4877 | + orientation="1,0" |
4878 | + position="16,48" |
4879 | + id="guide823" /> |
4880 | + <sodipodi:guide |
4881 | + orientation="0,1" |
4882 | + position="64,80" |
4883 | + id="guide825" /> |
4884 | + <sodipodi:guide |
4885 | + orientation="1,0" |
4886 | + position="80,40" |
4887 | + id="guide827" /> |
4888 | + <sodipodi:guide |
4889 | + orientation="0,1" |
4890 | + position="64,16" |
4891 | + id="guide829" /> |
4892 | + </sodipodi:namedview> |
4893 | + <metadata |
4894 | + id="metadata6522"> |
4895 | + <rdf:RDF> |
4896 | + <cc:Work |
4897 | + rdf:about=""> |
4898 | + <dc:format>image/svg+xml</dc:format> |
4899 | + <dc:type |
4900 | + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> |
4901 | + <dc:title></dc:title> |
4902 | + </cc:Work> |
4903 | + </rdf:RDF> |
4904 | + </metadata> |
4905 | + <g |
4906 | + inkscape:label="BACKGROUND" |
4907 | + inkscape:groupmode="layer" |
4908 | + id="layer1" |
4909 | + transform="translate(268,-635.29076)" |
4910 | + style="display:inline"> |
4911 | + <path |
4912 | + style="fill:#e6e6e6;fill-opacity:1;stroke:none;display:inline;filter:url(#filter1121)" |
4913 | + d="m -268,700.15563 0,-33.72973 c 0,-27.24324 3.88785,-31.13513 31.10302,-31.13513 l 33.79408,0 c 27.21507,0 31.1029,3.89189 31.1029,31.13513 l 0,33.72973 c 0,27.24325 -3.88783,31.13514 -31.1029,31.13514 l -33.79408,0 C -264.11215,731.29077 -268,727.39888 -268,700.15563 Z" |
4914 | + id="path6455" |
4915 | + inkscape:connector-curvature="0" |
4916 | + sodipodi:nodetypes="sssssssss" /> |
4917 | + <image |
4918 | + y="633.29077" |
4919 | + x="-270" |
4920 | + id="image3169" |
4921 | + xlink:href="data:image/png;base64,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 |
The diff has been truncated for viewing.
Already merged