cluster 0.6.5 → 0.7.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -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?