cluster 0.6.5 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,11 @@
1
+ NameVirtualHost *:80
2
+ Listen 80
3
+
4
+ # Load balancer requests
5
+ NameVirtualHost *:3080
6
+ Listen 3080
7
+
8
+ <IfModule mod_ssl.c>
9
+ Listen 443
10
+ Listen 3443
11
+ </IfModule>
@@ -0,0 +1,11 @@
1
+ <VirtualHost *:80>
2
+ ServerName checkpointstaging.com
3
+ ServerAlias *
4
+ RewriteEngine on
5
+ RewriteLogLevel 1
6
+ RewriteLog /var/log/apache2/rewrite.log
7
+
8
+ RewriteCond %{HTTP_HOST} .*
9
+ RewriteRule /(.*) http://www.checkpointevents.com/$1 [R=301,L]
10
+ </VirtualHost>
11
+
@@ -0,0 +1,29 @@
1
+ <VirtualHost *:3080>
2
+ ServerAdmin system@checkpoint.com
3
+ ServerName www.checkpointstaging.com
4
+ ServerAlias *.checkpointstaging.com
5
+
6
+ DocumentRoot /home/staging/checkpoint/current/public
7
+ <Directory />
8
+ Options FollowSymLinks
9
+ AllowOverride None
10
+ </Directory>
11
+ <Directory /home/staging/checkpoint/current/public>
12
+ Options Indexes FollowSymLinks MultiViews
13
+ AllowOverride All
14
+ Order allow,deny
15
+ allow from all
16
+ </Directory>
17
+
18
+ ErrorDocument 503 /system/maintenance.html
19
+ RewriteEngine On
20
+ RewriteCond %{REQUEST_URI} !.(css|gif|jpg|png)$
21
+ RewriteCond %{DOCUMENT_ROOT}/system/maintenance.html -f
22
+ RewriteCond %{SCRIPT_FILENAME} !maintenance.html
23
+ RewriteRule ^.*$ - [redirect=503,last]
24
+
25
+ LogLevel warn
26
+
27
+ ErrorLog /home/staging/checkpoint/shared/log/balanced_error.log
28
+ CustomLog /home/staging/checkpoint/shared/log/balanced_access.log combined
29
+ </VirtualHost>
@@ -0,0 +1,76 @@
1
+ class ApacheConfig < God::Behavior
2
+ def before_start
3
+ service = self.watch.name[/^(\w+)-/, 1]
4
+ web_dir = File.join(MONITOR_PATH, service)
5
+ apache_file = File.join(web_dir, 'apache.tgz')
6
+ unless File.exists? apache_file
7
+ FileUtils.mkdir_p web_dir unless File.exists? web_dir
8
+ CLUSTER.retrieve service, 'apache.tgz', apache_file
9
+ end
10
+
11
+ if File.exists? apache_file
12
+ system "cd #{web_dir} && tar xzf #{apache_file} && /bin/bash config.sh"
13
+ end
14
+ end
15
+
16
+ def after_start
17
+ CLUSTER.instance_state 'running'
18
+ end
19
+
20
+ def before_restart
21
+ CLUSTER.instance_state 'stopped'
22
+ end
23
+ alias :before_stop :before_restart
24
+ end
25
+
26
+ God.watch do |w|
27
+ w.name = 'web-balanced'
28
+ w.interval = 60.seconds
29
+ w.start = 'apache2ctl start'
30
+ w.stop = 'apache2ctl stop'
31
+ w.restart = 'apache2ctl graceful'
32
+ w.start_grace = 10.seconds
33
+ w.pid_file = '/var/run/apache2.pid'
34
+
35
+ w.behavior(:clean_pid_file)
36
+ w.behavior(:user_service)
37
+ w.behavior(:apache_config)
38
+
39
+ w.transition(:init, {true => :up, false => :start}) {|on|
40
+ on.condition(:process_running) {|c|
41
+ c.running = true
42
+ }
43
+ }
44
+
45
+ w.transition([:start, :restart], :up) {|on|
46
+ on.condition(:process_running) {|c|
47
+ c.running = true
48
+ c.notify = 'simon'
49
+ }
50
+
51
+ on.condition(:tries) {|c|
52
+ c.times = 5
53
+ c.transition = :start
54
+ }
55
+ }
56
+
57
+ w.transition(:up, :start) {|on|
58
+ on.condition(:process_exits) {|c|
59
+ c.notify = 'simon'
60
+ }
61
+ }
62
+
63
+
64
+ w.lifecycle {|on|
65
+ on.condition(:flapping) {|c|
66
+ c.to_state = [:start, :restart]
67
+ c.times = 5
68
+ c.within = 5.minutes
69
+ c.transition = :unmonitored
70
+ c.retry_in = 10.minutes
71
+ c.retry_times = 5
72
+ c.retry_within = 2.hours
73
+ }
74
+ }
75
+ end
76
+
@@ -0,0 +1,42 @@
1
+ #!/bin/bash
2
+
3
+ if ! id staging 2>/dev/null 1>&2; then
4
+ adduser --disabled-password --gecos 'staging' staging
5
+ mkdir -m 700 ~staging/.ssh
6
+ touch ~staging/.ssh/authorized_keys
7
+ chmod 600 ~staging/.ssh/authorized_keys
8
+ touch ~staging/.ssh/config
9
+ chmod 600 ~staging/.ssh/config
10
+
11
+ cat >>~staging/.ssh/authorized_keys <<END_OF_KEYS
12
+ ssh-dss AAAAB3NzaC1kc3MAAACBANcFLeySRpmVji+g9KcHBaedFE5SOLgkSQIKbeVjOwzGC75AIM5gY6gjOu0Kj4BYhlxUwOWkOEYgZwqu15qxtKPCnYQST3jqQnbfwN8UOC4y7XH/4G0gdOD9taFx4PpW0H+zvYs7smBb1qG8NnlUH1tyCGdNNmZLxn2b84R5pDcVAAAAFQDqV2zGPugaRR7gslhxyxrZnIpE9QAAAIAtEViFMBq8h4TXXbdeYR3EhR+zcUHzRz/yB3N7mdo8C1a5apHAnzwX7RPzvkskThU2Idj3ZxUyrTbd5WpBfk/OIwF+hvM3/Uw6XJLNaDSTd0t0HOJxE+SJuHwfOwNtI+J2IXwckUJ2laOTwjOc0YzIR1Gnf50gcz67R07H4qidtQAAAIANQsT7jT68TemlxBjjK22YDRxdRC5M2VuTAT6dDp9JL7KB6B1b3kU7EjiG9gk9oDUGWQiE5sEtHaFjgeViSwQhtaQ/Rqx8EmNG5W9lNgVcWtPmxqMJtOaaNggE+znE1xanY+fDtLqbAkbExZ8vypyUuMXvsgl7AiSSEMnpmX1Itw== simon@s345
13
+ ssh-dss AAAAB3NzaC1kc3MAAACBAIxHXUznZLryPsnK0YCa7W4HM3wSqpCV8MwIBYd4kl/qQzC2VlyX0mFhVFC3esLWyyWEAFcKyI3FlzI70Z4ppnukyL/2MonVTqto3RPoTQs8Ty3y10MYo+9UE65U6Rv2yHfx551vobJgHgVS7tmupCcemZYscgFCeUMgLOz+5tylAAAAFQC9NTxN10PfjndbLDaPYrpC3h8g9wAAAIBnq0vCE9FqjukltP85M5qiawS5sEXArB0HRP4MDpwk4xDdrpiEwa2qYSOiwN1brsxMGrVHe3HetPeApmZZV5vysV1sLp3CQAlGHoWJ3GjOR3lDYpTymlbZOzd62mKp7FxPVtNszbDiABJckTLUV95TM2OB2hn/mWqpzwJBh9GBrAAAAIAmFDbo3aCg3WcDFnBzI72aHBQ4532xEMrlASABJ9FwkNPCtr2VZRLR4vxo9Oyn21+z4SmFocJN0DcKgj1APeS8en/frAFG/UJr/4KdV/LAnTBz8qd6QnbxdUYxizVoYKI1Pl76axbPQCVe+dthfn0x19quOMc/ofHA7I0GGIojJw== nick@Sparta-MB.local
14
+ ssh-dss AAAAB3NzaC1kc3MAAACBAO/mj7W3wUuDAhvicx+C2MkAFJGFZvaPrBA+nbFbK240HDZcmS8sA9Ww3VwivKzQ4CwrpdMY3dPg0TM9H2USQvfMsis4bStDwLy4CFIvBEGoviVVdu8gBzVN+YGajhv7yZqJ9cpOSnUXUzCBh4ddhLtni4IQ2lEZyKdlUzmA77pZAAAAFQDSdiFXpCu3CrAm0zivwA68DcDj5wAAAIEA557V4w7vNgmZvkb3hnQui5IkVTpN+b2PKCzvA9clbJQvKBpivS7k5jpx+GeoAYA+pYNLppMf9zpyPLrJjJhJ3Y3qS3p5iFCed2aJRwxhd5lYIyEedZ2uW6tchVRPoXkT1/tmXBKUNnue8YHslhqXOy8nHyHd7dH7BXLblnQknRcAAACBANzpDp5oXEG7w40tCYd7dtJfDLT8cIXyA75yX2MtkHjpBylT+lP/c1P9pmPytEtBfoQCvwFKjVA7fVGTkF1QfMVzcJsB1wh6jUyS287JtbS4D2O/yEP6FioG5Qva8GdJ29Oy49+LIHgamc93ZaJPub+wvFYivNzQsomjdXtiNRNA olpc@xo-10-F8-44.localdomain
15
+ ssh-dss AAAAB3NzaC1kc3MAAACBAOC9i08N/CoZO9I4kXv8LFSkReglZw9gmOqK72E/IpijLZkd2oh0wyV98S+8lYZR0OPmK6B4vbPIarBsZiPfOe2EMGxsuYjwD3X3S2hIM/1zrvk+WMzf6UADxmCwWzC6bYa1aBH59ba9ojolsBuou6yOxm3boYmZYbnMCLUzm/eLAAAAFQCHNIOpZTKG0chczg+5T3WJ4Q5JAwAAAIA2/VIk8pST/ynuXuu82Z9ZsR9ZJHICYfYi2EqLA6qJUxSB8MjvF9BQGYgX+UCs96uFme8wPJMBU74c7mZlcHvtlgc+1rMQUTZhJ820b/eg2gcPKGYikWj8y3wT0TDoWemMWAaFprvgrPLhHYuVMUKKzI9VNTeKDD7NC1xMsd9pOgAAAIBT14VMwBZjaq0oJSDxzy7bgf5Tragy9yhs7ZgQ0QTpMTFrkO/YvbsCLeXbsRcq904EMcB5glOHXONppn5skwWwBCFtjpjL9WLaeCnhpCxFC+D89GyR7T3Jlvj/Wa2tkuCSFJLBc64kK+pTmDseRLBbhazJazn3oUrNuEFtazzZCw== simon@secondary
16
+ ssh-dss AAAAB3NzaC1kc3MAAACBALlZtmMckFufyVq+It10p4pC65NJCRdDpRrf1uIoVXvz1ZSlsm/f0jhatuNPpwnSQoRpvlWetiS5mzGJ3ze8aReqHHe9CZvDCpVy33cwyRhCZf7ndyGh1qa9ZA0YMHNVdVs03SpNr7Fzc3muGcKX3BiiOZz+6mtbaQW0X1p/VHpLAAAAFQC8AuBVqCRJKgBMHDHb0nxQAyHbRQAAAIEAgQJvHZ3Db3yVy99goeIJw/3lysVemaddIdPuJj/AdxRwkDeuZIxxtOUne/qjXr7hmu48EyXLVg/jsNivKarLI6CXZAk5JbxkgLN+8y0Ckzcd48KhSGpZsbTBtjV29UFH9aiMVOUTbL59603HNa3ucH2lCLhllBf+ameZZp+EFYMAAACARZwlCuPobEAk7wOxWzGQcaRvmSDSbIKexMeUBgZBZeYjp5Bxld6e7x/j3GBQEkzmxqf08zP6LpglDoNR3KuY2TEWhAS3H1KdT4GibNSNpY4y2Pl2K/GjUWC6wMmVcFFBCz/jJorttMSI1G+OVcy+Vdw42HyQ5Z2QtuoVA2MQ5IQ= staging@domU-12-31-39-0E-C8-82
17
+ END_OF_KEYS
18
+ cat >>~staging/.ssh/config <<END_OF_CONFIG
19
+ Host web
20
+ HostName domU-12-31-39-00-64-E4.compute-1.internal
21
+ User app
22
+ Host webu
23
+ HostName domU-12-31-39-00-64-E4.compute-1.internal
24
+ User ubuntu
25
+ Host *.compute-1.internal
26
+ ForwardAgent yes
27
+ END_OF_CONFIG
28
+
29
+ chown -R staging:staging ~staging/.ssh
30
+ fi
31
+
32
+ if ! id app 2>/dev/null 1>&2; then
33
+ adduser --disabled-password --gecos 'app' app
34
+ mkdir -m 700 ~app/.ssh
35
+ touch ~app/.ssh/authorized_keys
36
+ chmod 600 ~app/.ssh/authorized_keys
37
+
38
+ cat >>~app/.ssh/authorized_keys <<END_OF_KEYS
39
+ ssh-dss AAAAB3NzaC1kc3MAAACBALlZtmMckFufyVq+It10p4pC65NJCRdDpRrf1uIoVXvz1ZSlsm/f0jhatuNPpwnSQoRpvlWetiS5mzGJ3ze8aReqHHe9CZvDCpVy33cwyRhCZf7ndyGh1qa9ZA0YMHNVdVs03SpNr7Fzc3muGcKX3BiiOZz+6mtbaQW0X1p/VHpLAAAAFQC8AuBVqCRJKgBMHDHb0nxQAyHbRQAAAIEAgQJvHZ3Db3yVy99goeIJw/3lysVemaddIdPuJj/AdxRwkDeuZIxxtOUne/qjXr7hmu48EyXLVg/jsNivKarLI6CXZAk5JbxkgLN+8y0Ckzcd48KhSGpZsbTBtjV29UFH9aiMVOUTbL59603HNa3ucH2lCLhllBf+ameZZp+EFYMAAACARZwlCuPobEAk7wOxWzGQcaRvmSDSbIKexMeUBgZBZeYjp5Bxld6e7x/j3GBQEkzmxqf08zP6LpglDoNR3KuY2TEWhAS3H1KdT4GibNSNpY4y2Pl2K/GjUWC6wMmVcFFBCz/jJorttMSI1G+OVcy+Vdw42HyQ5Z2QtuoVA2MQ5IQ= staging@domU-12-31-39-0E-C8-82
40
+ END_OF_KEYS
41
+ chown -R app:app ~app/.ssh
42
+ fi
@@ -0,0 +1,42 @@
1
+ #!/bin/bash
2
+
3
+ if ! id staging 2>/dev/null 1>&2; then
4
+ adduser --disabled-password --gecos 'staging' staging
5
+ mkdir -m 700 ~staging/.ssh
6
+ touch ~staging/.ssh/authorized_keys
7
+ chmod 600 ~staging/.ssh/authorized_keys
8
+ touch ~staging/.ssh/config
9
+ chmod 600 ~staging/.ssh/config
10
+
11
+ cat >>~staging/.ssh/authorized_keys <<END_OF_KEYS
12
+ ssh-dss AAAAB3NzaC1kc3MAAACBANcFLeySRpmVji+g9KcHBaedFE5SOLgkSQIKbeVjOwzGC75AIM5gY6gjOu0Kj4BYhlxUwOWkOEYgZwqu15qxtKPCnYQST3jqQnbfwN8UOC4y7XH/4G0gdOD9taFx4PpW0H+zvYs7smBb1qG8NnlUH1tyCGdNNmZLxn2b84R5pDcVAAAAFQDqV2zGPugaRR7gslhxyxrZnIpE9QAAAIAtEViFMBq8h4TXXbdeYR3EhR+zcUHzRz/yB3N7mdo8C1a5apHAnzwX7RPzvkskThU2Idj3ZxUyrTbd5WpBfk/OIwF+hvM3/Uw6XJLNaDSTd0t0HOJxE+SJuHwfOwNtI+J2IXwckUJ2laOTwjOc0YzIR1Gnf50gcz67R07H4qidtQAAAIANQsT7jT68TemlxBjjK22YDRxdRC5M2VuTAT6dDp9JL7KB6B1b3kU7EjiG9gk9oDUGWQiE5sEtHaFjgeViSwQhtaQ/Rqx8EmNG5W9lNgVcWtPmxqMJtOaaNggE+znE1xanY+fDtLqbAkbExZ8vypyUuMXvsgl7AiSSEMnpmX1Itw== simon@s345
13
+ ssh-dss AAAAB3NzaC1kc3MAAACBAIxHXUznZLryPsnK0YCa7W4HM3wSqpCV8MwIBYd4kl/qQzC2VlyX0mFhVFC3esLWyyWEAFcKyI3FlzI70Z4ppnukyL/2MonVTqto3RPoTQs8Ty3y10MYo+9UE65U6Rv2yHfx551vobJgHgVS7tmupCcemZYscgFCeUMgLOz+5tylAAAAFQC9NTxN10PfjndbLDaPYrpC3h8g9wAAAIBnq0vCE9FqjukltP85M5qiawS5sEXArB0HRP4MDpwk4xDdrpiEwa2qYSOiwN1brsxMGrVHe3HetPeApmZZV5vysV1sLp3CQAlGHoWJ3GjOR3lDYpTymlbZOzd62mKp7FxPVtNszbDiABJckTLUV95TM2OB2hn/mWqpzwJBh9GBrAAAAIAmFDbo3aCg3WcDFnBzI72aHBQ4532xEMrlASABJ9FwkNPCtr2VZRLR4vxo9Oyn21+z4SmFocJN0DcKgj1APeS8en/frAFG/UJr/4KdV/LAnTBz8qd6QnbxdUYxizVoYKI1Pl76axbPQCVe+dthfn0x19quOMc/ofHA7I0GGIojJw== nick@Sparta-MB.local
14
+ ssh-dss AAAAB3NzaC1kc3MAAACBAO/mj7W3wUuDAhvicx+C2MkAFJGFZvaPrBA+nbFbK240HDZcmS8sA9Ww3VwivKzQ4CwrpdMY3dPg0TM9H2USQvfMsis4bStDwLy4CFIvBEGoviVVdu8gBzVN+YGajhv7yZqJ9cpOSnUXUzCBh4ddhLtni4IQ2lEZyKdlUzmA77pZAAAAFQDSdiFXpCu3CrAm0zivwA68DcDj5wAAAIEA557V4w7vNgmZvkb3hnQui5IkVTpN+b2PKCzvA9clbJQvKBpivS7k5jpx+GeoAYA+pYNLppMf9zpyPLrJjJhJ3Y3qS3p5iFCed2aJRwxhd5lYIyEedZ2uW6tchVRPoXkT1/tmXBKUNnue8YHslhqXOy8nHyHd7dH7BXLblnQknRcAAACBANzpDp5oXEG7w40tCYd7dtJfDLT8cIXyA75yX2MtkHjpBylT+lP/c1P9pmPytEtBfoQCvwFKjVA7fVGTkF1QfMVzcJsB1wh6jUyS287JtbS4D2O/yEP6FioG5Qva8GdJ29Oy49+LIHgamc93ZaJPub+wvFYivNzQsomjdXtiNRNA olpc@xo-10-F8-44.localdomain
15
+ ssh-dss AAAAB3NzaC1kc3MAAACBAOC9i08N/CoZO9I4kXv8LFSkReglZw9gmOqK72E/IpijLZkd2oh0wyV98S+8lYZR0OPmK6B4vbPIarBsZiPfOe2EMGxsuYjwD3X3S2hIM/1zrvk+WMzf6UADxmCwWzC6bYa1aBH59ba9ojolsBuou6yOxm3boYmZYbnMCLUzm/eLAAAAFQCHNIOpZTKG0chczg+5T3WJ4Q5JAwAAAIA2/VIk8pST/ynuXuu82Z9ZsR9ZJHICYfYi2EqLA6qJUxSB8MjvF9BQGYgX+UCs96uFme8wPJMBU74c7mZlcHvtlgc+1rMQUTZhJ820b/eg2gcPKGYikWj8y3wT0TDoWemMWAaFprvgrPLhHYuVMUKKzI9VNTeKDD7NC1xMsd9pOgAAAIBT14VMwBZjaq0oJSDxzy7bgf5Tragy9yhs7ZgQ0QTpMTFrkO/YvbsCLeXbsRcq904EMcB5glOHXONppn5skwWwBCFtjpjL9WLaeCnhpCxFC+D89GyR7T3Jlvj/Wa2tkuCSFJLBc64kK+pTmDseRLBbhazJazn3oUrNuEFtazzZCw== simon@secondary
16
+ ssh-dss AAAAB3NzaC1kc3MAAACBALlZtmMckFufyVq+It10p4pC65NJCRdDpRrf1uIoVXvz1ZSlsm/f0jhatuNPpwnSQoRpvlWetiS5mzGJ3ze8aReqHHe9CZvDCpVy33cwyRhCZf7ndyGh1qa9ZA0YMHNVdVs03SpNr7Fzc3muGcKX3BiiOZz+6mtbaQW0X1p/VHpLAAAAFQC8AuBVqCRJKgBMHDHb0nxQAyHbRQAAAIEAgQJvHZ3Db3yVy99goeIJw/3lysVemaddIdPuJj/AdxRwkDeuZIxxtOUne/qjXr7hmu48EyXLVg/jsNivKarLI6CXZAk5JbxkgLN+8y0Ckzcd48KhSGpZsbTBtjV29UFH9aiMVOUTbL59603HNa3ucH2lCLhllBf+ameZZp+EFYMAAACARZwlCuPobEAk7wOxWzGQcaRvmSDSbIKexMeUBgZBZeYjp5Bxld6e7x/j3GBQEkzmxqf08zP6LpglDoNR3KuY2TEWhAS3H1KdT4GibNSNpY4y2Pl2K/GjUWC6wMmVcFFBCz/jJorttMSI1G+OVcy+Vdw42HyQ5Z2QtuoVA2MQ5IQ= staging@domU-12-31-39-0E-C8-82
17
+ END_OF_KEYS
18
+ cat >>~staging/.ssh/config <<END_OF_CONFIG
19
+ Host web
20
+ HostName domU-12-31-39-00-64-E4.compute-1.internal
21
+ User app
22
+ Host webu
23
+ HostName domU-12-31-39-00-64-E4.compute-1.internal
24
+ User ubuntu
25
+ Host *.compute-1.internal
26
+ ForwardAgent yes
27
+ END_OF_CONFIG
28
+
29
+ chown -R staging:staging ~staging/.ssh
30
+ fi
31
+
32
+ if ! id app 2>/dev/null 1>&2; then
33
+ adduser --disabled-password --gecos 'app' app
34
+ mkdir -m 700 ~app/.ssh
35
+ touch ~app/.ssh/authorized_keys
36
+ chmod 600 ~app/.ssh/authorized_keys
37
+
38
+ cat >>~app/.ssh/authorized_keys <<END_OF_KEYS
39
+ ssh-dss AAAAB3NzaC1kc3MAAACBALlZtmMckFufyVq+It10p4pC65NJCRdDpRrf1uIoVXvz1ZSlsm/f0jhatuNPpwnSQoRpvlWetiS5mzGJ3ze8aReqHHe9CZvDCpVy33cwyRhCZf7ndyGh1qa9ZA0YMHNVdVs03SpNr7Fzc3muGcKX3BiiOZz+6mtbaQW0X1p/VHpLAAAAFQC8AuBVqCRJKgBMHDHb0nxQAyHbRQAAAIEAgQJvHZ3Db3yVy99goeIJw/3lysVemaddIdPuJj/AdxRwkDeuZIxxtOUne/qjXr7hmu48EyXLVg/jsNivKarLI6CXZAk5JbxkgLN+8y0Ckzcd48KhSGpZsbTBtjV29UFH9aiMVOUTbL59603HNa3ucH2lCLhllBf+ameZZp+EFYMAAACARZwlCuPobEAk7wOxWzGQcaRvmSDSbIKexMeUBgZBZeYjp5Bxld6e7x/j3GBQEkzmxqf08zP6LpglDoNR3KuY2TEWhAS3H1KdT4GibNSNpY4y2Pl2K/GjUWC6wMmVcFFBCz/jJorttMSI1G+OVcy+Vdw42HyQ5Z2QtuoVA2MQ5IQ= staging@domU-12-31-39-0E-C8-82
40
+ END_OF_KEYS
41
+ chown -R app:app ~app/.ssh
42
+ fi
@@ -0,0 +1,184 @@
1
+ #!/bin/bash
2
+ # codename=$(lsb_release -cs)
3
+
4
+ sed -i "/^# deb.*multiverse/ s/^# //" /etc/apt/sources.list
5
+ gpg --keyserver keyserver.ubuntu.com --recv-key 40976EAF437D05B5
6
+ gpg --keyserver keyserver.ubuntu.com --recv-key 3B4FE6ACC0B21F32
7
+ gpg -a --export 40976EAF437D05B5 | sudo apt-key add -
8
+ gpg -a --export 3B4FE6ACC0B21F32 | sudo apt-key add -
9
+
10
+ apt-get -y update
11
+ apt-get -y dist-upgrade
12
+
13
+ # Will request mysql password
14
+ cat >/tmp/deps.txt <<EOF
15
+ build-essential
16
+ gcc
17
+ unzip
18
+ zip
19
+ libapache2-mod-apreq2
20
+ apache2-mpm-worker
21
+ apache2-threaded-dev
22
+ libapr1-dev
23
+ libaprutil1-dev
24
+ help2man
25
+ zlib-bin
26
+ zlib1g
27
+ zlib1g-dev
28
+ libapreq2-dev
29
+ libjpeg-progs
30
+ pngcrush
31
+ ec2-ami-tools
32
+ ec2-api-tools
33
+ git-core
34
+ git-doc
35
+ git-email
36
+ git-daemon-run
37
+ gitk
38
+ imagemagick
39
+ imagemagick-doc
40
+ libgd2-xpm
41
+ libgif4
42
+ mysql-server
43
+ mysql-client
44
+ libmysqlclient-dev
45
+ libxml2
46
+ libxml2-dev
47
+ libxml2-utils
48
+ libxslt1-dev
49
+ libc6-dev
50
+ libncurses5-dev
51
+ automake
52
+ libtool
53
+ g++
54
+ libssl-dev
55
+ libyaml-dev
56
+ memcached
57
+ imagemagick
58
+ libmagickcore-dev
59
+ libmagickwand-dev
60
+ vim-doc
61
+ vim-scripts
62
+ xfsprogs
63
+ nginx
64
+ libreadline6-dev
65
+ libreadline6
66
+ exuberant-ctags
67
+ flex
68
+ bison
69
+ dctrl-tools
70
+ libsctp-dev
71
+ ed
72
+ ntp
73
+ couchdb
74
+ erlang
75
+ erlang-manpages
76
+ erlang-doc
77
+ EOF
78
+ apt-get -y install $(cat /tmp/deps.txt)
79
+
80
+ # Reconfigure Apache some
81
+ cd /usr/sbin
82
+ ln -sf ../lib/apache2/mpm-worker/apache2 apache2
83
+ sed -i "s/\(IfModule mpm_worker.*\)$/\1\n\tMaxRequestsPerChild 100000/" /etc/apache2/apache2.conf
84
+
85
+ ## RUBY
86
+ cd /tmp
87
+ rm /usr/bin/ruby
88
+ hash -r
89
+
90
+ wget http://ftp.ruby-lang.org/pub/ruby/1.9/ruby-1.9.3-p362.tar.gz
91
+ tar xzf ruby*
92
+ cd ruby*
93
+ ./configure && make && make install
94
+ ln -sf /usr/bin/ruby /usr/bin/ruby1.9
95
+
96
+ ## BUNDLER
97
+ mkdir /etc/bundler
98
+ cd /etc/bundler
99
+
100
+ cat >gemrc <<EOF
101
+ install: --no-rdoc --no-ri
102
+ update: --no-rdoc --no-ri
103
+ EOF
104
+
105
+ gem --config-file /etc/bundler/gemrc install bundler
106
+
107
+ cat >Gemfile <<EOF
108
+ source 'http://rubygems.org'
109
+
110
+ gem 'passenger'
111
+ EOF
112
+ bundle install --system --gemfile=/etc/bundler/Gemfile --binstubs=/usr/local/bin
113
+
114
+ apt-get -y install libcurl4-openssl-dev libopenssl-ruby1.9.1 libxml-ruby1.9.1
115
+
116
+ passenger-install-apache2-module -a
117
+
118
+ ## ELB TOOLS
119
+ cd /tmp
120
+ wget http://ec2-downloads.s3.amazonaws.com/ElasticLoadBalancing.zip
121
+ unzip Elastic* -d /usr/local/lib
122
+ cd /usr/local/lib
123
+ ln -sf Elastic* elb
124
+ rm /usr/local/lib/elb/bin/*.cmd
125
+
126
+ cd /tmp
127
+
128
+ cat >/etc/profile.d/cluster.sh <<EOF
129
+ #!/bin/sh
130
+ export JAVA_HOME=/usr
131
+ export AWS_ELB_HOME=/usr/local/lib/elb
132
+ export PATH=\${PATH}:\${AWS_ELB_HOME}/bin
133
+ EOF
134
+
135
+ # sed -i 's#^ruby #ruby3.8 #' /usr/bin/ec2-bundle-vol
136
+ # sed -i 's#^ruby #ruby1.8 #' /usr/bin/ec2-bundle-image
137
+ # sed -i 's#^ruby #ruby1.8 #' /usr/bin/ec2-unbundle
138
+
139
+ # CouchDB was starting in 2, 3, 4, 5 and killed in 0, 6, 1
140
+ for s in apache2 memcached couchdb nginx; do sudo update-rc.d -f $s remove; done
141
+
142
+ mv /etc/init/mysql.conf /root/mysql.conf.orig
143
+
144
+ ## COUCHDB
145
+ local_addr=$(/sbin/ifconfig eth0 | awk -F"[: ]+" 'NR==2 {print $4}')
146
+ couch_data=/mnt/databases/couchdb/1.0.1
147
+ couch_conf=/etc/couchdb/local.ini
148
+
149
+ mkdir -p ${couch_data}/log
150
+ chown -R couchdb:couchdb ${couch_data}/..
151
+
152
+ mv ${couch_conf} ${couch_conf}.dist
153
+
154
+ cat >${couch_conf} <<EOF
155
+ [couchdb]
156
+ database_dir = ${couch_data}
157
+ view_index_dir = ${couch_data}
158
+
159
+ [httpd]
160
+ bind_address = ${local_addr}
161
+
162
+ [log]
163
+ level = error ; info
164
+ file = ${couch_data}/log/couch.log
165
+
166
+ [uuids]
167
+ algorithm = utc_random
168
+
169
+ [couch_httpd_auth]
170
+ ; require_valid_user true
171
+ EOF
172
+ chown couchdb:couchdb ${couch_conf}
173
+ chmod 664 ${couch_conf}
174
+
175
+ sed -i "s#/var/log/couchdb/#${couch_data}/log/#" /etc/logrotate.d/couchdb
176
+
177
+ cd /tmp
178
+ rm -rf deps.txt ruby* Elastic*
179
+
180
+ apt-get clean
181
+ gem clean
182
+
183
+ updatedb
184
+ hash -r # in case you are running this manually
@@ -1,19 +1,15 @@
1
+ require 'forwardable'
1
2
  %w(configuration version infrastructure instance release).each {|l| require File.join('cluster', l) }
2
3
 
3
4
  class Cluster
5
+ extend Forwardable
6
+ def_delegators :@sub, :cost, :period, :machines, :balance, :services, :create_file_store, :create_data_store, :credentials_url, :update_machines
7
+
4
8
  def security(*groups)
5
9
  groups << 'access' if groups.empty?
6
10
  @sub.security(groups)
7
11
  end
8
12
 
9
- def cost(*sizes)
10
- @sub.cost(sizes)
11
- end
12
-
13
- def period(*args)
14
- @sub.period(args)
15
- end
16
-
17
13
  def revoke(*ips)
18
14
  if ips.empty?
19
15
  current_ip = ''
@@ -49,20 +45,11 @@ class Cluster
49
45
  res.empty? ? nil : res.first
50
46
  end
51
47
 
52
- def machines(groups = [])
53
- @sub.machines(groups)
54
- end
55
- alias :instances :machines
56
-
57
48
  def service(roles)
58
49
  res = services(roles)
59
50
  res.empty? ? nil : res.first
60
51
  end
61
52
 
62
- def services(roles = [])
63
- @sub.services(roles)
64
- end
65
-
66
53
  def labeled(name)
67
54
  @sub.instances.select {|i| i.identified_by? name}
68
55
  end
@@ -83,14 +70,6 @@ class Cluster
83
70
  {'credentials' => nil}
84
71
  end
85
72
 
86
- def create_file_store(name)
87
- @sub.create_file_store(name)
88
- end
89
-
90
- def create_data_store(name)
91
- @sub.create_data_store(name)
92
- end
93
-
94
73
  def start(machine_size, *services)
95
74
  size = machine_size.to_s.strip.downcase
96
75
  unless @sub.class.machine_sizes.include? size
@@ -144,15 +123,17 @@ class Cluster
144
123
  case cmd.downcase
145
124
  when 'services'
146
125
  current.services - current.disabled_services
147
- when /^(n|dn)/
126
+ when /^(n|dn)/ # name / dns
148
127
  current.dns
149
- when /^i/
128
+ when /^i/ # ip
150
129
  current.ip
151
- when /^e/
130
+ when /^a/ # add
131
+ @sub.alter_instances!(current) {|i| i.services = Array(params) }
132
+ when /^e/ # enable
152
133
  @sub.alter_instances!(current) {|i| i.enable *params }
153
- when /^di/
134
+ when /^di/ # disable
154
135
  @sub.alter_instances!(current) {|i| i.disable *params }
155
- when /^s/
136
+ when /^s/ # state
156
137
  @sub.alter_instances!(current) {|i| i.set_state *params }
157
138
  else
158
139
  msg = "#{Cluster::NAME} curent did not understand '#{params.join(' ')}'"
@@ -225,10 +206,6 @@ class Cluster
225
206
  end
226
207
  end
227
208
 
228
- def credentials_url
229
- @sub.credentials_url
230
- end
231
-
232
209
  def fetch_credentials(url)
233
210
  unless Cluster::Configuration.credentials?
234
211
  msg = "Need to know where to save the incoming credentials."
@@ -254,14 +231,6 @@ class Cluster
254
231
  }
255
232
  end
256
233
 
257
- def gemurl
258
- Cluster::LOCATION
259
- end
260
-
261
- def imageurl
262
- Cluster::IMAGES
263
- end
264
-
265
234
  class << self
266
235
  def set_credentials_file
267
236
  unless Cluster::Configuration.credentials?