cluster 0.6.5 → 0.7.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +6 -0
- data/Rakefile +1 -61
- data/cluster.gemspec +25 -0
- data/cluster_images.yml +2 -0
- data/etc/cluster_images.yml +2 -0
- data/examples/cacerts.pem +19 -0
- data/examples/credentials.yml +24 -0
- data/examples/monitor.god +88 -0
- data/examples/services.d/memcache/config.god +64 -0
- data/examples/services.d/memcache/memcached +12 -0
- data/examples/services.d/smtp/main.cf +55 -0
- data/examples/services.d/web/apache.d/balanced +29 -0
- data/examples/services.d/web/apache.d/config.sh +20 -0
- data/examples/services.d/web/apache.d/envvars +18 -0
- data/examples/services.d/web/apache.d/php.ini +1254 -0
- data/examples/services.d/web/apache.d/ports.conf +11 -0
- data/examples/services.d/web/apache.d/redirect +11 -0
- data/examples/services.d/web/apache.d/staging +29 -0
- data/examples/services.d/web/apache.tgz +0 -0
- data/examples/services.d/web/config.god +76 -0
- data/examples/services.d/web/users.sh +42 -0
- data/examples/users.sh +42 -0
- data/instance_setup.sh +184 -0
- data/lib/cluster.rb +11 -42
- data/lib/cluster/cli.rb +23 -15
- data/lib/cluster/infrastructures/amazon.rb +100 -62
- data/lib/cluster/infrastructures/amazon_instance.rb +11 -65
- data/lib/cluster/instance.rb +0 -4
- data/lib/cluster/version.rb +4 -16
- data/user_data_web.sh +96 -0
- metadata +82 -164
@@ -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>
|
Binary file
|
@@ -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
|
data/examples/users.sh
ADDED
@@ -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
|
data/instance_setup.sh
ADDED
@@ -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
|
data/lib/cluster.rb
CHANGED
@@ -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 /^
|
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?
|