rubber 2.1.2 → 2.2.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/.travis.yml +2 -4
- data/CHANGELOG +98 -0
- data/LICENSE +10 -336
- data/lib/rubber/cloud/aws.rb +8 -8
- data/lib/rubber/commands/cron.rb +1 -1
- data/lib/rubber/commands/util.rb +46 -0
- data/lib/rubber/encryption.rb +46 -0
- data/lib/rubber/environment.rb +24 -5
- data/lib/rubber/recipes/rubber.rb +1 -1
- data/lib/rubber/recipes/rubber/instances.rb +97 -37
- data/lib/rubber/recipes/rubber/setup.rb +9 -4
- data/lib/rubber/recipes/rubber/static_ips.rb +3 -2
- data/lib/rubber/version.rb +1 -1
- data/rubber.gemspec +1 -2
- data/templates/apache/config/rubber/rubber-apache.yml +2 -2
- data/templates/base/config/deploy.rb +1 -1
- data/templates/base/config/rubber/common/crontab +1 -3
- data/templates/base/config/rubber/common/gemrc +5 -0
- data/templates/base/config/rubber/common/rubber.profile +0 -3
- data/templates/base/config/rubber/common/ruby.profile +9 -0
- data/templates/base/config/rubber/deploy-setup.rb +45 -65
- data/templates/base/config/rubber/rubber-ruby.yml +21 -0
- data/templates/base/config/rubber/rubber.yml +8 -3
- data/templates/base/script/rubber +7 -3
- data/templates/collectd/config/rubber/role/passenger/collectd-passenger.rb.conf +2 -2
- data/templates/collectd/config/rubber/role/passenger/passenger-status-sudoers.conf +2 -2
- data/templates/complete_unicorn_nginx/config/rubber/rubber-complete.yml +2 -3
- data/templates/complete_unicorn_nginx/templates.yml +0 -1
- data/templates/elasticsearch/config/rubber/deploy-elasticsearch.rb +1 -1
- data/templates/elasticsearch/config/rubber/rubber-elasticsearch.yml +1 -1
- data/templates/graphite/config/rubber/deploy-graphite.rb +9 -52
- data/templates/graphite/config/rubber/role/graphite_server/carbon.conf +1 -1
- data/templates/graphite/config/rubber/role/graphite_server/graphite-collectd-ping.conf +11 -0
- data/templates/graphite/config/rubber/role/graphite_server/monit-graphite_server.conf +8 -0
- data/templates/graphite/config/rubber/role/graphite_web/graphite_web-upstart.conf +15 -0
- data/templates/graphite/config/rubber/role/graphite_web/monit-graphite_web.conf +7 -0
- data/templates/graphite/config/rubber/role/graphite_web/uwsgi.ini +16 -0
- data/templates/graphite/config/rubber/rubber-graphite.yml +6 -4
- data/templates/graphite/templates.yml +2 -0
- data/templates/mongrel/config/rubber/deploy-mongrel.rb +1 -1
- data/templates/monit/config/rubber/role/mongrel/monit-mongrel.conf +2 -2
- data/templates/munin/config/rubber/role/munin/munin-plugins.conf +3 -3
- data/templates/munin/config/rubber/role/passenger/munin-passenger-memory.conf +1 -1
- data/templates/munin/config/rubber/role/passenger/munin-passenger-sudoers.conf +2 -2
- data/templates/munin/config/rubber/role/passenger/munin-passenger.conf +1 -1
- data/templates/munin/config/rubber/role/passenger_nginx/munin-passenger-memory.conf +1 -1
- data/templates/munin/config/rubber/role/passenger_nginx/munin-passenger-sudoers.conf +2 -2
- data/templates/munin/config/rubber/role/passenger_nginx/munin-passenger.conf +1 -1
- data/templates/passenger/config/rubber/deploy-passenger.rb +5 -11
- data/templates/passenger/config/rubber/role/passenger/passenger-apache-vhost.conf +12 -0
- data/templates/passenger/config/rubber/rubber-passenger.yml +3 -3
- data/templates/passenger_nginx/config/rubber/role/passenger_nginx/nginx.conf +1 -1
- data/templates/passenger_nginx/config/rubber/rubber-passenger_nginx.yml +2 -2
- data/templates/postgresql/config/rubber/deploy-postgresql.rb +47 -0
- data/templates/redis/config/rubber/rubber-redis.yml +1 -1
- data/templates/resque/templates.yml +0 -1
- data/templates/sidekiq/config/rubber/deploy-sidekiq.rb +35 -0
- data/templates/sidekiq/config/rubber/role/sidekiq/monit-sidekiq.conf +10 -0
- data/templates/sidekiq/config/rubber/rubber-sidekiq.yml +2 -0
- data/templates/sidekiq/templates.rb +2 -0
- data/templates/sidekiq/templates.yml +4 -0
- data/templates/solr/config/rubber/common/solr_sunspot.yml +10 -0
- data/templates/solr/config/rubber/deploy-solr.rb +78 -0
- data/templates/solr/config/rubber/rubber-solr.yml +10 -0
- data/templates/solr/templates.yml +3 -0
- data/templates/sphinx/config/rubber/deploy-sphinx.rb +4 -4
- data/templates/torquebox/config/rubber/deploy-torquebox.rb +16 -4
- data/templates/torquebox/config/rubber/role/app/torquebox-apache-vhost.conf +15 -5
- data/templates/torquebox/config/rubber/role/torquebox/graylog-logging-module.xml +9 -0
- data/templates/torquebox/config/rubber/role/torquebox/standalone-ha.xml +25 -7
- data/templates/torquebox/config/rubber/role/torquebox/standalone.conf +2 -2
- data/templates/torquebox/config/rubber/rubber-torquebox.yml +6 -3
- data/templates/zookeeper/config/rubber/rubber-zookeeper.yml +1 -1
- data/test/command_test.rb +7 -5
- data/test/commands/cron_test.rb +22 -18
- data/test/commands/util_test.rb +40 -0
- data/test/encryption_test.rb +59 -0
- data/test/environment_test.rb +14 -0
- data/test/fixtures/obfuscated/rubber.yml +3 -0
- data/test/fixtures/obfuscated/secret.yml +1 -0
- metadata +33 -12
- data/templates/base/config/rubber/rubber-rvm.yml +0 -42
- data/templates/complete_passenger/templates.rb +0 -9
- data/templates/complete_passenger_nginx/templates.rb +0 -8
- data/templates/complete_unicorn_nginx/config/rubber/role/haproxy/haproxy-unicorn.conf +0 -21
- data/templates/complete_unicorn_nginx/templates.rb +0 -8
- data/templates/graphite/config/rubber/role/graphite_web/graphite-vhost.conf +0 -62
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
<%
|
|
2
|
+
@path = '/etc/monit/monit.d/monit-graphite_server.conf'
|
|
3
|
+
%>
|
|
4
|
+
check process graphite_server with pidfile <%= rubber_env.graphite_server_pid_file %>
|
|
5
|
+
group graphite-<%= Rubber.env %>
|
|
6
|
+
start program = "/usr/bin/env service graphite-server start"
|
|
7
|
+
stop program = "/usr/bin/env service graphite-server stop"
|
|
8
|
+
if failed host <%= rubber_env.host %> port <%= rubber_env.graphite_server_port %> with timeout 10 seconds for 3 cycles then restart
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
<%
|
|
2
|
+
@path = "/etc/init/graphite-web.conf"
|
|
3
|
+
@backup = false
|
|
4
|
+
%>
|
|
5
|
+
|
|
6
|
+
description "graphite-web uwsgi daemon"
|
|
7
|
+
|
|
8
|
+
start on runlevel [2345]
|
|
9
|
+
stop on runlevel [016]
|
|
10
|
+
|
|
11
|
+
env PID=/var/run/graphite-web.pid
|
|
12
|
+
|
|
13
|
+
expect daemon
|
|
14
|
+
|
|
15
|
+
exec uwsgi --ini /opt/graphite/conf/uwsgi.ini
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
<%
|
|
2
|
+
@path = '/etc/monit/monit.d/monit-graphite-web.conf'
|
|
3
|
+
%>
|
|
4
|
+
check process graphite-web with pidfile /var/run/graphite-web.pid
|
|
5
|
+
group graphite-web-<%= Rubber.env %>
|
|
6
|
+
start program = "/usr/bin/env service graphite-web start"
|
|
7
|
+
stop program = "/usr/bin/env service graphite-web stop"
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
<%
|
|
2
|
+
@path = '/opt/graphite/conf/uwsgi.ini'
|
|
3
|
+
%>
|
|
4
|
+
|
|
5
|
+
[uwsgi]
|
|
6
|
+
http=:<%= rubber_env.graphite_web_port %>
|
|
7
|
+
chdir=/opt/graphite/webapp
|
|
8
|
+
wsgi-file=/opt/graphite/conf/graphite.wsgi
|
|
9
|
+
master=True
|
|
10
|
+
pidfile=/var/run/graphite-web.pid
|
|
11
|
+
processes=4
|
|
12
|
+
die-on-term=True
|
|
13
|
+
vacuum=True
|
|
14
|
+
max-requests=5000
|
|
15
|
+
daemonize=/opt/graphite/storage/log/webapp/webapp.log
|
|
16
|
+
plugins=python,http
|
|
@@ -2,12 +2,14 @@ graphite_dir: "/opt/graphite"
|
|
|
2
2
|
graphite_server_pid_file: /var/run/graphite-server.pid
|
|
3
3
|
graphite_server_port: 2003
|
|
4
4
|
graphite_web_port: 2080
|
|
5
|
+
graphite_carbon_port: 8002
|
|
6
|
+
graphite_storage_dir: /mnt/graphite_storage
|
|
5
7
|
|
|
6
8
|
# uncomment out the repo version to install from given repo version
|
|
7
9
|
# graphite_repo_version: 426
|
|
8
|
-
graphite_whisper_package_url:
|
|
9
|
-
graphite_carbon_package_url:
|
|
10
|
-
graphite_web_package_url:
|
|
10
|
+
graphite_whisper_package_url: https://github.com/downloads/graphite-project/whisper/whisper-0.9.10.tar.gz
|
|
11
|
+
graphite_carbon_package_url: https://github.com/downloads/graphite-project/carbon/carbon-0.9.10.tar.gz
|
|
12
|
+
graphite_web_package_url: https://github.com/downloads/graphite-project/graphite-web/graphite-web-0.9.10.tar.gz
|
|
11
13
|
|
|
12
14
|
web_tools_proxies:
|
|
13
15
|
graphite:
|
|
@@ -17,6 +19,6 @@ web_tools_proxies:
|
|
|
17
19
|
|
|
18
20
|
roles:
|
|
19
21
|
graphite_web:
|
|
20
|
-
packages: [python-django, python-django-tagging,
|
|
22
|
+
packages: [python-django, python-django-tagging, python-cairo, python-memcache, memcached, uwsgi, uwsgi-plugin-python, uwsgi-plugin-http, sqlite3, bzr, zip]
|
|
21
23
|
collectd:
|
|
22
24
|
packages: [libperl-dev]
|
|
@@ -12,7 +12,7 @@ namespace :rubber do
|
|
|
12
12
|
rubber.sudo_script 'setup_mongrel_init', <<-ENDSCRIPT
|
|
13
13
|
mkdir -p /etc/mongrel_cluster
|
|
14
14
|
rm -f /etc/mongrel_cluster/#{application}-#{Rubber.env}.yml && ln -s /mnt/#{application}-#{Rubber.env}/current/config/mongrel_cluster.yml /etc/mongrel_cluster/#{application}-#{Rubber.env}.yml
|
|
15
|
-
find #{rubber_env.
|
|
15
|
+
find #{rubber_env.ruby_path} -path "*/resources/mongrel_cluster" -exec cp {} /etc/init.d/ \\;
|
|
16
16
|
chmod +x /etc/init.d/mongrel_cluster
|
|
17
17
|
update-rc.d -f mongrel_cluster remove
|
|
18
18
|
update-rc.d mongrel_cluster defaults 99 00
|
|
@@ -8,12 +8,12 @@
|
|
|
8
8
|
<% pidfile = "#{Rubber.root}/tmp/pids/mongrel.#{port}.pid" %>
|
|
9
9
|
check process mongrel-<%= port %> with pidfile <%= pidfile %>
|
|
10
10
|
group mongrel-<%= Rubber.env %>
|
|
11
|
-
start program = "/bin/sh -c 'cd <%= Rubber.root %> && PATH
|
|
11
|
+
start program = "/bin/sh -c 'cd <%= Rubber.root %> && PATH=/usr/local/bin:$PATH && mongrel_rails cluster::start --clean --only <%= port %>'"
|
|
12
12
|
<%
|
|
13
13
|
# Stop gracefully - monit waits for stop to complete (since below process exits immediately, it must
|
|
14
14
|
# wait for pid to disappear) before trying to start
|
|
15
15
|
%>
|
|
16
|
-
stop program = "/bin/sh -c 'cd <%= Rubber.root %> && PATH
|
|
16
|
+
stop program = "/bin/sh -c 'cd <%= Rubber.root %> && PATH=/usr/local/bin:$PATH && mongrel_rails cluster::stop --clean --only <%= port %> && sleep 30 && mongrel_rails cluster::stop --clean --force --only <%= port %>'"
|
|
17
17
|
if totalmem > 200.0 MB for 3 cycles then restart
|
|
18
18
|
<%# monit needs to test on same same interface that mongrel is listening on (see mongrel_cluster.yml) %>
|
|
19
19
|
if failed host <%= rubber_env.host %> port <%= port %> protocol http with timeout 10 seconds for 10 cycles then restart
|
|
@@ -2,10 +2,10 @@
|
|
|
2
2
|
@path = '/etc/munin/plugin-conf.d/rubber'
|
|
3
3
|
%>
|
|
4
4
|
|
|
5
|
-
# munin-node clears out
|
|
6
|
-
# to make sure we are running the correct ruby (
|
|
5
|
+
# munin-node clears out environment variables, so we need to add these in
|
|
6
|
+
# to make sure we are running the correct ruby (ruby env vars, plus paths)
|
|
7
7
|
[*]
|
|
8
|
-
<%- ENV.select {|k, v| k =~ /
|
|
8
|
+
<%- ENV.select {|k, v| k =~ /ruby|bundler|gem|path/i; v != "" }.each do |k, v| -%>
|
|
9
9
|
env.<%= k %> <%= v %>
|
|
10
10
|
<%- end -%>
|
|
11
11
|
env.RUBYOPT rubygems
|
|
@@ -18,7 +18,7 @@ END
|
|
|
18
18
|
end
|
|
19
19
|
|
|
20
20
|
def output_values
|
|
21
|
-
status = `
|
|
21
|
+
status = `sudo <%= rubber_env.ruby_path %>/bin/passenger-memory-stats | tail -1`
|
|
22
22
|
unless $?.success?
|
|
23
23
|
$stderr.puts "failed executing passenger-memory-stats"
|
|
24
24
|
exit 1
|
|
@@ -4,5 +4,5 @@
|
|
|
4
4
|
%>
|
|
5
5
|
Defaults env_keep = GEM_PATH
|
|
6
6
|
|
|
7
|
-
nobody ALL=(ALL) NOPASSWD: <%= rubber_env.
|
|
8
|
-
nobody ALL=(ALL) NOPASSWD: <%= rubber_env.
|
|
7
|
+
nobody ALL=(ALL) NOPASSWD: <%= rubber_env.ruby_path %>/bin/passenger-status
|
|
8
|
+
nobody ALL=(ALL) NOPASSWD: <%= rubber_env.ruby_path %>/bin/passenger-memory-stats
|
|
@@ -21,7 +21,7 @@ END
|
|
|
21
21
|
end
|
|
22
22
|
|
|
23
23
|
def output_values
|
|
24
|
-
status = `
|
|
24
|
+
status = `sudo <%= rubber_env.ruby_path %>/bin/passenger-status`
|
|
25
25
|
unless $?.success?
|
|
26
26
|
$stderr.puts "failed executing passenger-status"
|
|
27
27
|
exit 1
|
|
@@ -18,7 +18,7 @@ END
|
|
|
18
18
|
end
|
|
19
19
|
|
|
20
20
|
def output_values
|
|
21
|
-
status = `
|
|
21
|
+
status = `sudo <%= rubber_env.ruby_path %>/bin/passenger-memory-stats | tail -1`
|
|
22
22
|
unless $?.success?
|
|
23
23
|
$stderr.puts "failed executing passenger-memory-stats"
|
|
24
24
|
exit 1
|
|
@@ -4,5 +4,5 @@
|
|
|
4
4
|
%>
|
|
5
5
|
Defaults env_keep = GEM_PATH
|
|
6
6
|
|
|
7
|
-
nobody ALL=(ALL) NOPASSWD: <%= rubber_env.
|
|
8
|
-
nobody ALL=(ALL) NOPASSWD: <%= rubber_env.
|
|
7
|
+
nobody ALL=(ALL) NOPASSWD: <%= rubber_env.ruby_path %>/bin/passenger-status
|
|
8
|
+
nobody ALL=(ALL) NOPASSWD: <%= rubber_env.ruby_path %>/bin/passenger-memory-stats
|
|
@@ -21,7 +21,7 @@ END
|
|
|
21
21
|
end
|
|
22
22
|
|
|
23
23
|
def output_values
|
|
24
|
-
status = `
|
|
24
|
+
status = `sudo <%= rubber_env.ruby_path %>/bin/passenger-status`
|
|
25
25
|
unless $?.success?
|
|
26
26
|
$stderr.puts "failed executing passenger-status"
|
|
27
27
|
exit 1
|
|
@@ -2,21 +2,16 @@
|
|
|
2
2
|
namespace :rubber do
|
|
3
3
|
|
|
4
4
|
namespace :passenger do
|
|
5
|
-
|
|
5
|
+
|
|
6
6
|
rubber.allow_optional_tasks(self)
|
|
7
|
-
|
|
7
|
+
|
|
8
8
|
after "rubber:install_gems", "rubber:passenger:custom_install"
|
|
9
|
-
|
|
9
|
+
|
|
10
10
|
task :custom_install, :roles => :passenger do
|
|
11
11
|
rubber.sudo_script 'install_passenger', <<-ENDSCRIPT
|
|
12
|
-
|
|
13
|
-
# when variable interpolation of rvm_gem_home is run remotely, and since we
|
|
14
|
-
# are in cap, we run the interpolation locally
|
|
15
|
-
#
|
|
16
|
-
passenger_lib=$(find /usr/local/rvm/gems/`rvm current` -path "*/passenger-#{rubber_env.passenger_version}/*/mod_passenger.so" 2> /dev/null)
|
|
12
|
+
passenger_lib=$(find #{rubber_env.ruby_path} -path "*/passenger-#{rubber_env.passenger_version}/*/mod_passenger.so" 2> /dev/null)
|
|
17
13
|
if [[ -z $passenger_lib ]]; then
|
|
18
14
|
echo -en "\n\n\n\n" | passenger-install-apache2-module
|
|
19
|
-
rvm #{rubber_env.rvm_ruby} --passenger
|
|
20
15
|
fi
|
|
21
16
|
ENDSCRIPT
|
|
22
17
|
end
|
|
@@ -58,8 +53,7 @@ namespace :rubber do
|
|
|
58
53
|
rsudo "while ! curl -s -f http://localhost:$CAPISTRANO:VAR$/ &> /dev/null; do echo .; done", opts
|
|
59
54
|
rsudo "touch #{current_path}/public/httpchk.txt"
|
|
60
55
|
end
|
|
61
|
-
|
|
62
|
-
|
|
56
|
+
|
|
63
57
|
# passenger depends on apache for start/stop/restart, just need these defined
|
|
64
58
|
# as apache hooks into standard deploy lifecycle
|
|
65
59
|
|
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
<%
|
|
2
2
|
@path = "/etc/apache2/sites-available/#{rubber_env.app_name}-passenger"
|
|
3
3
|
@post = "a2enmod rewrite && a2enmod ssl && a2enmod expires && a2enmod xsendfile && a2ensite #{rubber_env.app_name}-passenger"
|
|
4
|
+
|
|
5
|
+
sidekiq_gem_path = if rubber_instances.for_role('sidekiq').any?
|
|
6
|
+
require 'sidekiq'
|
|
7
|
+
`find /mnt/#{rubber_env.app_name}-#{RUBBER_ENV}/shared/bundle -name sidekiq-#{Sidekiq::VERSION}`.strip
|
|
8
|
+
end
|
|
4
9
|
%>
|
|
5
10
|
|
|
6
11
|
<% [rubber_env.passenger_listen_port, rubber_env.passenger_listen_ssl_port].each do |port| %>
|
|
@@ -25,6 +30,10 @@ Listen <%= port %>
|
|
|
25
30
|
|
|
26
31
|
XSendFile on
|
|
27
32
|
|
|
33
|
+
<% if rubber_instances.for_role('sidekiq').any? %>
|
|
34
|
+
XSendFilePath <%= sidekiq_gem_path %>/web/assets
|
|
35
|
+
<% end %>
|
|
36
|
+
|
|
28
37
|
RewriteEngine On
|
|
29
38
|
RewriteCond %{HTTP_HOST} ^<%= rubber_env.domain %>$
|
|
30
39
|
RewriteRule ^(.*)$ http://www.<%= rubber_env.domain %>$1 [R,L]
|
|
@@ -47,6 +56,9 @@ Listen <%= port %>
|
|
|
47
56
|
# Cache the resource even if SSL is in use.
|
|
48
57
|
Header merge Cache-Control public
|
|
49
58
|
|
|
59
|
+
# Remove any cookies set with the request so we avoid them being cached in a CDN.
|
|
60
|
+
Header unset Set-Cookie
|
|
61
|
+
|
|
50
62
|
SetEnv no-gzip
|
|
51
63
|
</LocationMatch>
|
|
52
64
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
passenger_version: 3.0.
|
|
2
|
-
passenger_root: "#{
|
|
3
|
-
passenger_ruby: "#{
|
|
1
|
+
passenger_version: 3.0.19
|
|
2
|
+
passenger_root: "#{`bash -l -c 'find #{ruby_path} -name passenger-#{passenger_version}'`.strip}"
|
|
3
|
+
passenger_ruby: "#{ruby_path}/bin/ruby"
|
|
4
4
|
passenger_lib: "#{passenger_root}/ext/apache2/mod_passenger.so"
|
|
5
5
|
passenger_listen_port: 7000
|
|
6
6
|
passenger_listen_ssl_port: 7001
|
|
@@ -46,7 +46,7 @@ http
|
|
|
46
46
|
|
|
47
47
|
passenger_root <%= rubber_env.passenger_root %>;
|
|
48
48
|
passenger_ruby <%= rubber_env.passenger_ruby %>;
|
|
49
|
-
|
|
49
|
+
|
|
50
50
|
passenger_max_pool_size <%= rubber_env.max_app_connections %>;
|
|
51
51
|
passenger_min_instances <%= rubber_env.max_app_connections %>;
|
|
52
52
|
passenger_max_instances_per_app 0;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
passenger_version: 3.0.11
|
|
2
2
|
nginx_version: 1.0.11
|
|
3
|
-
passenger_root: "#{
|
|
4
|
-
passenger_ruby: "#{
|
|
3
|
+
passenger_root: "#{`bash -l -c 'find #{ruby_path} -name passenger-#{passenger_version}'`.strip}"
|
|
4
|
+
passenger_ruby: "#{ruby_path}/bin/ruby"
|
|
5
5
|
passenger_lib: "#{passenger_root}/ext/nginx"
|
|
6
6
|
passenger_listen_port: 7000
|
|
7
7
|
passenger_listen_ssl_port: 7001
|
|
@@ -112,6 +112,53 @@ namespace :rubber do
|
|
|
112
112
|
ENDSCRIPT
|
|
113
113
|
end
|
|
114
114
|
|
|
115
|
+
desc <<-DESC
|
|
116
|
+
Promotes a slave instance to master
|
|
117
|
+
DESC
|
|
118
|
+
task :promote_slave do
|
|
119
|
+
master_alias = get_env('MASTER', "Master alias (e.g. db01)", true)
|
|
120
|
+
slave_alias = get_env('SLAVE', "Slave alias (e.g. db02)", true)
|
|
121
|
+
|
|
122
|
+
# remove the master instance so rubber doesn't try to deploy to it
|
|
123
|
+
# Stays running so needs to be manually deleted
|
|
124
|
+
master_instance = rubber_instances.remove(master_alias)
|
|
125
|
+
fatal "Master Instance does not exist: #{master_alias}" unless master_instance
|
|
126
|
+
|
|
127
|
+
slave_instance = rubber_instances[slave_alias]
|
|
128
|
+
fatal "Slave Instance does not exist: #{slave_alias}" unless slave_instance
|
|
129
|
+
|
|
130
|
+
# remove all db roles from slave
|
|
131
|
+
slave_instance.roles.delete_if {|ir| ir.name =~ /db|postgresql/ }
|
|
132
|
+
|
|
133
|
+
# add in master db roles to slave
|
|
134
|
+
new_roles = [Rubber::Configuration::RoleItem.parse("postgresql_master")]
|
|
135
|
+
new_roles = Rubber::Configuration::RoleItem.expand_role_dependencies(new_roles, get_role_dependencies)
|
|
136
|
+
slave_instance.roles = (slave_instance.roles + new_roles).uniq
|
|
137
|
+
|
|
138
|
+
rubber_instances.save()
|
|
139
|
+
|
|
140
|
+
begin
|
|
141
|
+
Timeout::timeout(10) do
|
|
142
|
+
logger.info "Stopping server on original master #{master_alias}"
|
|
143
|
+
rsudo "service monit stop || true", :hosts => master_instance.full_name
|
|
144
|
+
rsudo "service postgresql stop || true", :hosts => master_instance.full_name
|
|
145
|
+
end
|
|
146
|
+
rescue StandardError
|
|
147
|
+
logger.info "Failed to connect to original master, promoting slave anyway"
|
|
148
|
+
end
|
|
149
|
+
|
|
150
|
+
logger.info "Triggering slave promotion on new master #{slave_alias}"
|
|
151
|
+
rsudo "touch #{rubber_env.postgresql_data_dir}/trigger_file", :hosts => slave_instance.full_name
|
|
152
|
+
|
|
153
|
+
logger.info "The master instance has been removed from instances, but remains running:"
|
|
154
|
+
logger.info "#{master_alias}, #{master_instance.instance_id}, #{master_instance.external_ip}"
|
|
155
|
+
logger.info ''
|
|
156
|
+
logger.info "Roles for #{slave_alias} are now:"
|
|
157
|
+
logger.info slave_instance.roles.inspect
|
|
158
|
+
logger.info ''
|
|
159
|
+
logger.info "Promotion complete, you should commit the instance file and deploy"
|
|
160
|
+
end
|
|
161
|
+
|
|
115
162
|
desc <<-DESC
|
|
116
163
|
Starts the postgresql daemons
|
|
117
164
|
DESC
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
namespace :rubber do
|
|
2
|
+
namespace :sidekiq do
|
|
3
|
+
|
|
4
|
+
rubber.allow_optional_tasks(self)
|
|
5
|
+
|
|
6
|
+
before "deploy", "rubber:sidekiq:quiet"
|
|
7
|
+
after "deploy:stop", "rubber:sidekiq:stop"
|
|
8
|
+
after "deploy:start", "rubber:sidekiq:start"
|
|
9
|
+
after "deploy:restart", "rubber:sidekiq:restart"
|
|
10
|
+
|
|
11
|
+
desc "Quiet sidekiq (stop accepting new work)"
|
|
12
|
+
task :quiet, :roles => :sidekiq do
|
|
13
|
+
rsudo "cd #{current_path} && if [ -f #{current_path}/tmp/pids/sidekiq.pid ]; then bundle exec sidekiqctl quiet #{current_path}/tmp/pids/sidekiq.pid ; fi", :as => rubber_env.app_user
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
desc "Stop sidekiq"
|
|
17
|
+
task :stop, :roles => :sidekiq do
|
|
18
|
+
# Allow workers up to 60 seconds to finish their processing.
|
|
19
|
+
rsudo "cd #{current_path} && if [ -f #{current_path}/tmp/pids/sidekiq.pid ]; then bundle exec sidekiqctl stop #{current_path}/tmp/pids/sidekiq.pid 60 ; fi", :as => rubber_env.app_user
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
desc "Start sidekiq"
|
|
23
|
+
task :start, :roles => :sidekiq do
|
|
24
|
+
rsudo "cd #{current_path} ; nohup bundle exec sidekiq -e #{Rubber.env} -C #{current_path}/config/sidekiq.yml -P #{current_path}/tmp/pids/sidekiq.pid >> #{current_path}/log/sidekiq.log 2>&1 &", :pty => false, :as => rubber_env.app_user
|
|
25
|
+
sleep 45 # Give the workers some time to start up before moving on so monit doesn't try to start as well.
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
desc "Restart sidekiq"
|
|
29
|
+
task :restart, :roles => :sidekiq do
|
|
30
|
+
stop
|
|
31
|
+
start
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
end
|
|
35
|
+
end
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
<%
|
|
2
|
+
@path = '/etc/monit/monit.d/monit-sidekiq.conf'
|
|
3
|
+
start_program = "/usr/bin/sudo -H -u #{rubber_env.app_user} /bin/bash -l -c 'cd #{Rubber.root} ; nohup ./bin/sidekiq -e #{Rubber.env} -C #{Rubber.root}/config/sidekiq.yml -P #{Rubber.root}/tmp/pids/sidekiq.pid >> #{Rubber.root}/log/sidekiq.log 2>&1 &'"
|
|
4
|
+
stop_program = "/usr/bin/sudo -H -u #{rubber_env.app_user} /bin/bash -l -c 'cd #{Rubber.root} && if [ -f #{Rubber.root}/tmp/pids/sidekiq.pid ]; then ./bin/sidekiqctl stop #{Rubber.root}/tmp/pids/sidekiq.pid 60 ; fi'"
|
|
5
|
+
%>
|
|
6
|
+
|
|
7
|
+
check process sidekiq with pidfile <%= Rubber.root %>/tmp/pids/sidekiq.pid
|
|
8
|
+
group selenium_grid_hub
|
|
9
|
+
start program = "<%= start_program %>"
|
|
10
|
+
stop program = "<%= stop_program %>"
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
# installs, starts and stops solr
|
|
2
|
+
#
|
|
3
|
+
# * installation is ubuntu specific
|
|
4
|
+
# * start and stop tasks are using the thinking sphinx plugin
|
|
5
|
+
|
|
6
|
+
namespace :rubber do
|
|
7
|
+
|
|
8
|
+
namespace :solr do
|
|
9
|
+
|
|
10
|
+
rubber.allow_optional_tasks(self)
|
|
11
|
+
|
|
12
|
+
after "rubber:install_packages", "rubber:solr:custom_install"
|
|
13
|
+
|
|
14
|
+
desc "custom installing java and solr"
|
|
15
|
+
task :custom_install, :roles => :solr do
|
|
16
|
+
|
|
17
|
+
upload rubber_env.jdk_path, "/tmp/#{rubber_env.jdk}"
|
|
18
|
+
upload rubber_env.solr_xml_path, "/tmp/#{rubber_env.solr_xml}"
|
|
19
|
+
upload rubber_env.tarz_config_files, "/tmp/solr_conf.tar.gz"
|
|
20
|
+
rubber.sudo_script 'install_java_solr', <<-ENDSCRIPT
|
|
21
|
+
if [ ! -d "/usr/lib/jvm/jdk1.7" ]; then
|
|
22
|
+
echo 'installing oracle java'
|
|
23
|
+
tar -zxf /tmp/#{rubber_env.jdk} -C /tmp
|
|
24
|
+
sudo mkdir -p /usr/lib/jvm/jdk1.7
|
|
25
|
+
mv -f /tmp/jdk1.7.0_10/* /usr/lib/jvm/jdk1.7/
|
|
26
|
+
|
|
27
|
+
echo 'updating java alterlative'
|
|
28
|
+
update-alternatives --install "/usr/bin/java" "java" "/usr/lib/jvm/jdk1.7/bin/java" 1
|
|
29
|
+
update-alternatives --install "/usr/bin/javac" "javac" "/usr/lib/jvm/jdk1.7/bin/javac" 1
|
|
30
|
+
update-alternatives --install "/usr/bin/javaws" "javaws" "/usr/lib/jvm/jdk1.7/bin/javaws" 1
|
|
31
|
+
|
|
32
|
+
echo 'installing tomcat'
|
|
33
|
+
curl -o /tmp/apache-tomcat-7.0.34.tar.gz http://ftp.heanet.ie/mirrors/www.apache.org/dist/tomcat/tomcat-7/v7.0.34/bin/apache-tomcat-7.0.34.tar.gz
|
|
34
|
+
tar -zxf /tmp/apache-tomcat-7.0.34.tar.gz -C #{rubber_env.tomcat_dest_folder}
|
|
35
|
+
rm /tmp/apache-tomcat-7.0.34.tar.gz
|
|
36
|
+
|
|
37
|
+
echo 'installing solr'
|
|
38
|
+
curl -o /tmp/apache-solr-4.0.0.tgz http://ftp.heanet.ie/mirrors/www.apache.org/dist/lucene/solr/4.0.0/apache-solr-4.0.0.tgz
|
|
39
|
+
tar -zxf /tmp/apache-solr-4.0.0.tgz -C /tmp
|
|
40
|
+
cp /tmp/apache-solr-4.0.0/dist/apache-solr-4.0.0.war /mnt/apache-tomcat-7.0.34/webapps/solr.war
|
|
41
|
+
rm -fr /tmp/apache-solr-4.0.0*
|
|
42
|
+
|
|
43
|
+
echo 'setting up solr'
|
|
44
|
+
mkdir -p #{rubber_env.solr_home_dest_foler}/solr/data
|
|
45
|
+
mkdir -p #{rubber_env.solr_home_dest_foler}/solr/#{rubber_env.core_name}
|
|
46
|
+
tar -zxf /tmp/solr_conf.tar.gz -C /mnt/solr/#{rubber_env.core_name}
|
|
47
|
+
mv /tmp/#{rubber_env.solr_xml} #{rubber_env.solr_home_dest_foler}/solr
|
|
48
|
+
rm /tmp/solr_conf.tar.gz
|
|
49
|
+
fi
|
|
50
|
+
ENDSCRIPT
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
def set_java_opts
|
|
55
|
+
"export JAVA_OPTS='-server -Xmx#{rubber_env.Xmx} -Dsolr.data.dir=#{rubber_env.solr_home_dest_foler}/solr/data -Dsolr.solr.home=#{rubber_env.solr_home_dest_foler}/solr'"
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
desc "start solr"
|
|
59
|
+
task :start_solr, :roles => :solr do
|
|
60
|
+
rubber.sudo_script 'start_solr', <<-ENDSCRIPT
|
|
61
|
+
echo 'starting tomcat'
|
|
62
|
+
#{set_java_opts}
|
|
63
|
+
nohup #{rubber_env.tomcat_dest_folder}/apache-tomcat-7.0.34/bin/startup.sh &
|
|
64
|
+
sleep 5
|
|
65
|
+
ENDSCRIPT
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
desc "stop solr"
|
|
69
|
+
task :stop_solr, :roles => :solr do
|
|
70
|
+
rubber.sudo_script 'stop_solr', <<-ENDSCRIPT
|
|
71
|
+
echo 'stoping tomcat'
|
|
72
|
+
#{set_java_opts}
|
|
73
|
+
#{rubber_env.tomcat_dest_folder}/apache-tomcat-7.0.34/bin/shutdown.sh
|
|
74
|
+
ENDSCRIPT
|
|
75
|
+
end
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
end
|