rubber 1.0.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (163) hide show
  1. data/CHANGELOG +39 -0
  2. data/COPYING +339 -0
  3. data/README +6 -0
  4. data/TODO +11 -0
  5. data/VERSION +1 -0
  6. data/bin/vulcanize +41 -0
  7. data/generators/vulcanize/USAGE +6 -0
  8. data/generators/vulcanize/templates/apache/config/rubber/deploy-apache.rb +51 -0
  9. data/generators/vulcanize/templates/apache/config/rubber/role/apache/deflate.conf +10 -0
  10. data/generators/vulcanize/templates/apache/config/rubber/role/apache/expires.conf +9 -0
  11. data/generators/vulcanize/templates/apache/config/rubber/role/apache/headers.conf +6 -0
  12. data/generators/vulcanize/templates/apache/config/rubber/role/apache/monit-apache.conf +8 -0
  13. data/generators/vulcanize/templates/apache/config/rubber/role/apache/ports.conf +5 -0
  14. data/generators/vulcanize/templates/apache/config/rubber/role/apache/setenvif.conf +52 -0
  15. data/generators/vulcanize/templates/apache/config/rubber/role/web_tools/tools-apache-vhost.conf +62 -0
  16. data/generators/vulcanize/templates/apache/config/rubber/role/web_tools/tools-apache.auth +7 -0
  17. data/generators/vulcanize/templates/apache/config/rubber/role/web_tools/tools-index.html +30 -0
  18. data/generators/vulcanize/templates/apache/config/rubber/rubber-apache.yml +7 -0
  19. data/generators/vulcanize/templates/apache/templates.yml +1 -0
  20. data/generators/vulcanize/templates/base/Capfile +14 -0
  21. data/generators/vulcanize/templates/base/config/deploy.rb +55 -0
  22. data/generators/vulcanize/templates/base/config/rubber/common/crontab +16 -0
  23. data/generators/vulcanize/templates/base/config/rubber/common/profile.rc +9 -0
  24. data/generators/vulcanize/templates/base/config/rubber/deploy-setup.rb +104 -0
  25. data/generators/vulcanize/templates/base/config/rubber/rubber.yml +241 -0
  26. data/generators/vulcanize/templates/base/lib/tasks/rubber.rake +15 -0
  27. data/generators/vulcanize/templates/base/script/cron-rake +18 -0
  28. data/generators/vulcanize/templates/base/script/cron-runner +18 -0
  29. data/generators/vulcanize/templates/base/script/cron-sh +67 -0
  30. data/generators/vulcanize/templates/base/templates.yml +1 -0
  31. data/generators/vulcanize/templates/complete_mongrel_mysql/config/rubber/role/haproxy/haproxy-mongrel.conf +23 -0
  32. data/generators/vulcanize/templates/complete_mongrel_mysql/config/rubber/role/nginx/nginx-mongrel.conf +113 -0
  33. data/generators/vulcanize/templates/complete_mongrel_mysql/config/rubber/rubber-complete.yml +41 -0
  34. data/generators/vulcanize/templates/complete_mongrel_mysql/templates.yml +6 -0
  35. data/generators/vulcanize/templates/complete_passenger_mysql/config/rubber/role/haproxy/haproxy-passenger.conf +19 -0
  36. data/generators/vulcanize/templates/complete_passenger_mysql/config/rubber/rubber-complete.yml +40 -0
  37. data/generators/vulcanize/templates/complete_passenger_mysql/templates.yml +10 -0
  38. data/generators/vulcanize/templates/cruise/config/rubber/deploy-cruise.rb +72 -0
  39. data/generators/vulcanize/templates/cruise/config/rubber/role/cruise/cruise +40 -0
  40. data/generators/vulcanize/templates/cruise/config/rubber/role/cruise/my.cnf +165 -0
  41. data/generators/vulcanize/templates/cruise/config/rubber/role/cruise/production.rb +8 -0
  42. data/generators/vulcanize/templates/cruise/config/rubber/role/cruise/site_config.rb +76 -0
  43. data/generators/vulcanize/templates/cruise/config/rubber/role/web_tools/cruise-nginx.conf +11 -0
  44. data/generators/vulcanize/templates/cruise/config/rubber/rubber-cruise.yml +18 -0
  45. data/generators/vulcanize/templates/cruise/templates.yml +1 -0
  46. data/generators/vulcanize/templates/haproxy/config/rubber/deploy-haproxy.rb +45 -0
  47. data/generators/vulcanize/templates/haproxy/config/rubber/role/haproxy/haproxy-base.conf +26 -0
  48. data/generators/vulcanize/templates/haproxy/config/rubber/role/haproxy/haproxy-default.conf +8 -0
  49. data/generators/vulcanize/templates/haproxy/config/rubber/role/haproxy/monit-haproxy.conf +9 -0
  50. data/generators/vulcanize/templates/haproxy/config/rubber/role/haproxy/syslog-haproxy.conf +6 -0
  51. data/generators/vulcanize/templates/haproxy/config/rubber/role/haproxy/syslogd-default.conf +17 -0
  52. data/generators/vulcanize/templates/haproxy/config/rubber/role/web_tools/haproxy-nginx.conf +10 -0
  53. data/generators/vulcanize/templates/haproxy/config/rubber/rubber-haproxy.yml +7 -0
  54. data/generators/vulcanize/templates/haproxy/templates.yml +1 -0
  55. data/generators/vulcanize/templates/memcached/config/memcached.yml +28 -0
  56. data/generators/vulcanize/templates/memcached/config/rubber/common/memcached.yml +14 -0
  57. data/generators/vulcanize/templates/memcached/config/rubber/role/memcached/memcached.conf +52 -0
  58. data/generators/vulcanize/templates/memcached/config/rubber/role/memcached/memcached_munin_plugin +249 -0
  59. data/generators/vulcanize/templates/memcached/config/rubber/rubber-memcached.yml +7 -0
  60. data/generators/vulcanize/templates/memcached/templates.yml +1 -0
  61. data/generators/vulcanize/templates/minimal_mysql/templates.yml +7 -0
  62. data/generators/vulcanize/templates/minimal_nodb/templates.yml +6 -0
  63. data/generators/vulcanize/templates/mongrel/config/rubber/deploy-mongrel.rb +75 -0
  64. data/generators/vulcanize/templates/mongrel/config/rubber/role/mongrel/mongrel_cluster.yml +12 -0
  65. data/generators/vulcanize/templates/mongrel/config/rubber/role/mongrel/monit-mongrel.conf +20 -0
  66. data/generators/vulcanize/templates/mongrel/config/rubber/rubber-mongrel.yml +9 -0
  67. data/generators/vulcanize/templates/mongrel/templates.yml +1 -0
  68. data/generators/vulcanize/templates/monit/config/rubber/common/monit-default.conf +15 -0
  69. data/generators/vulcanize/templates/monit/config/rubber/common/monit.conf +251 -0
  70. data/generators/vulcanize/templates/monit/config/rubber/deploy-monit.rb +32 -0
  71. data/generators/vulcanize/templates/monit/config/rubber/role/web_tools/monit-admin-nginx.conf +10 -0
  72. data/generators/vulcanize/templates/monit/config/rubber/rubber-monit.yml +6 -0
  73. data/generators/vulcanize/templates/monit/templates.yml +1 -0
  74. data/generators/vulcanize/templates/munin/config/rubber/common/monit-munin.conf +8 -0
  75. data/generators/vulcanize/templates/munin/config/rubber/common/munin-node.conf +48 -0
  76. data/generators/vulcanize/templates/munin/config/rubber/deploy-munin.rb +46 -0
  77. data/generators/vulcanize/templates/munin/config/rubber/role/web_tools/munin-nginx.conf +8 -0
  78. data/generators/vulcanize/templates/munin/config/rubber/role/web_tools/munin-plugins.conf +31 -0
  79. data/generators/vulcanize/templates/munin/config/rubber/role/web_tools/munin.conf +80 -0
  80. data/generators/vulcanize/templates/munin/config/rubber/rubber-munin.yml +8 -0
  81. data/generators/vulcanize/templates/munin/script/munin/example_mysql_query.rb +57 -0
  82. data/generators/vulcanize/templates/munin/script/munin/example_simple.rb +24 -0
  83. data/generators/vulcanize/templates/munin/templates.yml +1 -0
  84. data/generators/vulcanize/templates/mysql/config/rubber/common/database.yml +11 -0
  85. data/generators/vulcanize/templates/mysql/config/rubber/deploy-mysql.rb +156 -0
  86. data/generators/vulcanize/templates/mysql/config/rubber/role/db/crontab +14 -0
  87. data/generators/vulcanize/templates/mysql/config/rubber/role/db/monit-mysql.cnf +10 -0
  88. data/generators/vulcanize/templates/mysql/config/rubber/role/db/my.cnf +167 -0
  89. data/generators/vulcanize/templates/mysql/config/rubber/role/mysql_slave/mysql_slave_munin_plugin +51 -0
  90. data/generators/vulcanize/templates/mysql/config/rubber/rubber-mysql.yml +46 -0
  91. data/generators/vulcanize/templates/mysql/templates.yml +1 -0
  92. data/generators/vulcanize/templates/mysql_cluster/config/rubber/common/mysql_cluster_migrations.rb +13 -0
  93. data/generators/vulcanize/templates/mysql_cluster/config/rubber/deploy-mysql_cluster.rb +173 -0
  94. data/generators/vulcanize/templates/mysql_cluster/config/rubber/role/mysql_data/my.cnf +15 -0
  95. data/generators/vulcanize/templates/mysql_cluster/config/rubber/role/mysql_mgm/ndb_mgmd.cnf +39 -0
  96. data/generators/vulcanize/templates/mysql_cluster/config/rubber/role/mysql_sql/monit-mysql_cluster_sql.cnf +10 -0
  97. data/generators/vulcanize/templates/mysql_cluster/config/rubber/role/mysql_sql/my.cnf +23 -0
  98. data/generators/vulcanize/templates/mysql_cluster/config/rubber/rubber-mysql_cluster.yml +32 -0
  99. data/generators/vulcanize/templates/mysql_cluster/templates.yml +1 -0
  100. data/generators/vulcanize/templates/mysql_proxy/config/rubber/common/database.yml +16 -0
  101. data/generators/vulcanize/templates/mysql_proxy/config/rubber/common/monit-mysql_proxy.cnf +10 -0
  102. data/generators/vulcanize/templates/mysql_proxy/config/rubber/common/mysql-proxy +153 -0
  103. data/generators/vulcanize/templates/mysql_proxy/config/rubber/common/mysql-proxy.conf +10 -0
  104. data/generators/vulcanize/templates/mysql_proxy/config/rubber/common/mysql-proxy.lua +5 -0
  105. data/generators/vulcanize/templates/mysql_proxy/config/rubber/deploy-mysql_proxy.rb +52 -0
  106. data/generators/vulcanize/templates/mysql_proxy/config/rubber/rubber-mysql_proxy.yml +11 -0
  107. data/generators/vulcanize/templates/mysql_proxy/templates.yml +1 -0
  108. data/generators/vulcanize/templates/nginx/config/rubber/deploy-nginx.rb +45 -0
  109. data/generators/vulcanize/templates/nginx/config/rubber/role/nginx/crontab +9 -0
  110. data/generators/vulcanize/templates/nginx/config/rubber/role/nginx/monit-nginx.conf +8 -0
  111. data/generators/vulcanize/templates/nginx/config/rubber/role/nginx/nginx.conf +42 -0
  112. data/generators/vulcanize/templates/nginx/config/rubber/role/web_tools/nginx-tools.conf +55 -0
  113. data/generators/vulcanize/templates/nginx/config/rubber/role/web_tools/tools-index.html +30 -0
  114. data/generators/vulcanize/templates/nginx/config/rubber/role/web_tools/tools-nginx.auth +7 -0
  115. data/generators/vulcanize/templates/nginx/config/rubber/rubber-nginx.yml +10 -0
  116. data/generators/vulcanize/templates/nginx/templates.yml +1 -0
  117. data/generators/vulcanize/templates/passenger/config/rubber/deploy-passenger.rb +37 -0
  118. data/generators/vulcanize/templates/passenger/config/rubber/role/passenger/munin-passenger-sudoers.conf +6 -0
  119. data/generators/vulcanize/templates/passenger/config/rubber/role/passenger/munin-passenger.conf +47 -0
  120. data/generators/vulcanize/templates/passenger/config/rubber/role/passenger/passenger-apache-vhost.conf +46 -0
  121. data/generators/vulcanize/templates/passenger/config/rubber/role/passenger/passenger.conf +10 -0
  122. data/generators/vulcanize/templates/passenger/config/rubber/rubber-passenger.yml +12 -0
  123. data/generators/vulcanize/templates/passenger/templates.yml +1 -0
  124. data/generators/vulcanize/templates/sphinx/config/rubber/common/sphinx.yml +46 -0
  125. data/generators/vulcanize/templates/sphinx/config/rubber/deploy-sphinx.rb +112 -0
  126. data/generators/vulcanize/templates/sphinx/config/rubber/role/sphinx/crontab +11 -0
  127. data/generators/vulcanize/templates/sphinx/config/rubber/role/sphinx/monit-sphinx.conf +10 -0
  128. data/generators/vulcanize/templates/sphinx/config/rubber/rubber-sphinx.yml +6 -0
  129. data/generators/vulcanize/templates/sphinx/templates.yml +1 -0
  130. data/generators/vulcanize/vulcanize_generator.rb +67 -0
  131. data/lib/capistrano/hostcmd.rb +12 -0
  132. data/lib/rubber.rb +38 -0
  133. data/lib/rubber/capistrano.rb +1 -0
  134. data/lib/rubber/cloud.rb +13 -0
  135. data/lib/rubber/cloud/aws.rb +305 -0
  136. data/lib/rubber/cloud/base.rb +16 -0
  137. data/lib/rubber/configuration.rb +47 -0
  138. data/lib/rubber/dns.rb +13 -0
  139. data/lib/rubber/dns/base.rb +69 -0
  140. data/lib/rubber/dns/dyndns.rb +63 -0
  141. data/lib/rubber/dns/nettica.rb +73 -0
  142. data/lib/rubber/dns/zerigo.rb +131 -0
  143. data/lib/rubber/environment.rb +161 -0
  144. data/lib/rubber/generator.rb +197 -0
  145. data/lib/rubber/instance.rb +165 -0
  146. data/lib/rubber/recipes/rubber.rb +89 -0
  147. data/lib/rubber/recipes/rubber/bundles.rb +28 -0
  148. data/lib/rubber/recipes/rubber/deploy.rb +90 -0
  149. data/lib/rubber/recipes/rubber/instances.rb +348 -0
  150. data/lib/rubber/recipes/rubber/load_balancers.rb +44 -0
  151. data/lib/rubber/recipes/rubber/security_groups.rb +189 -0
  152. data/lib/rubber/recipes/rubber/setup.rb +357 -0
  153. data/lib/rubber/recipes/rubber/static_ips.rb +107 -0
  154. data/lib/rubber/recipes/rubber/utils.rb +203 -0
  155. data/lib/rubber/recipes/rubber/volumes.rb +264 -0
  156. data/lib/rubber/tasks/rubber.rb +221 -0
  157. data/lib/rubber/util.rb +37 -0
  158. data/test/environment_test.rb +118 -0
  159. data/test/generator_test.rb +323 -0
  160. data/test/instance_test.rb +93 -0
  161. data/test/test_helper.rb +4 -0
  162. data/test/util_test.rb +16 -0
  163. metadata +274 -0
