rubber-jcarnegie 0.0.1

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.
Files changed (396) hide show
  1. data/CHANGELOG +477 -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 +25 -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 +8 -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 +79 -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 +34 -0
  18. data/generators/vulcanize/templates/apache/config/rubber/rubber-apache.yml +6 -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/Rakefile +23 -0
  22. data/generators/vulcanize/templates/base/config/deploy.rb +56 -0
  23. data/generators/vulcanize/templates/base/config/rubber/common/crontab +22 -0
  24. data/generators/vulcanize/templates/base/config/rubber/common/monit-postfix.conf +8 -0
  25. data/generators/vulcanize/templates/base/config/rubber/common/rubber.profile +13 -0
  26. data/generators/vulcanize/templates/base/config/rubber/deploy-setup.rb +92 -0
  27. data/generators/vulcanize/templates/base/config/rubber/deploy-util.rb +97 -0
  28. data/generators/vulcanize/templates/base/config/rubber/rubber-dns.yml +78 -0
  29. data/generators/vulcanize/templates/base/config/rubber/rubber-rvm.yml +33 -0
  30. data/generators/vulcanize/templates/base/config/rubber/rubber.yml +241 -0
  31. data/generators/vulcanize/templates/base/lib/tasks/rubber.rake +15 -0
  32. data/generators/vulcanize/templates/base/script/cron-rake +18 -0
  33. data/generators/vulcanize/templates/base/script/cron-runner +18 -0
  34. data/generators/vulcanize/templates/base/script/cron-sh +67 -0
  35. data/generators/vulcanize/templates/base/templates.rb +11 -0
  36. data/generators/vulcanize/templates/base/templates.yml +6 -0
  37. data/generators/vulcanize/templates/cassandra/config/rubber/deploy-cassandra.rb +88 -0
  38. data/generators/vulcanize/templates/cassandra/config/rubber/role/cassandra/cassandra.in.sh +60 -0
  39. data/generators/vulcanize/templates/cassandra/config/rubber/role/cassandra/cassandra.yaml +210 -0
  40. data/generators/vulcanize/templates/cassandra/config/rubber/role/cassandra/log4j-server.properties +45 -0
  41. data/generators/vulcanize/templates/cassandra/config/rubber/role/cassandra/monit-cassandra.conf +8 -0
  42. data/generators/vulcanize/templates/cassandra/config/rubber/rubber-cassandra.yml +18 -0
  43. data/generators/vulcanize/templates/cassandra/templates.yml +1 -0
  44. data/generators/vulcanize/templates/complete_mongrel_mysql/config/rubber/role/haproxy/haproxy-mongrel.conf +23 -0
  45. data/generators/vulcanize/templates/complete_mongrel_mysql/config/rubber/role/nginx/nginx-mongrel.conf +113 -0
  46. data/generators/vulcanize/templates/complete_mongrel_mysql/config/rubber/rubber-complete.yml +41 -0
  47. data/generators/vulcanize/templates/complete_mongrel_mysql/templates.yml +6 -0
  48. data/generators/vulcanize/templates/complete_passenger/config/rubber/role/haproxy/haproxy-passenger.conf +21 -0
  49. data/generators/vulcanize/templates/complete_passenger/config/rubber/rubber-complete.yml +40 -0
  50. data/generators/vulcanize/templates/complete_passenger/templates.rb +9 -0
  51. data/generators/vulcanize/templates/complete_passenger/templates.yml +9 -0
  52. data/generators/vulcanize/templates/complete_passenger_mysql/templates.yml +4 -0
  53. data/generators/vulcanize/templates/complete_passenger_postgresql/templates.yml +4 -0
  54. data/generators/vulcanize/templates/cruise/config/rubber/deploy-cruise.rb +72 -0
  55. data/generators/vulcanize/templates/cruise/config/rubber/role/cruise/cruise +40 -0
  56. data/generators/vulcanize/templates/cruise/config/rubber/role/cruise/my.cnf +165 -0
  57. data/generators/vulcanize/templates/cruise/config/rubber/role/cruise/production.rb +8 -0
  58. data/generators/vulcanize/templates/cruise/config/rubber/role/cruise/site_config.rb +76 -0
  59. data/generators/vulcanize/templates/cruise/config/rubber/role/web_tools/cruise-nginx.conf +11 -0
  60. data/generators/vulcanize/templates/cruise/config/rubber/rubber-cruise.yml +18 -0
  61. data/generators/vulcanize/templates/cruise/templates.yml +1 -0
  62. data/generators/vulcanize/templates/haproxy/config/rubber/deploy-haproxy.rb +45 -0
  63. data/generators/vulcanize/templates/haproxy/config/rubber/role/haproxy/haproxy-base.conf +26 -0
  64. data/generators/vulcanize/templates/haproxy/config/rubber/role/haproxy/haproxy-default.conf +8 -0
  65. data/generators/vulcanize/templates/haproxy/config/rubber/role/haproxy/monit-haproxy.conf +9 -0
  66. data/generators/vulcanize/templates/haproxy/config/rubber/role/haproxy/syslog-haproxy.conf +11 -0
  67. data/generators/vulcanize/templates/haproxy/config/rubber/role/haproxy/syslogd-default.conf +21 -0
  68. data/generators/vulcanize/templates/haproxy/config/rubber/role/web_tools/haproxy-nginx.conf +10 -0
  69. data/generators/vulcanize/templates/haproxy/config/rubber/rubber-haproxy.yml +7 -0
  70. data/generators/vulcanize/templates/haproxy/templates.yml +1 -0
  71. data/generators/vulcanize/templates/jetty/config/rubber/deploy-jetty.rb +59 -0
  72. data/generators/vulcanize/templates/jetty/config/rubber/role/jetty/jetty.sh +589 -0
  73. data/generators/vulcanize/templates/jetty/config/rubber/role/jetty/jetty.xml +199 -0
  74. data/generators/vulcanize/templates/jetty/config/rubber/role/jetty/monit-jetty.conf +9 -0
  75. data/generators/vulcanize/templates/jetty/config/rubber/rubber-jetty.yml +10 -0
  76. data/generators/vulcanize/templates/jetty/templates.yml +1 -0
  77. data/generators/vulcanize/templates/memcached/config/memcached.yml +28 -0
  78. data/generators/vulcanize/templates/memcached/config/rubber/common/memcached.yml +14 -0
  79. data/generators/vulcanize/templates/memcached/config/rubber/role/memcached/memcached.conf +52 -0
  80. data/generators/vulcanize/templates/memcached/config/rubber/role/memcached/memcached_munin_plugin +249 -0
  81. data/generators/vulcanize/templates/memcached/config/rubber/rubber-memcached.yml +7 -0
  82. data/generators/vulcanize/templates/memcached/templates.yml +1 -0
  83. data/generators/vulcanize/templates/minimal_mysql/templates.yml +7 -0
  84. data/generators/vulcanize/templates/minimal_nodb/templates.yml +6 -0
  85. data/generators/vulcanize/templates/mongrel/config/rubber/deploy-mongrel.rb +75 -0
  86. data/generators/vulcanize/templates/mongrel/config/rubber/role/mongrel/mongrel_cluster.yml +12 -0
  87. data/generators/vulcanize/templates/mongrel/config/rubber/role/mongrel/monit-mongrel.conf +20 -0
  88. data/generators/vulcanize/templates/mongrel/config/rubber/rubber-mongrel.yml +9 -0
  89. data/generators/vulcanize/templates/mongrel/templates.yml +1 -0
  90. data/generators/vulcanize/templates/monit/config/rubber/common/monit-default.conf +15 -0
  91. data/generators/vulcanize/templates/monit/config/rubber/common/monit.conf +252 -0
  92. data/generators/vulcanize/templates/monit/config/rubber/deploy-monit.rb +33 -0
  93. data/generators/vulcanize/templates/monit/config/rubber/role/web_tools/monit-admin-nginx.conf +10 -0
  94. data/generators/vulcanize/templates/monit/config/rubber/rubber-monit.yml +6 -0
  95. data/generators/vulcanize/templates/monit/templates.yml +1 -0
  96. data/generators/vulcanize/templates/munin/config/rubber/common/monit-munin.conf +8 -0
  97. data/generators/vulcanize/templates/munin/config/rubber/common/munin-node.conf +48 -0
  98. data/generators/vulcanize/templates/munin/config/rubber/common/munin-plugins.conf +11 -0
  99. data/generators/vulcanize/templates/munin/config/rubber/deploy-munin.rb +46 -0
  100. data/generators/vulcanize/templates/munin/config/rubber/role/web_tools/munin-nginx.conf +8 -0
  101. data/generators/vulcanize/templates/munin/config/rubber/role/web_tools/munin-plugins.conf +31 -0
  102. data/generators/vulcanize/templates/munin/config/rubber/role/web_tools/munin.conf +115 -0
  103. data/generators/vulcanize/templates/munin/config/rubber/rubber-munin.yml +8 -0
  104. data/generators/vulcanize/templates/munin/script/munin/example_mysql_query.rb +55 -0
  105. data/generators/vulcanize/templates/munin/script/munin/example_simple.rb +24 -0
  106. data/generators/vulcanize/templates/munin/templates.yml +1 -0
  107. data/generators/vulcanize/templates/mysql/config/rubber/common/database.yml +12 -0
  108. data/generators/vulcanize/templates/mysql/config/rubber/deploy-mysql.rb +169 -0
  109. data/generators/vulcanize/templates/mysql/config/rubber/role/db/apparmor-mysql.conf +46 -0
  110. data/generators/vulcanize/templates/mysql/config/rubber/role/db/crontab +14 -0
  111. data/generators/vulcanize/templates/mysql/config/rubber/role/db/monit-mysql.cnf +10 -0
  112. data/generators/vulcanize/templates/mysql/config/rubber/role/db/my.cnf +163 -0
  113. data/generators/vulcanize/templates/mysql/config/rubber/role/mysql_slave/mysql_slave_munin_plugin +51 -0
  114. data/generators/vulcanize/templates/mysql/config/rubber/rubber-mysql.yml +47 -0
  115. data/generators/vulcanize/templates/mysql/templates.yml +1 -0
  116. data/generators/vulcanize/templates/mysql_cluster/config/rubber/common/mysql_cluster_migrations.rb +13 -0
  117. data/generators/vulcanize/templates/mysql_cluster/config/rubber/deploy-mysql_cluster.rb +177 -0
  118. data/generators/vulcanize/templates/mysql_cluster/config/rubber/role/mysql_data/my.cnf +15 -0
  119. data/generators/vulcanize/templates/mysql_cluster/config/rubber/role/mysql_mgm/ndb_mgmd.cnf +39 -0
  120. data/generators/vulcanize/templates/mysql_cluster/config/rubber/role/mysql_sql/monit-mysql_cluster_sql.cnf +10 -0
  121. data/generators/vulcanize/templates/mysql_cluster/config/rubber/role/mysql_sql/my.cnf +23 -0
  122. data/generators/vulcanize/templates/mysql_cluster/config/rubber/rubber-mysql_cluster.yml +32 -0
  123. data/generators/vulcanize/templates/mysql_cluster/templates.yml +1 -0
  124. data/generators/vulcanize/templates/mysql_proxy/config/rubber/common/database.yml +16 -0
  125. data/generators/vulcanize/templates/mysql_proxy/config/rubber/common/monit-mysql_proxy.cnf +10 -0
  126. data/generators/vulcanize/templates/mysql_proxy/config/rubber/common/mysql-proxy +153 -0
  127. data/generators/vulcanize/templates/mysql_proxy/config/rubber/common/mysql-proxy.conf +10 -0
  128. data/generators/vulcanize/templates/mysql_proxy/config/rubber/common/mysql-proxy.lua +5 -0
  129. data/generators/vulcanize/templates/mysql_proxy/config/rubber/deploy-mysql_proxy.rb +52 -0
  130. data/generators/vulcanize/templates/mysql_proxy/config/rubber/rubber-mysql_proxy.yml +11 -0
  131. data/generators/vulcanize/templates/mysql_proxy/templates.yml +1 -0
  132. data/generators/vulcanize/templates/nginx/config/rubber/deploy-nginx.rb +45 -0
  133. data/generators/vulcanize/templates/nginx/config/rubber/role/nginx/crontab +9 -0
  134. data/generators/vulcanize/templates/nginx/config/rubber/role/nginx/monit-nginx.conf +8 -0
  135. data/generators/vulcanize/templates/nginx/config/rubber/role/nginx/nginx.conf +42 -0
  136. data/generators/vulcanize/templates/nginx/config/rubber/role/web_tools/nginx-tools.conf +55 -0
  137. data/generators/vulcanize/templates/nginx/config/rubber/role/web_tools/tools-index.html +30 -0
  138. data/generators/vulcanize/templates/nginx/config/rubber/role/web_tools/tools-nginx.auth +7 -0
  139. data/generators/vulcanize/templates/nginx/config/rubber/rubber-nginx.yml +10 -0
  140. data/generators/vulcanize/templates/nginx/templates.yml +1 -0
  141. data/generators/vulcanize/templates/node/INSTALL_NOTES +20 -0
  142. data/generators/vulcanize/templates/node/config/rubber/deploy-node.rb +33 -0
  143. data/generators/vulcanize/templates/node/config/rubber/rubber-node.yml +1 -0
  144. data/generators/vulcanize/templates/passenger/config/rubber/deploy-passenger.rb +45 -0
  145. data/generators/vulcanize/templates/passenger/config/rubber/role/passenger/munin-passenger-memory.conf +34 -0
  146. data/generators/vulcanize/templates/passenger/config/rubber/role/passenger/munin-passenger-sudoers.conf +8 -0
  147. data/generators/vulcanize/templates/passenger/config/rubber/role/passenger/munin-passenger.conf +47 -0
  148. data/generators/vulcanize/templates/passenger/config/rubber/role/passenger/passenger-apache-vhost.conf +48 -0
  149. data/generators/vulcanize/templates/passenger/config/rubber/role/passenger/passenger.conf +41 -0
  150. data/generators/vulcanize/templates/passenger/config/rubber/rubber-passenger.yml +15 -0
  151. data/generators/vulcanize/templates/passenger/templates.yml +3 -0
  152. data/generators/vulcanize/templates/postgresql/config/rubber/common/database.yml +12 -0
  153. data/generators/vulcanize/templates/postgresql/config/rubber/deploy-postgresql.rb +158 -0
  154. data/generators/vulcanize/templates/postgresql/config/rubber/role/db/crontab +14 -0
  155. data/generators/vulcanize/templates/postgresql/config/rubber/role/db/monit-postgresql.conf +10 -0
  156. data/generators/vulcanize/templates/postgresql/config/rubber/role/db/munin-postgresql.conf +7 -0
  157. data/generators/vulcanize/templates/postgresql/config/rubber/role/db/pg_hba.conf +89 -0
  158. data/generators/vulcanize/templates/postgresql/config/rubber/role/db/postgresql-sysctl.conf +6 -0
  159. data/generators/vulcanize/templates/postgresql/config/rubber/role/db/postgresql.conf +531 -0
  160. data/generators/vulcanize/templates/postgresql/config/rubber/rubber-postgresql.yml +45 -0
  161. data/generators/vulcanize/templates/postgresql/templates.yml +1 -0
  162. data/generators/vulcanize/templates/redis/config/rubber/deploy-redis.rb +76 -0
  163. data/generators/vulcanize/templates/redis/config/rubber/role/redis/crontab +8 -0
  164. data/generators/vulcanize/templates/redis/config/rubber/role/redis/monit-redis.conf +9 -0
  165. data/generators/vulcanize/templates/redis/config/rubber/role/redis/redis.conf +320 -0
  166. data/generators/vulcanize/templates/redis/config/rubber/rubber-redis.yml +9 -0
  167. data/generators/vulcanize/templates/redis/templates.yml +1 -0
  168. data/generators/vulcanize/templates/resque/config/initializers/resque.rb +15 -0
  169. data/generators/vulcanize/templates/resque/config/rubber/common/resque.yml +5 -0
  170. data/generators/vulcanize/templates/resque/config/rubber/deploy-resque.rb +58 -0
  171. data/generators/vulcanize/templates/resque/config/rubber/role/resque_web/monit-resque_web.conf +14 -0
  172. data/generators/vulcanize/templates/resque/config/rubber/role/resque_worker/monit-resque_worker.conf +19 -0
  173. data/generators/vulcanize/templates/resque/config/rubber/rubber-resque.yml +18 -0
  174. data/generators/vulcanize/templates/resque/script/resque_worker_management.rb +144 -0
  175. data/generators/vulcanize/templates/resque/templates.rb +1 -0
  176. data/generators/vulcanize/templates/resque/templates.yml +3 -0
  177. data/generators/vulcanize/templates/sphinx/config/rubber/common/sphinx.yml +46 -0
  178. data/generators/vulcanize/templates/sphinx/config/rubber/deploy-sphinx.rb +112 -0
  179. data/generators/vulcanize/templates/sphinx/config/rubber/role/sphinx/crontab +11 -0
  180. data/generators/vulcanize/templates/sphinx/config/rubber/role/sphinx/monit-sphinx.conf +13 -0
  181. data/generators/vulcanize/templates/sphinx/config/rubber/rubber-sphinx.yml +6 -0
  182. data/generators/vulcanize/templates/sphinx/templates.yml +1 -0
  183. data/generators/vulcanize/vulcanize_generator.rb +184 -0
  184. data/lib/capistrano/hostcmd.rb +12 -0
  185. data/lib/generators/vulcanize/USAGE +6 -0
  186. data/lib/generators/vulcanize/templates/apache/config/rubber/deploy-apache.rb +51 -0
  187. data/lib/generators/vulcanize/templates/apache/config/rubber/role/apache/deflate.conf +10 -0
  188. data/lib/generators/vulcanize/templates/apache/config/rubber/role/apache/expires.conf +9 -0
  189. data/lib/generators/vulcanize/templates/apache/config/rubber/role/apache/headers.conf +6 -0
  190. data/lib/generators/vulcanize/templates/apache/config/rubber/role/apache/monit-apache.conf +8 -0
  191. data/lib/generators/vulcanize/templates/apache/config/rubber/role/apache/ports.conf +8 -0
  192. data/lib/generators/vulcanize/templates/apache/config/rubber/role/apache/setenvif.conf +52 -0
  193. data/lib/generators/vulcanize/templates/apache/config/rubber/role/web_tools/tools-apache-vhost.conf +79 -0
  194. data/lib/generators/vulcanize/templates/apache/config/rubber/role/web_tools/tools-apache.auth +7 -0
  195. data/lib/generators/vulcanize/templates/apache/config/rubber/role/web_tools/tools-index.html +34 -0
  196. data/lib/generators/vulcanize/templates/apache/config/rubber/rubber-apache.yml +6 -0
  197. data/lib/generators/vulcanize/templates/apache/templates.yml +1 -0
  198. data/lib/generators/vulcanize/templates/base/Capfile +14 -0
  199. data/lib/generators/vulcanize/templates/base/Rakefile +23 -0
  200. data/lib/generators/vulcanize/templates/base/config/deploy.rb +56 -0
  201. data/lib/generators/vulcanize/templates/base/config/rubber/common/crontab +22 -0
  202. data/lib/generators/vulcanize/templates/base/config/rubber/common/monit-postfix.conf +8 -0
  203. data/lib/generators/vulcanize/templates/base/config/rubber/common/rubber.profile +13 -0
  204. data/lib/generators/vulcanize/templates/base/config/rubber/deploy-setup.rb +92 -0
  205. data/lib/generators/vulcanize/templates/base/config/rubber/deploy-util.rb +97 -0
  206. data/lib/generators/vulcanize/templates/base/config/rubber/rubber-dns.yml +78 -0
  207. data/lib/generators/vulcanize/templates/base/config/rubber/rubber-rvm.yml +33 -0
  208. data/lib/generators/vulcanize/templates/base/config/rubber/rubber.yml +241 -0
  209. data/lib/generators/vulcanize/templates/base/lib/tasks/rubber.rake +15 -0
  210. data/lib/generators/vulcanize/templates/base/script/cron-rake +18 -0
  211. data/lib/generators/vulcanize/templates/base/script/cron-runner +18 -0
  212. data/lib/generators/vulcanize/templates/base/script/cron-sh +67 -0
  213. data/lib/generators/vulcanize/templates/base/templates.rb +11 -0
  214. data/lib/generators/vulcanize/templates/base/templates.yml +6 -0
  215. data/lib/generators/vulcanize/templates/cassandra/config/rubber/deploy-cassandra.rb +88 -0
  216. data/lib/generators/vulcanize/templates/cassandra/config/rubber/role/cassandra/cassandra.in.sh +60 -0
  217. data/lib/generators/vulcanize/templates/cassandra/config/rubber/role/cassandra/cassandra.yaml +210 -0
  218. data/lib/generators/vulcanize/templates/cassandra/config/rubber/role/cassandra/log4j-server.properties +45 -0
  219. data/lib/generators/vulcanize/templates/cassandra/config/rubber/role/cassandra/monit-cassandra.conf +8 -0
  220. data/lib/generators/vulcanize/templates/cassandra/config/rubber/rubber-cassandra.yml +18 -0
  221. data/lib/generators/vulcanize/templates/cassandra/templates.yml +1 -0
  222. data/lib/generators/vulcanize/templates/complete_mongrel_mysql/config/rubber/role/haproxy/haproxy-mongrel.conf +23 -0
  223. data/lib/generators/vulcanize/templates/complete_mongrel_mysql/config/rubber/role/nginx/nginx-mongrel.conf +113 -0
  224. data/lib/generators/vulcanize/templates/complete_mongrel_mysql/config/rubber/rubber-complete.yml +41 -0
  225. data/lib/generators/vulcanize/templates/complete_mongrel_mysql/templates.yml +6 -0
  226. data/lib/generators/vulcanize/templates/complete_passenger/config/rubber/role/haproxy/haproxy-passenger.conf +21 -0
  227. data/lib/generators/vulcanize/templates/complete_passenger/config/rubber/rubber-complete.yml +40 -0
  228. data/lib/generators/vulcanize/templates/complete_passenger/templates.rb +9 -0
  229. data/lib/generators/vulcanize/templates/complete_passenger/templates.yml +9 -0
  230. data/lib/generators/vulcanize/templates/complete_passenger_mysql/templates.yml +4 -0
  231. data/lib/generators/vulcanize/templates/complete_passenger_postgresql/templates.yml +4 -0
  232. data/lib/generators/vulcanize/templates/cruise/config/rubber/deploy-cruise.rb +72 -0
  233. data/lib/generators/vulcanize/templates/cruise/config/rubber/role/cruise/cruise +40 -0
  234. data/lib/generators/vulcanize/templates/cruise/config/rubber/role/cruise/my.cnf +165 -0
  235. data/lib/generators/vulcanize/templates/cruise/config/rubber/role/cruise/production.rb +8 -0
  236. data/lib/generators/vulcanize/templates/cruise/config/rubber/role/cruise/site_config.rb +76 -0
  237. data/lib/generators/vulcanize/templates/cruise/config/rubber/role/web_tools/cruise-nginx.conf +11 -0
  238. data/lib/generators/vulcanize/templates/cruise/config/rubber/rubber-cruise.yml +18 -0
  239. data/lib/generators/vulcanize/templates/cruise/templates.yml +1 -0
  240. data/lib/generators/vulcanize/templates/haproxy/config/rubber/deploy-haproxy.rb +45 -0
  241. data/lib/generators/vulcanize/templates/haproxy/config/rubber/role/haproxy/haproxy-base.conf +26 -0
  242. data/lib/generators/vulcanize/templates/haproxy/config/rubber/role/haproxy/haproxy-default.conf +8 -0
  243. data/lib/generators/vulcanize/templates/haproxy/config/rubber/role/haproxy/monit-haproxy.conf +9 -0
  244. data/lib/generators/vulcanize/templates/haproxy/config/rubber/role/haproxy/syslog-haproxy.conf +11 -0
  245. data/lib/generators/vulcanize/templates/haproxy/config/rubber/role/haproxy/syslogd-default.conf +21 -0
  246. data/lib/generators/vulcanize/templates/haproxy/config/rubber/role/web_tools/haproxy-nginx.conf +10 -0
  247. data/lib/generators/vulcanize/templates/haproxy/config/rubber/rubber-haproxy.yml +7 -0
  248. data/lib/generators/vulcanize/templates/haproxy/templates.yml +1 -0
  249. data/lib/generators/vulcanize/templates/jetty/config/rubber/deploy-jetty.rb +59 -0
  250. data/lib/generators/vulcanize/templates/jetty/config/rubber/role/jetty/jetty.sh +589 -0
  251. data/lib/generators/vulcanize/templates/jetty/config/rubber/role/jetty/jetty.xml +199 -0
  252. data/lib/generators/vulcanize/templates/jetty/config/rubber/role/jetty/monit-jetty.conf +9 -0
  253. data/lib/generators/vulcanize/templates/jetty/config/rubber/rubber-jetty.yml +10 -0
  254. data/lib/generators/vulcanize/templates/jetty/templates.yml +1 -0
  255. data/lib/generators/vulcanize/templates/memcached/config/memcached.yml +28 -0
  256. data/lib/generators/vulcanize/templates/memcached/config/rubber/common/memcached.yml +14 -0
  257. data/lib/generators/vulcanize/templates/memcached/config/rubber/role/memcached/memcached.conf +52 -0
  258. data/lib/generators/vulcanize/templates/memcached/config/rubber/role/memcached/memcached_munin_plugin +249 -0
  259. data/lib/generators/vulcanize/templates/memcached/config/rubber/rubber-memcached.yml +7 -0
  260. data/lib/generators/vulcanize/templates/memcached/templates.yml +1 -0
  261. data/lib/generators/vulcanize/templates/minimal_mysql/templates.yml +7 -0
  262. data/lib/generators/vulcanize/templates/minimal_nodb/templates.yml +6 -0
  263. data/lib/generators/vulcanize/templates/mongrel/config/rubber/deploy-mongrel.rb +75 -0
  264. data/lib/generators/vulcanize/templates/mongrel/config/rubber/role/mongrel/mongrel_cluster.yml +12 -0
  265. data/lib/generators/vulcanize/templates/mongrel/config/rubber/role/mongrel/monit-mongrel.conf +20 -0
  266. data/lib/generators/vulcanize/templates/mongrel/config/rubber/rubber-mongrel.yml +9 -0
  267. data/lib/generators/vulcanize/templates/mongrel/templates.yml +1 -0
  268. data/lib/generators/vulcanize/templates/monit/config/rubber/common/monit-default.conf +15 -0
  269. data/lib/generators/vulcanize/templates/monit/config/rubber/common/monit.conf +252 -0
  270. data/lib/generators/vulcanize/templates/monit/config/rubber/deploy-monit.rb +33 -0
  271. data/lib/generators/vulcanize/templates/monit/config/rubber/role/web_tools/monit-admin-nginx.conf +10 -0
  272. data/lib/generators/vulcanize/templates/monit/config/rubber/rubber-monit.yml +6 -0
  273. data/lib/generators/vulcanize/templates/monit/templates.yml +1 -0
  274. data/lib/generators/vulcanize/templates/munin/config/rubber/common/monit-munin.conf +8 -0
  275. data/lib/generators/vulcanize/templates/munin/config/rubber/common/munin-node.conf +48 -0
  276. data/lib/generators/vulcanize/templates/munin/config/rubber/common/munin-plugins.conf +11 -0
  277. data/lib/generators/vulcanize/templates/munin/config/rubber/deploy-munin.rb +46 -0
  278. data/lib/generators/vulcanize/templates/munin/config/rubber/role/web_tools/munin-nginx.conf +8 -0
  279. data/lib/generators/vulcanize/templates/munin/config/rubber/role/web_tools/munin-plugins.conf +31 -0
  280. data/lib/generators/vulcanize/templates/munin/config/rubber/role/web_tools/munin.conf +115 -0
  281. data/lib/generators/vulcanize/templates/munin/config/rubber/rubber-munin.yml +8 -0
  282. data/lib/generators/vulcanize/templates/munin/script/munin/example_mysql_query.rb +55 -0
  283. data/lib/generators/vulcanize/templates/munin/script/munin/example_simple.rb +24 -0
  284. data/lib/generators/vulcanize/templates/munin/templates.yml +1 -0
  285. data/lib/generators/vulcanize/templates/mysql/config/rubber/common/database.yml +12 -0
  286. data/lib/generators/vulcanize/templates/mysql/config/rubber/deploy-mysql.rb +169 -0
  287. data/lib/generators/vulcanize/templates/mysql/config/rubber/role/db/apparmor-mysql.conf +46 -0
  288. data/lib/generators/vulcanize/templates/mysql/config/rubber/role/db/crontab +14 -0
  289. data/lib/generators/vulcanize/templates/mysql/config/rubber/role/db/monit-mysql.cnf +10 -0
  290. data/lib/generators/vulcanize/templates/mysql/config/rubber/role/db/my.cnf +163 -0
  291. data/lib/generators/vulcanize/templates/mysql/config/rubber/role/mysql_slave/mysql_slave_munin_plugin +51 -0
  292. data/lib/generators/vulcanize/templates/mysql/config/rubber/rubber-mysql.yml +47 -0
  293. data/lib/generators/vulcanize/templates/mysql/templates.yml +1 -0
  294. data/lib/generators/vulcanize/templates/mysql_cluster/config/rubber/common/mysql_cluster_migrations.rb +13 -0
  295. data/lib/generators/vulcanize/templates/mysql_cluster/config/rubber/deploy-mysql_cluster.rb +177 -0
  296. data/lib/generators/vulcanize/templates/mysql_cluster/config/rubber/role/mysql_data/my.cnf +15 -0
  297. data/lib/generators/vulcanize/templates/mysql_cluster/config/rubber/role/mysql_mgm/ndb_mgmd.cnf +39 -0
  298. data/lib/generators/vulcanize/templates/mysql_cluster/config/rubber/role/mysql_sql/monit-mysql_cluster_sql.cnf +10 -0
  299. data/lib/generators/vulcanize/templates/mysql_cluster/config/rubber/role/mysql_sql/my.cnf +23 -0
  300. data/lib/generators/vulcanize/templates/mysql_cluster/config/rubber/rubber-mysql_cluster.yml +32 -0
  301. data/lib/generators/vulcanize/templates/mysql_cluster/templates.yml +1 -0
  302. data/lib/generators/vulcanize/templates/mysql_proxy/config/rubber/common/database.yml +16 -0
  303. data/lib/generators/vulcanize/templates/mysql_proxy/config/rubber/common/monit-mysql_proxy.cnf +10 -0
  304. data/lib/generators/vulcanize/templates/mysql_proxy/config/rubber/common/mysql-proxy +153 -0
  305. data/lib/generators/vulcanize/templates/mysql_proxy/config/rubber/common/mysql-proxy.conf +10 -0
  306. data/lib/generators/vulcanize/templates/mysql_proxy/config/rubber/common/mysql-proxy.lua +5 -0
  307. data/lib/generators/vulcanize/templates/mysql_proxy/config/rubber/deploy-mysql_proxy.rb +52 -0
  308. data/lib/generators/vulcanize/templates/mysql_proxy/config/rubber/rubber-mysql_proxy.yml +11 -0
  309. data/lib/generators/vulcanize/templates/mysql_proxy/templates.yml +1 -0
  310. data/lib/generators/vulcanize/templates/nginx/config/rubber/deploy-nginx.rb +45 -0
  311. data/lib/generators/vulcanize/templates/nginx/config/rubber/role/nginx/crontab +9 -0
  312. data/lib/generators/vulcanize/templates/nginx/config/rubber/role/nginx/monit-nginx.conf +8 -0
  313. data/lib/generators/vulcanize/templates/nginx/config/rubber/role/nginx/nginx.conf +42 -0
  314. data/lib/generators/vulcanize/templates/nginx/config/rubber/role/web_tools/nginx-tools.conf +55 -0
  315. data/lib/generators/vulcanize/templates/nginx/config/rubber/role/web_tools/tools-index.html +30 -0
  316. data/lib/generators/vulcanize/templates/nginx/config/rubber/role/web_tools/tools-nginx.auth +7 -0
  317. data/lib/generators/vulcanize/templates/nginx/config/rubber/rubber-nginx.yml +10 -0
  318. data/lib/generators/vulcanize/templates/nginx/templates.yml +1 -0
  319. data/lib/generators/vulcanize/templates/passenger/config/rubber/deploy-passenger.rb +45 -0
  320. data/lib/generators/vulcanize/templates/passenger/config/rubber/role/passenger/munin-passenger-memory.conf +34 -0
  321. data/lib/generators/vulcanize/templates/passenger/config/rubber/role/passenger/munin-passenger-sudoers.conf +8 -0
  322. data/lib/generators/vulcanize/templates/passenger/config/rubber/role/passenger/munin-passenger.conf +47 -0
  323. data/lib/generators/vulcanize/templates/passenger/config/rubber/role/passenger/passenger-apache-vhost.conf +48 -0
  324. data/lib/generators/vulcanize/templates/passenger/config/rubber/role/passenger/passenger.conf +41 -0
  325. data/lib/generators/vulcanize/templates/passenger/config/rubber/rubber-passenger.yml +15 -0
  326. data/lib/generators/vulcanize/templates/passenger/templates.yml +3 -0
  327. data/lib/generators/vulcanize/templates/postgresql/config/rubber/common/database.yml +12 -0
  328. data/lib/generators/vulcanize/templates/postgresql/config/rubber/deploy-postgresql.rb +158 -0
  329. data/lib/generators/vulcanize/templates/postgresql/config/rubber/role/db/crontab +14 -0
  330. data/lib/generators/vulcanize/templates/postgresql/config/rubber/role/db/monit-postgresql.conf +10 -0
  331. data/lib/generators/vulcanize/templates/postgresql/config/rubber/role/db/munin-postgresql.conf +7 -0
  332. data/lib/generators/vulcanize/templates/postgresql/config/rubber/role/db/pg_hba.conf +89 -0
  333. data/lib/generators/vulcanize/templates/postgresql/config/rubber/role/db/postgresql-sysctl.conf +6 -0
  334. data/lib/generators/vulcanize/templates/postgresql/config/rubber/role/db/postgresql.conf +531 -0
  335. data/lib/generators/vulcanize/templates/postgresql/config/rubber/rubber-postgresql.yml +45 -0
  336. data/lib/generators/vulcanize/templates/postgresql/templates.yml +1 -0
  337. data/lib/generators/vulcanize/templates/redis/config/rubber/deploy-redis.rb +76 -0
  338. data/lib/generators/vulcanize/templates/redis/config/rubber/role/redis/crontab +8 -0
  339. data/lib/generators/vulcanize/templates/redis/config/rubber/role/redis/monit-redis.conf +9 -0
  340. data/lib/generators/vulcanize/templates/redis/config/rubber/role/redis/redis.conf +320 -0
  341. data/lib/generators/vulcanize/templates/redis/config/rubber/rubber-redis.yml +9 -0
  342. data/lib/generators/vulcanize/templates/redis/templates.yml +1 -0
  343. data/lib/generators/vulcanize/templates/resque/config/initializers/resque.rb +15 -0
  344. data/lib/generators/vulcanize/templates/resque/config/rubber/common/resque.yml +5 -0
  345. data/lib/generators/vulcanize/templates/resque/config/rubber/deploy-resque.rb +58 -0
  346. data/lib/generators/vulcanize/templates/resque/config/rubber/role/resque_web/monit-resque_web.conf +14 -0
  347. data/lib/generators/vulcanize/templates/resque/config/rubber/role/resque_worker/monit-resque_worker.conf +19 -0
  348. data/lib/generators/vulcanize/templates/resque/config/rubber/rubber-resque.yml +18 -0
  349. data/lib/generators/vulcanize/templates/resque/script/resque_worker_management.rb +144 -0
  350. data/lib/generators/vulcanize/templates/resque/templates.rb +1 -0
  351. data/lib/generators/vulcanize/templates/resque/templates.yml +3 -0
  352. data/lib/generators/vulcanize/templates/sphinx/config/rubber/common/sphinx.yml +46 -0
  353. data/lib/generators/vulcanize/templates/sphinx/config/rubber/deploy-sphinx.rb +112 -0
  354. data/lib/generators/vulcanize/templates/sphinx/config/rubber/role/sphinx/crontab +11 -0
  355. data/lib/generators/vulcanize/templates/sphinx/config/rubber/role/sphinx/monit-sphinx.conf +13 -0
  356. data/lib/generators/vulcanize/templates/sphinx/config/rubber/rubber-sphinx.yml +6 -0
  357. data/lib/generators/vulcanize/templates/sphinx/templates.yml +1 -0
  358. data/lib/generators/vulcanize/vulcanize_generator.rb +184 -0
  359. data/lib/rubber.rb +76 -0
  360. data/lib/rubber/capistrano.rb +1 -0
  361. data/lib/rubber/cloud.rb +13 -0
  362. data/lib/rubber/cloud/aws.rb +362 -0
  363. data/lib/rubber/cloud/base.rb +16 -0
  364. data/lib/rubber/configuration.rb +47 -0
  365. data/lib/rubber/dns.rb +13 -0
  366. data/lib/rubber/dns/base.rb +84 -0
  367. data/lib/rubber/dns/dyndns.rb +77 -0
  368. data/lib/rubber/dns/nettica.rb +117 -0
  369. data/lib/rubber/dns/zerigo.rb +115 -0
  370. data/lib/rubber/environment.rb +177 -0
  371. data/lib/rubber/generator.rb +209 -0
  372. data/lib/rubber/instance.rb +176 -0
  373. data/lib/rubber/railtie.rb +14 -0
  374. data/lib/rubber/recipes/rubber.rb +96 -0
  375. data/lib/rubber/recipes/rubber/bundles.rb +30 -0
  376. data/lib/rubber/recipes/rubber/deploy.rb +90 -0
  377. data/lib/rubber/recipes/rubber/instances.rb +453 -0
  378. data/lib/rubber/recipes/rubber/load_balancers.rb +44 -0
  379. data/lib/rubber/recipes/rubber/security_groups.rb +189 -0
  380. data/lib/rubber/recipes/rubber/setup.rb +534 -0
  381. data/lib/rubber/recipes/rubber/spot_requests.rb +23 -0
  382. data/lib/rubber/recipes/rubber/static_ips.rb +190 -0
  383. data/lib/rubber/recipes/rubber/tags.rb +12 -0
  384. data/lib/rubber/recipes/rubber/utils.rb +226 -0
  385. data/lib/rubber/recipes/rubber/volumes.rb +265 -0
  386. data/lib/rubber/tag.rb +16 -0
  387. data/lib/rubber/tasks/rubber.rb +279 -0
  388. data/lib/rubber/util.rb +72 -0
  389. data/rails/init.rb +6 -0
  390. data/test/environment_test.rb +144 -0
  391. data/test/generator_test.rb +370 -0
  392. data/test/instance_test.rb +96 -0
  393. data/test/test_helper.rb +14 -0
  394. data/test/util_test.rb +19 -0
  395. data/test/zerigo_test.rb +88 -0
  396. metadata +540 -0
