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.
- 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?
|