@@ -0,0 +1,15 @@
1
+ <%
2
+
3
+ mgm_nodes = rubber_instances.for_role('mysql_mgm')
4
+ mgm_host = mgm_nodes.first.full_name
5
+
6
+ @path = "/etc/mysql/my.cnf"
7
+ @post = <<-POST
8
+ mkdir -p #{rubber_env.db_data_dir}
9
+ POST
10
+ %>
11
+
12
+ # Generated by rubber for mysql_data role
13
+
14
+ [mysql_cluster]
15
+ ndb-connectstring=<%= mgm_host %>
@@ -0,0 +1,39 @@
1
+ <%
2
+ data_nodes = rubber_instances.for_role('mysql_data')
3
+ sql_nodes = rubber_instances.for_role('mysql_sql')
4
+
5
+ @path = "/etc/mysql/ndb_mgmd.cnf"
6
+ %>
7
+
8
+ # Generated by rubber for mysql_mgm role
9
+
10
+ # You can use the following formula for obtaining a rough estimate of how much
11
+ # RAM is needed for each data node in the cluster:
12
+ # (SizeofDatabase ? NumberOfReplicas ? 1.1 ) / NumberOfDataNodes
13
+
14
+ [NDBD DEFAULT]
15
+ NoOfReplicas=<%= data_nodes.size == 1 ? 1 : 2 %>
16
+
17
+ [MYSQLD DEFAULT]
18
+ [NDB_MGMD DEFAULT]
19
+ [TCP DEFAULT]
20
+
21
+ # Managment Server
22
+ [NDB_MGMD]
23
+ HostName=<%= rubber_env.full_host %>
24
+
25
+ # Data Nodes (Where your data is stored)
26
+ <% data_nodes.each do |data_node| %>
27
+ [NDBD]
28
+ HostName=<%= data_node.full_name %>
29
+ DataDir=<%= rubber_env.db_data_dir %>
30
+ <% end %>
31
+
32
+ # SQL Nodes (what your clients connect to)
33
+ <% sql_nodes.each do |sql_node| %>
34
+ [MYSQLD]
35
+ HostName=<%= sql_node.full_name %>
36
+ <% end %>
37
+
38
+ # One extra sql_node for use by things like ndb_restore from mgm node itself.
39
+ [MYSQLD]
@@ -0,0 +1,10 @@
1
+ <%
2
+ @path = '/etc/monit/monit.d/monit-mysql_cluster_sql.conf'
3
+ %>
4
+
5
+ check process mysql_cluster_sql with pidfile /var/lib/mysql/<%= rubber_env.full_host %>.pid
6
+ group mysql_cluster_sql-<%= RUBBER_ENV %>
7
+ start program = "/etc/init.d/mysql start"
8
+ stop program = "/etc/init.d/mysql stop"
9
+ if failed host 127.0.0.1 port 3306 protocol mysql then alert
10
+ if 5 restarts within 5 cycles then timeout
@@ -0,0 +1,23 @@
1
+ <%
2
+ @path = "/etc/mysql/my.cnf"
3
+
4
+ # When sql nodes on same hosts as data nodes, then this config needs to be
5
+ # additive - the mysql_data node gets generated first due to generator order
6
+ self_instance = rubber_instances[rubber_env.host]
7
+ if self_instance.role_names.include?('mysql_data')
8
+ @additive = ['# mysql_sql start', '# mysql_sql end']
9
+ end
10
+
11
+ mgm_nodes = rubber_instances.for_role('mysql_mgm')
12
+ mgm_host = mgm_nodes.first.full_name
13
+ %>
14
+
15
+ # Generated by rubber for mysql_sql role
16
+
17
+ [client]
18
+ default-character-set = utf8
19
+
20
+ [mysqld]
21
+ default-character-set = utf8
22
+ ndbcluster
23
+ ndb-connectstring=<%= mgm_host %>
@@ -0,0 +1,32 @@
1
+ # MySQL user accounts and privileges are not automatically propagated between different MySQL servers accessing the same MySQL Cluster. Therefore, you must make sure that these are copied between the SQL nodes yourself.
2
+
3
+ # REQUIRED: The credentials for creating/accessong your app's database
4
+ #
5
+ db_user: "#{app_name}"
6
+ db_pass:
7
+ db_name: "#{app_name}_#{RUBBER_ENV}"
8
+
9
+ # REQUIRED: The command to use to do a full backup of your database using
10
+ # "rake rubber:backup_db"
11
+ db_backup_cmd: "nice mysqldump -h %host% -u %user% --password=%pass% %name% | gzip -c > %backup_file%"
12
+ # REQUIRED: The command to use to restore the database using
13
+ # "rake rubber:restore_db_s3"
14
+ # This command will receive the data generated by db_backup_cmd via
15
+ # its standard input
16
+ db_restore_cmd: "zcat - | mysql -h %host% -u %user% --password=%pass% %name%"
17
+
18
+
19
+ # REQUIRED: The directory the data nodes store the db data in
20
+ #
21
+ db_data_dir: /mnt/mysql_cluster_data
22
+
23
+ packages: [mysql-client, libmysql-ruby]
24
+
25
+
26
+ roles:
27
+ mysql_sql:
28
+ packages: [mysql-server]
29
+ mysql_mgm:
30
+ packages: [mysql-server]
31
+ mysql_data:
32
+ packages: [mysql-server]
@@ -0,0 +1 @@
1
+ description: The mysql cluster module
@@ -0,0 +1,16 @@
1
+ <%
2
+ @path = "#{RUBBER_ROOT}/config/database.yml"
3
+ %>
4
+
5
+ # Sets up rails to talk to mysql-proxy load balancer running on localhost,
6
+ # which then then balances requests between sql nodes in the cluster
7
+ <%= RUBBER_ENV %>:
8
+ adapter: mysql
9
+ encoding: utf8
10
+ database: <%= rubber_env.db_name %>
11
+ username: <%= rubber_env.db_user %>
12
+ password: <%= rubber_env.db_pass %>
13
+ host: 127.0.0.1
14
+ port: 4040
15
+
16
+
@@ -0,0 +1,10 @@
1
+ <%
2
+ @path = '/etc/monit/monit.d/monit-mysql_proxy.conf'
3
+ %>
4
+
5
+ check process mysql_proxy with pidfile /var/run/mysql-proxy.pid
6
+ group mysql_proxy-<%= RUBBER_ENV %>
7
+ start program = "/etc/init.d/mysql-proxy start"
8
+ stop program = "/etc/init.d/mysql-proxy stop"
9
+ if failed host 127.0.0.1 port 4040 protocol mysql then alert
10
+ if 5 restarts within 5 cycles then timeout
@@ -0,0 +1,153 @@
1
+ <%
2
+ @path = "/etc/init.d/mysql-proxy"
3
+ @perms = 0755
4
+ %>#! /bin/sh
5
+ ### BEGIN INIT INFO
6
+ # Provides: mysql-proxy
7
+ # Required-Start: $local_fs $remote_fs
8
+ # Required-Stop: $local_fs $remote_fs
9
+ # Default-Start: 2 3 4 5
10
+ # Default-Stop: S 0 1 6
11
+ # Short-Description: mysql-proxy daemon
12
+ # Description: Starts local proxy server
13
+ ### END INIT INFO
14
+
15
+ # Author: Matt Conway (http://github.com/wr0ngway/rubber)
16
+ #
17
+
18
+ # PATH should only include /usr/* if it runs after the mountnfs.sh script
19
+ PATH=/usr/sbin:/usr/bin:/sbin:/bin
20
+ DESC="mysql-proxy"
21
+ NAME=mysql-proxy
22
+ DAEMON=/usr/sbin/$NAME
23
+ PIDFILE=/var/run/$NAME.pid
24
+ DAEMON_ARGS="--daemon --pid-file=${PIDFILE}"
25
+ SCRIPTNAME=/etc/init.d/$NAME
26
+
27
+ # Exit if the package is not installed
28
+ [ -x "$DAEMON" ] || exit 0
29
+
30
+ # Read configuration variable file if it is present
31
+ [ -r /etc/default/$NAME ] && . /etc/default/$NAME
32
+
33
+ # Load the VERBOSE setting and other rcS variables
34
+ [ -f /etc/default/rcS ] && . /etc/default/rcS
35
+
36
+ # Define LSB log_* functions.
37
+ # Depend on lsb-base (>= 3.0-6) to ensure that this file is present.
38
+ . /lib/lsb/init-functions
39
+
40
+ #
41
+ # Function that starts the daemon/service
42
+ #
43
+ do_start()
44
+ {
45
+ # Return
46
+ # 0 if daemon has been started
47
+ # 1 if daemon was already running
48
+ # 2 if daemon could not be started
49
+ start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON --test > /dev/null \
50
+ || return 1
51
+ start-stop-daemon --start --background --quiet --pidfile $PIDFILE --exec $DAEMON -- \
52
+ $DAEMON_ARGS \
53
+ || return 2
54
+ # Add code here, if necessary, that waits for the process to be ready
55
+ # to handle requests from services started subsequently which depend
56
+ # on this one. As a last resort, sleep for some time.
57
+ }
58
+
59
+ #
60
+ # Function that stops the daemon/service
61
+ #
62
+ do_stop()
63
+ {
64
+ # Return
65
+ # 0 if daemon has been stopped
66
+ # 1 if daemon was already stopped
67
+ # 2 if daemon could not be stopped
68
+ # other if a failure occurred
69
+ start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --pidfile $PIDFILE --name $NAME
70
+ RETVAL="$?"
71
+ [ "$RETVAL" = 2 ] && return 2
72
+ # Wait for children to finish too if this is a daemon that forks
73
+ # and if the daemon is only ever run from this initscript.
74
+ # If the above conditions are not satisfied then add some other code
75
+ # that waits for the process to drop all resources that could be
76
+ # needed by services started subsequently. A last resort is to
77
+ # sleep for some time.
78
+ start-stop-daemon --stop --quiet --oknodo --retry=0/30/KILL/5 --exec $DAEMON
79
+ [ "$?" = 2 ] && return 2
80
+ # Many daemons don't delete their pidfiles when they exit.
81
+ rm -f $PIDFILE
82
+ return "$RETVAL"
83
+ }
84
+
85
+ #
86
+ # Function that sends a SIGHUP to the daemon/service
87
+ #
88
+ do_reload() {
89
+ #
90
+ # If the daemon can reload its configuration without
91
+ # restarting (for example, when it is sent a SIGHUP),
92
+ # then implement that here.
93
+ #
94
+ start-stop-daemon --stop --signal 1 --quiet --pidfile $PIDFILE --name $NAME
95
+ return 0
96
+ }
97
+
98
+ case "$1" in
99
+ start)
100
+ [ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC" "$NAME"
101
+ do_start
102
+ case "$?" in
103
+ 0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
104
+ 2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
105
+ esac
106
+ ;;
107
+ stop)
108
+ [ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME"
109
+ do_stop
110
+ case "$?" in
111
+ 0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
112
+ 2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
113
+ esac
114
+ ;;
115
+ #reload|force-reload)
116
+ #
117
+ # If do_reload() is not implemented then leave this commented out
118
+ # and leave 'force-reload' as an alias for 'restart'.
119
+ #
120
+ #log_daemon_msg "Reloading $DESC" "$NAME"
121
+ #do_reload
122
+ #log_end_msg $?
123
+ #;;
124
+ restart|force-reload)
125
+ #
126
+ # If the "reload" option is implemented then remove the
127
+ # 'force-reload' alias
128
+ #
129
+ log_daemon_msg "Restarting $DESC" "$NAME"
130
+ do_stop
131
+ case "$?" in
132
+ 0|1)
133
+ do_start
134
+ case "$?" in
135
+ 0) log_end_msg 0 ;;
136
+ 1) log_end_msg 1 ;; # Old process is still running
137
+ *) log_end_msg 1 ;; # Failed to start
138
+ esac
139
+ ;;
140
+ *)
141
+ # Failed to stop
142
+ log_end_msg 1
143
+ ;;
144
+ esac
145
+ ;;
146
+ *)
147
+ #echo "Usage: $SCRIPTNAME {start|stop|restart|reload|force-reload}" >&2
148
+ echo "Usage: $SCRIPTNAME {start|stop|restart|force-reload}" >&2
149
+ exit 3
150
+ ;;
151
+ esac
152
+
153
+ :
@@ -0,0 +1,10 @@
1
+ <%
2
+ @path = "/etc/default/mysql-proxy"
3
+
4
+ proxy_cmd = "--proxy-lua-script=/etc/mysql/mysql-proxy.lua"
5
+ rubber_instances.for_role(rubber_env.mysql_proxy_role).each do |ic|
6
+ proxy_cmd << " --proxy-backend-addresses=#{ic.full_name}:3306"
7
+ end
8
+ %>
9
+
10
+ DAEMON_ARGS="${DAEMON_ARGS} <%= proxy_cmd %>"
@@ -0,0 +1,5 @@
1
+ <%
2
+ @path = "/etc/mysql/mysql-proxy.lua"
3
+ %>
4
+
5
+ -- we could put a lua script here if we needed to customize mysql-proxy behavior
@@ -0,0 +1,52 @@
1
+
2
+ namespace :rubber do
3
+
4
+ namespace :mysql_proxy do
5
+
6
+ rubber.allow_optional_tasks(self)
7
+
8
+ # mysql-proxy needs to get stopped last and started first so that
9
+ # other processes that use db aren't affected
10
+ after "deploy:stop", "rubber:mysql_proxy:stop"
11
+ before "deploy:start", "rubber:mysql_proxy:start"
12
+ before "deploy:restart", "rubber:mysql_proxy:restart"
13
+
14
+ before "rubber:install_packages", "rubber:mysql_proxy:install"
15
+
16
+ task :install do
17
+ # Setup apt sources to getmysql-proxy (needs to happen for all roles)
18
+ # https://launchpad.net/~mysql-cge-testing/+archive
19
+ #
20
+ sources = <<-SOURCES
21
+ deb http://ppa.launchpad.net/ndb-bindings/ubuntu hardy main
22
+ deb-src http://ppa.launchpad.net/ndb-bindings/ubuntu hardy main
23
+ SOURCES
24
+ sources.gsub!(/^ */, '')
25
+ put(sources, "/etc/apt/sources.list.d/mysql_proxy.list")
26
+ end
27
+
28
+ desc <<-DESC
29
+ Starts the mysql proxy daemon
30
+ DESC
31
+ task :start do
32
+ sudo "/etc/init.d/mysql-proxy start"
33
+ end
34
+
35
+ desc <<-DESC
36
+ Stops the mysql proxy daemon
37
+ DESC
38
+ task :stop do
39
+ sudo "/etc/init.d/mysql-proxy stop"
40
+ end
41
+
42
+ desc <<-DESC
43
+ Restarts the mysql proxy daemon
44
+ DESC
45
+ task :restart do
46
+ sudo "/etc/init.d/mysql-proxy restart"
47
+ end
48
+
49
+
50
+ end
51
+
52
+ end
@@ -0,0 +1,11 @@
1
+ # MySQL user accounts and privileges are not automatically propagated between different MySQL servers accessing the same MySQL Cluster. Therefore, you must make sure that these are copied between the SQL nodes yourself.
2
+
3
+ # Uses db credtial variables from mysql/mysql_cluster
4
+ # db_user, db_pass, db_name
5
+
6
+ # REQUIRED: The role of the servers mysql_proxy load balances sql requests to.
7
+ # e.g. 'mysql_sql' for mysql_cluster, or 'db' for both mysql master/slave,
8
+ # or 'mysql_master' for just master
9
+ mysql_proxy_role: mysql_sql
10
+
11
+ packages: [mysql-proxy]
@@ -0,0 +1 @@
1
+ description: The mysql_proxy module for load balancing to mysql servers
@@ -0,0 +1,45 @@
1
+
2
+ namespace :rubber do
3
+
4
+ namespace :nginx do
5
+
6
+ rubber.allow_optional_tasks(self)
7
+
8
+ # serial_task can only be called after roles defined - not normally a problem, but
9
+ # rubber auto-roles don't get defined till after all tasks are defined
10
+ on :load do
11
+ rubber.serial_task self, :serial_restart, :roles => :nginx do
12
+ run "/etc/init.d/nginx restart"
13
+ end
14
+ rubber.serial_task self, :serial_reload, :roles => :nginx do
15
+ run "if ! ps ax | grep -v grep | grep -c nginx &> /dev/null; then /etc/init.d/nginx start; else /etc/init.d/nginx reload; fi"
16
+ end
17
+ end
18
+
19
+ before "deploy:stop", "rubber:nginx:stop"
20
+ after "deploy:start", "rubber:nginx:start"
21
+ after "deploy:restart", "rubber:nginx:reload"
22
+
23
+ desc "Stops the nginx web server"
24
+ task :stop, :roles => :nginx, :on_error => :continue do
25
+ run "/etc/init.d/nginx stop"
26
+ end
27
+
28
+ desc "Starts the nginx web server"
29
+ task :start, :roles => :nginx do
30
+ run "/etc/init.d/nginx start"
31
+ end
32
+
33
+ desc "Restarts the nginx web server"
34
+ task :restart, :roles => :nginx do
35
+ serial_restart
36
+ end
37
+
38
+ desc "Reloads the nginx web server"
39
+ task :reload, :roles => :nginx do
40
+ serial_reload
41
+ end
42
+
43
+ end
44
+
45
+ end