@@ -0,0 +1,265 @@
1
+ namespace :rubber do
2
+
3
+ desc <<-DESC
4
+ Sets up persistent volumes in the cloud
5
+ All volumes defined in rubber.yml will be created if neccessary, and attached/mounted on their associated instances
6
+ DESC
7
+ required_task :setup_volumes do
8
+ rubber_instances.filtered.each do |ic|
9
+ env = rubber_cfg.environment.bind(ic.role_names, ic.name)
10
+ created_vols = []
11
+ vol_specs = env.volumes || []
12
+ vol_specs.each do |vol_spec|
13
+ created_vols << setup_volume(ic, vol_spec)
14
+ end
15
+ created_vols.compact!
16
+
17
+ created_parts = []
18
+ partition_specs = env.local_volumes || []
19
+ partition_specs.each do |partition_spec|
20
+ created_parts << setup_partition(ic, partition_spec)
21
+ end
22
+ created_parts.compact!
23
+ zero_partitions(ic, created_parts)
24
+ created_vols += created_parts
25
+
26
+ created_vols = created_vols.compact.uniq
27
+ raid_specs = env.raid_volumes || []
28
+ raid_specs.each do |raid_spec|
29
+ # we want to format if we created the ec2 volumes, or if we don't have any
30
+ # ec2 volumes and are just creating raid array from ephemeral stores
31
+ format = raid_spec['source_devices'].all? {|dev| created_vols.include?(dev)}
32
+ setup_raid_volume(ic, raid_spec, format)
33
+ end
34
+ end
35
+ end
36
+
37
+ desc <<-DESC
38
+ Shows the configured persistent volumes
39
+ DESC
40
+ required_task :describe_volumes do
41
+ results = []
42
+ format = "%-20s %-15s %-15s %-20s"
43
+ results << format % %w[Id Status Attached Instance]
44
+
45
+ volumes = cloud.describe_volumes()
46
+ volumes.each do |volume|
47
+ results << format % [volume[:id], volume[:status], volume[:attachment_status], volume[:attachment_instance_id]]
48
+ end
49
+
50
+ results.each {|r| logger.info r}
51
+ end
52
+
53
+ desc <<-DESC
54
+ Shows the configured persistent volumes
55
+ DESC
56
+ required_task :destroy_volume do
57
+ volume_id = get_env('VOLUME_ID', "Volume ID", true)
58
+ destroy_volume(volume_id)
59
+ end
60
+
61
+ def create_volume(size, zone)
62
+ volumeId = cloud.create_volume(size.to_s, zone)
63
+ fatal "Failed to create volume" if volumeId.nil?
64
+ return volumeId
65
+ end
66
+
67
+ def attach_volume(vol_id, instance_id, device)
68
+ cloud.attach_volume(vol_id, instance_id, device)
69
+ end
70
+
71
+ def setup_volume(ic, vol_spec)
72
+ created = nil
73
+ key = "#{ic.name}_#{vol_spec['device']}"
74
+ artifacts = rubber_instances.artifacts
75
+ vol_id = artifacts['volumes'][key]
76
+
77
+ # first create the volume if we don't have a global record (artifacts) for it
78
+ if ! vol_id
79
+ logger.info "Creating volume for #{ic.full_name}:#{vol_spec['device']}"
80
+ vol_id = create_volume(vol_spec['size'], vol_spec['zone'])
81
+ artifacts['volumes'][key] = vol_id
82
+ rubber_instances.save
83
+ created = vol_spec['device']
84
+ end
85
+
86
+ # then, attach it if we don't have a record (on instance) of attachment
87
+ ic.volumes ||= []
88
+ if ! ic.volumes.include?(vol_id)
89
+ logger.info "Attaching volume #{vol_id} to #{ic.full_name}:#{vol_spec['device']}"
90
+ attach_volume(vol_id, ic.instance_id, vol_spec['device'])
91
+ ic.volumes << vol_id
92
+ rubber_instances.save
93
+
94
+ print "Waiting for volume to attach"
95
+ while true do
96
+ print "."
97
+ sleep 2
98
+ volume = cloud.describe_volumes(vol_id).first
99
+ break if volume[:attachment_status] == "attached"
100
+ end
101
+ print "\n"
102
+
103
+ # we don't mount/format at this time if we are doing a RAID array
104
+ if vol_spec['mount'] && vol_spec['filesystem']
105
+ # then format/mount/etc if we don't have an entry in hosts file
106
+ task :_setup_volume, :hosts => ic.external_ip do
107
+ rubber.sudo_script 'setup_volume', <<-ENDSCRIPT
108
+ if ! grep -q '#{vol_spec['mount']}' /etc/fstab; then
109
+ if mount | grep -q '#{vol_spec['mount']}'; then
110
+ umount '#{vol_spec['mount']}'
111
+ fi
112
+ mv /etc/fstab /etc/fstab.bak
113
+ cat /etc/fstab.bak | grep -v '#{vol_spec['mount']}' > /etc/fstab
114
+ echo '#{vol_spec['device']} #{vol_spec['mount']} #{vol_spec['filesystem']} noatime 0 0 # rubber volume #{vol_id}' >> /etc/fstab
115
+
116
+ #{('yes | mkfs -t ' + vol_spec['filesystem'] + ' ' + vol_spec['device']) if created}
117
+ mkdir -p '#{vol_spec['mount']}'
118
+ mount '#{vol_spec['mount']}'
119
+ fi
120
+ ENDSCRIPT
121
+ end
122
+ _setup_volume
123
+ end
124
+
125
+ end
126
+ return created
127
+ end
128
+
129
+ def setup_partition(ic, partition_spec)
130
+ created = nil
131
+ part_id = partition_spec['partition_device']
132
+
133
+ # Only create the partition if we haven't already done so
134
+ ic.partitions ||= []
135
+ if ! ic.partitions.include?(part_id)
136
+ # then format/mount/etc if we don't have an entry in hosts file
137
+ task :_setup_partition, :hosts => ic.external_ip do
138
+ rubber.sudo_script 'setup_partition', <<-ENDSCRIPT
139
+ if ! fdisk -l 2>&1 | grep -q '#{partition_spec['partition_device']}'; then
140
+ if grep -q '#{partition_spec['disk_device']}\\b' /etc/fstab; then
141
+ umount #{partition_spec['disk_device']}
142
+ mv /etc/fstab /etc/fstab.bak
143
+ cat /etc/fstab.bak | grep -v '#{partition_spec['disk_device']}\\b' > /etc/fstab
144
+ fi
145
+
146
+ # partition format is: Start (blank is first available),Size(MB due to -uM),Id(83=linux,82=swap,etc),Bootable
147
+ echo "#{partition_spec['start']},#{partition_spec['size']},#{partition_spec['type']},#{partition_spec['bootable']}" | sfdisk -L -uM #{partition_spec['disk_device']}
148
+ fi
149
+ ENDSCRIPT
150
+ end
151
+ _setup_partition
152
+
153
+ ic.partitions << part_id
154
+ rubber_instances.save
155
+ created = part_id
156
+
157
+ end
158
+
159
+ return created
160
+ end
161
+
162
+ def zero_partitions(ic, partitions)
163
+ env = rubber_cfg.environment.bind(ic.role_names, ic.name)
164
+ partitions = partitions.clone
165
+
166
+ # don't zero out the ones that we weren't told to
167
+ partitions.delete_if do |part|
168
+ spec = env.local_volumes.find {|s| s['partition_device'] == part}
169
+ ! spec['zero']
170
+ end
171
+
172
+ if partitions.size > 0
173
+ zero_script = ""
174
+ partitions.each do |partition|
175
+ zero_script << "nohup dd if=/dev/zero bs=1M of=#{partition} &> /dev/null &\n"
176
+ end
177
+ # then format/mount/etc if we don't have an entry in hosts file
178
+ task :_zero_partitions, :hosts => ic.external_ip do
179
+ rubber.sudo_script 'zero_partitions', <<-ENDSCRIPT
180
+ # zero out parition for performance (see amazon DevGuide)
181
+ echo "Zeroing out raid partitions to improve performance, this way take a while"
182
+ #{zero_script}
183
+
184
+ echo "Waiting for partitions to zero out"
185
+ while true; do
186
+ if ! ps ax | grep -q "[d]d.*/dev/zero"; then exit; fi
187
+ echo -n .
188
+ sleep 1
189
+ done
190
+ ENDSCRIPT
191
+ end
192
+ _zero_partitions
193
+ end
194
+ end
195
+
196
+ def setup_raid_volume(ic, raid_spec, create=false)
197
+ if create
198
+ mdadm_init = "yes | mdadm --create #{raid_spec['device']} --level #{raid_spec['raid_level']} --raid-devices #{raid_spec['source_devices'].size} #{raid_spec['source_devices'].sort.join(' ')}"
199
+ else
200
+ mdadm_init = "yes | mdadm --assemble #{raid_spec['device']} #{raid_spec['source_devices'].sort.join(' ')}"
201
+ end
202
+
203
+ task :_setup_raid_volume, :hosts => ic.external_ip do
204
+ rubber.sudo_script 'setup_raid_volume', <<-ENDSCRIPT
205
+ if ! grep -q '#{raid_spec['device']}' /etc/fstab; then
206
+ if mount | grep -q '#{raid_spec['mount']}'; then
207
+ umount '#{raid_spec['mount']}'
208
+ fi
209
+ mv /etc/fstab /etc/fstab.bak
210
+ cat /etc/fstab.bak | grep -v '#{raid_spec['mount']}' > /etc/fstab
211
+ echo '#{raid_spec['device']} #{raid_spec['mount']} #{raid_spec['filesystem']} noatime 0 0 # rubber raid volume' >> /etc/fstab
212
+
213
+ # seems to help devices initialize, otherwise mdadm fails because
214
+ # device not ready even though ec2 says the volume is attached
215
+ fdisk -l &> /dev/null
216
+
217
+ #{mdadm_init}
218
+
219
+ # set reconstruction speed
220
+ echo $((30*1024)) > /proc/sys/dev/raid/speed_limit_min
221
+
222
+ echo 'DEVICE /dev/hd*[0-9] /dev/sd*[0-9]' > /etc/mdadm/mdadm.conf
223
+ mdadm --detail --scan >> /etc/mdadm/mdadm.conf
224
+
225
+ mv /etc/rc.local /etc/rc.local.bak
226
+ echo "mdadm --assemble --scan" > /etc/rc.local
227
+ chmod +x /etc/rc.local
228
+
229
+ #{('yes | mkfs -t ' + raid_spec['filesystem'] + ' ' + raid_spec['filesystem_opts'] + ' ' + raid_spec['device']) if create}
230
+ mkdir -p '#{raid_spec['mount']}'
231
+ mount '#{raid_spec['mount']}'
232
+ fi
233
+ ENDSCRIPT
234
+ end
235
+ _setup_raid_volume
236
+ end
237
+
238
+ def destroy_volume(volume_id)
239
+
240
+ logger.info "Detaching volume #{volume_id}"
241
+ cloud.detach_volume(volume_id) rescue logger.info("Volume was not attached")
242
+
243
+ print "Waiting for volume to detach"
244
+ while true do
245
+ print "."
246
+ sleep 2
247
+ volume = cloud.describe_volumes(volume_id).first
248
+ status = volume && volume[:attachment_status]
249
+ break if !status || status == "detached"
250
+ end
251
+ print "\n"
252
+
253
+ logger.info "Deleting volume #{volume_id}"
254
+ cloud.destroy_volume(volume_id)
255
+
256
+ logger.info "Removing volume #{volume_id} from rubber instances file"
257
+ artifacts = rubber_instances.artifacts
258
+ artifacts['volumes'].delete_if {|k,v| v == volume_id}
259
+ rubber_instances.each do |ic|
260
+ ic.volumes.delete(volume_id) if ic.volumes
261
+ end
262
+ rubber_instances.save
263
+ end
264
+
265
+ end
data/lib/rubber/tag.rb ADDED
@@ -0,0 +1,16 @@
1
+ module Rubber
2
+ module Tag
3
+ # Updates the tags for the given ec2 instance
4
+ def self.update_instance_tags(instance_alias)
5
+ instance_item = Rubber::Configuration.rubber_instances[instance_alias]
6
+ fatal "Instance does not exist: #{instance_alias}" if ! instance_item
7
+
8
+ rubber_cfg = Rubber::Configuration.get_configuration(RUBBER_ENV)
9
+ rubber_env = rubber_cfg.environment.bind()
10
+
11
+ cloud = Rubber::Cloud::get_provider(rubber_env.cloud_provider || "aws", Rubber::Configuration.rubber_env, self)
12
+
13
+ cloud.create_tags(instance_item.instance_id, :Name => instance_alias, :Environment => RUBBER_ENV)
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,279 @@
1
+ require 'fileutils'
2
+ require 'date'
3
+ require 'time'
4
+ require 'aws/s3'
5
+ require 'rubber'
6
+
7
+ namespace :rubber do
8
+
9
+ def rubber_env()
10
+ Rubber::Configuration.rubber_env
11
+ end
12
+
13
+ def rubber_instances()
14
+ Rubber::Configuration.rubber_instances
15
+ end
16
+
17
+ def cloud_provider
18
+ rubber_env.cloud_providers[rubber_env.cloud_provider]
19
+ end
20
+
21
+ def init_s3()
22
+ AWS::S3::Base.establish_connection!(:access_key_id => cloud_provider.access_key, :secret_access_key => cloud_provider.secret_access_key)
23
+ end
24
+
25
+ desc "Generate system config files by transforming the files in the config tree"
26
+ task :config do
27
+ cfg = Rubber::Configuration.get_configuration(RUBBER_ENV)
28
+ instance_alias = cfg.environment.current_host
29
+ instance = cfg.instance[instance_alias]
30
+ if instance
31
+ roles = instance.role_names
32
+ env = cfg.environment.bind(roles, instance_alias)
33
+ gen = Rubber::Configuration::Generator.new("#{RUBBER_ROOT}/config/rubber", roles, instance_alias)
34
+ elsif ['development', 'test'].include?(Rubber.env)
35
+ roles = cfg.environment.known_roles
36
+ role_items = roles.collect do |r|
37
+ Rubber::Configuration::RoleItem.new(r, r == "db" ? {'primary' => true} : {})
38
+ end
39
+ env = cfg.environment.bind(roles, instance_alias)
40
+ domain = env.domain
41
+ instance = Rubber::Configuration::InstanceItem.new(instance_alias, domain, role_items, 'dummyid', ['dummygroup'])
42
+ instance.external_host = instance.full_name
43
+ instance.external_ip = "127.0.0.1"
44
+ instance.internal_host = instance.full_name
45
+ instance.internal_ip = "127.0.0.1"
46
+ cfg.instance.add(instance)
47
+ gen = Rubber::Configuration::Generator.new("#{RUBBER_ROOT}/config/rubber", roles, instance_alias)
48
+ gen.fake_root ="#{RUBBER_ROOT}/tmp/rubber"
49
+ else
50
+ puts "Instance not found for host: #{instance_alias}"
51
+ exit 1
52
+ end
53
+
54
+ if ENV['NO_POST']
55
+ gen.no_post = true
56
+ end
57
+ if ENV['FILE']
58
+ gen.file_pattern = ENV['FILE']
59
+ end
60
+ if ENV['FORCE']
61
+ gen.force = true
62
+ end
63
+ gen.stop_on_error_cmd = env.stop_on_error_cmd
64
+ gen.run
65
+
66
+ end
67
+
68
+ desc <<-DESC
69
+ Rotate rails app server logfiles. Should be run right after midnight.
70
+ The following arguments affect behavior:
71
+ LOG_DIR (required): Directory where log files are located
72
+ LOG_FILE (*.log): File pattern to match to find logs to rotate
73
+ LOG_AGE (7): Delete rotated logs older than this many days in the past
74
+ DESC
75
+ task :rotate_logs do
76
+ log_src_dir = get_env('LOG_DIR', true)
77
+ log_file_glob = get_env('LOG_FILES') || "*.log"
78
+ log_file_age = (get_env('LOG_AGE') || 7).to_i
79
+
80
+ rotated_date = (Date.today - 1).strftime('%Y%m%d')
81
+ puts "Rotating logfiles located at: #{log_src_dir}/#{log_file_glob}"
82
+ Dir["#{log_src_dir}/#{log_file_glob}"].each do |logfile|
83
+ rotated_file = "#{logfile}.#{rotated_date}"
84
+ if File.exist?(rotated_file)
85
+ rotated_file += "_#{Time.now.to_i}"
86
+ end
87
+ FileUtils.cp(logfile, rotated_file)
88
+ File.truncate logfile, 0
89
+ end
90
+
91
+ tdate = Date.today - log_file_age
92
+ threshold = Time.local(tdate.year, tdate.month, tdate.day)
93
+ puts "Cleaning rotated log files older than #{log_file_age} days"
94
+ Dir["#{log_src_dir}/#{log_file_glob}.[0-9]*"].each do |logfile|
95
+ if File.mtime(logfile) < threshold
96
+ FileUtils.rm_f(logfile)
97
+ end
98
+ end
99
+ end
100
+
101
+
102
+ desc <<-DESC
103
+ Backup database to given backup directory
104
+ The following arguments affect behavior:
105
+ BACKUP_DIR (required): Directory where backups will be stored
106
+ BACKUP_NAME (required): What to name the backup
107
+ BACKUP_CMD (required): Command used to backup
108
+ BACKUP_AGE (3): Delete rotated logs older than this many days in the past
109
+ DESC
110
+ task :backup do
111
+ dir = get_env('BACKUP_DIR', true)
112
+ name = get_env('BACKUP_NAME', true)
113
+ cmd = get_env('BACKUP_CMD', true)
114
+ age = (get_env('BACKUP_AGE') || 3).to_i
115
+
116
+ time_stamp = Time.now.strftime("%Y-%m-%d_%H-%M")
117
+ FileUtils.mkdir_p(dir)
118
+
119
+ backup_cmd = cmd.gsub(/%([^%]+)%/, '#{\1}')
120
+ backup_cmd = eval('%Q{' + backup_cmd + '}')
121
+
122
+ puts "Backing up with command:"
123
+ sh backup_cmd
124
+ puts "Backup created"
125
+
126
+ s3_prefix = "#{name}/"
127
+ backup_bucket = cloud_provider.backup_bucket
128
+ if backup_bucket
129
+ init_s3
130
+ unless AWS::S3::Bucket.list.find { |b| b.name == backup_bucket }
131
+ AWS::S3::Bucket.create(backup_bucket)
132
+ end
133
+ newest = Dir.entries(dir).grep(/^[^.]/).sort_by {|f| File.mtime(File.join(dir,f))}.last
134
+ dest = "#{s3_prefix}#{newest}"
135
+ puts "Saving backup to S3: #{backup_bucket}:#{dest}"
136
+ AWS::S3::S3Object.store(dest, open(File.join(dir, newest)), backup_bucket)
137
+ end
138
+
139
+ tdate = Date.today - age
140
+ threshold = Time.local(tdate.year, tdate.month, tdate.day)
141
+ puts "Cleaning backups older than #{age} days"
142
+ Dir["#{dir}/*"].each do |file|
143
+ if File.mtime(file) < threshold
144
+ puts "Deleting #{file}"
145
+ FileUtils.rm_f(file)
146
+ end
147
+ end
148
+
149
+ if backup_bucket
150
+ puts "Cleaning S3 backups older than #{age} days from: #{backup_bucket}:#{s3_prefix}"
151
+ AWS::S3::Bucket.objects(backup_bucket, :prefix => s3_prefix).clone.each do |obj|
152
+ if Time.parse(obj.about["last-modified"]) < threshold
153
+ puts "Deleting #{obj.key}"
154
+ obj.delete
155
+ end
156
+ end
157
+ end
158
+ end
159
+
160
+ desc <<-DESC
161
+ Backup database to given backup directory
162
+ The following arguments affect behavior:
163
+ BACKUP_DIR (required): Directory where db backups will be stored
164
+ BACKUP_AGE (3): Delete rotated logs older than this many days in the past
165
+ DBUSER (required) User to connect to the db as
166
+ DBPASS (optional): Pass to connect to the db with
167
+ DBHOST (required): Host where the db is
168
+ DBNAME (required): Database name to backup
169
+ DESC
170
+ task :backup_db do
171
+ dir = get_env('BACKUP_DIR', true)
172
+ age = (get_env('BACKUP_AGE') || 3).to_i
173
+ time_stamp = Time.now.strftime("%Y-%m-%d_%H-%M")
174
+ backup_file = "#{dir}/#{RUBBER_ENV}_dump_#{time_stamp}.sql.gz"
175
+ FileUtils.mkdir_p(File.dirname(backup_file))
176
+
177
+ user = get_env('DBUSER', true)
178
+ pass = get_env('DBPASS')
179
+ pass = nil if pass.strip.size == 0
180
+ host = get_env('DBHOST', true)
181
+ name = get_env('DBNAME', true)
182
+
183
+ raise "No db_backup_cmd defined in rubber.yml, cannot backup!" unless rubber_env.db_backup_cmd
184
+ db_backup_cmd = rubber_env.db_backup_cmd.gsub(/%([^%]+)%/, '#{\1}')
185
+ db_backup_cmd = eval('%Q{' + db_backup_cmd + '}')
186
+
187
+ puts "Backing up database with command:"
188
+ sh db_backup_cmd
189
+ puts "Created backup: #{backup_file}"
190
+
191
+ s3_prefix = "db/"
192
+ backup_bucket = cloud_provider.backup_bucket
193
+ if backup_bucket
194
+ init_s3
195
+ unless AWS::S3::Bucket.list.find { |b| b.name == backup_bucket }
196
+ AWS::S3::Bucket.create(backup_bucket)
197
+ end
198
+ dest = "#{s3_prefix}#{File.basename(backup_file)}"
199
+ puts "Saving db backup to S3: #{backup_bucket}:#{dest}"
200
+ AWS::S3::S3Object.store(dest, open(backup_file), backup_bucket)
201
+ end
202
+
203
+ tdate = Date.today - age
204
+ threshold = Time.local(tdate.year, tdate.month, tdate.day)
205
+ puts "Cleaning backups older than #{age} days"
206
+ Dir["#{dir}/*"].each do |file|
207
+ if File.mtime(file) < threshold
208
+ puts "Deleting #{file}"
209
+ FileUtils.rm_f(file)
210
+ end
211
+ end
212
+
213
+ if backup_bucket
214
+ puts "Cleaning S3 backups older than #{age} days from: #{backup_bucket}:#{s3_prefix}"
215
+ AWS::S3::Bucket.objects(backup_bucket, :prefix => s3_prefix).clone.each do |obj|
216
+ if Time.parse(obj.about["last-modified"]) < threshold
217
+ puts "Deleting #{obj.key}"
218
+ obj.delete
219
+ end
220
+ end
221
+ end
222
+ end
223
+
224
+ desc <<-DESC
225
+ Restores a database backup from s3.
226
+ This tries to find the last backup made or the s3 object identified by the
227
+ key FILENAME
228
+ The following arguments affect behavior:
229
+ FILENAME (optional): key of S3 object to use
230
+ DBUSER (required) User to connect to the db as
231
+ DBPASS (optional): Pass to connect to the db with
232
+ DBHOST (required): Host where the db is
233
+ DBNAME (required): Database name to backup
234
+ DESC
235
+ task :restore_db_s3 do
236
+ file = get_env('FILENAME')
237
+ user = get_env('DBUSER', true)
238
+ pass = get_env('DBPASS')
239
+ pass = nil if pass && pass.strip.size == 0
240
+ host = get_env('DBHOST', true)
241
+ name = get_env('DBNAME', true)
242
+
243
+ raise "No db_restore_cmd defined in rubber.yml" unless rubber_env.db_restore_cmd
244
+ db_restore_cmd = rubber_env.db_restore_cmd.gsub(/%([^%]+)%/, '#{\1}')
245
+ db_restore_cmd = eval('%Q{' + db_restore_cmd + '}')
246
+
247
+ # try to fetch a matching file from s3 (if backup_bucket given)
248
+ backup_bucket = cloud_provider.backup_bucket
249
+ raise "No backup_bucket defined in rubber.yml" unless backup_bucket
250
+ if (init_s3 &&
251
+ AWS::S3::Bucket.list.find { |b| b.name == backup_bucket })
252
+ s3objects = AWS::S3::Bucket.find(backup_bucket,
253
+ :prefix => 'db/')
254
+ if file
255
+ puts "trying to fetch #{file} from s3"
256
+ data = s3objects.detect { |o| file == o.key }
257
+ else
258
+ puts "trying to fetch last modified s3 backup"
259
+ data = s3objects.max {|a,b| a.about["last-modified"] <=> b.about["last-modified"] }
260
+ end
261
+ end
262
+ raise "could not access backup file via s3" unless data
263
+
264
+ puts "piping restore data to command [#{db_restore_cmd}]"
265
+ IO.popen(db_restore_cmd, mode='w') do |p|
266
+ data.value do |segment|
267
+ p.write segment
268
+ end
269
+ end
270
+
271
+ end
272
+
273
+ def get_env(name, required=false)
274
+ value = ENV[name]
275
+ raise("#{name} is required, pass using environment") if required && ! value
276
+ return value
277
+ end
278
+
279
+ end