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,11 @@
1
+ <%
2
+ @read_cmd = 'crontab -l'
3
+ @write_cmd = 'crontab -'
4
+ @additive = ["# rubber-sphinx-start", "# rubber-sphinx-end"]
5
+ %>
6
+
7
+ # incremental index once every 10 minutes
8
+ */10 * * * * sudo -u <%= rubber_env.app_user %> <%= RUBBER_ROOT %>/script/cron-rake RUBBER_ENV=<%= RUBBER_ENV %> ts:in:delta
9
+
10
+ # full reindex daily at 4:35
11
+ 35 4 * * * sudo -u <%= rubber_env.app_user %> <%= RUBBER_ROOT %>/script/cron-rake RUBBER_ENV=<%= RUBBER_ENV %> ts:index
@@ -0,0 +1,13 @@
1
+ <%
2
+ @path = '/etc/monit/monit.d/monit-sphinx.conf'
3
+
4
+ PIDFILE = "#{RUBBER_ROOT}/log/searchd.#{RUBBER_ENV}.pid"
5
+ start_program = "cd #{RUBBER_ROOT} && rake ts:start"
6
+ stop_program = "cd #{RUBBER_ROOT} && rake ts:stop"
7
+ %>
8
+
9
+ check process sphinx with pidfile <%= PIDFILE %>
10
+ group sphinx-<%= RUBBER_ENV %>
11
+ start program = "/usr/bin/sudo -H -u <%= rubber_env.app_user %> bash -l -c '<%= start_program %>'"
12
+ stop program = "/usr/bin/sudo -H -u <%= rubber_env.app_user %> bash -l -c '<%= stop_program %>'"
13
+ if failed host <%= rubber_env.host %> port 3312 with timeout 5 seconds for 5 cycles then restart
@@ -0,0 +1,6 @@
1
+ gems: []
2
+
3
+ roles:
4
+ sphinx:
5
+ packages: [bzr-builddeb, autotools-dev, dpatch, libpq-dev, autoconf,
6
+ libtool, automake, gawk, libmysqlclient15-dev]
@@ -0,0 +1 @@
1
+ description: The sphinx searchd / thinking sphinx module
@@ -0,0 +1,184 @@
1
+ require 'find'
2
+ require 'yaml'
3
+
4
+ # Load and initialize rubber if it hasn't been already.
5
+ # This happens using the generator with Rails 2 and Rubber is not set up as a plugin.
6
+ unless defined?(Rubber)
7
+ env = ENV['RUBBER_ENV'] ||= 'development'
8
+ root = '.'
9
+
10
+ require 'rubber'
11
+ Rubber::initialize(root, env)
12
+ end
13
+
14
+ if Rubber::Util::is_rails2?
15
+ require 'fileutils'
16
+ require 'commands/generate'
17
+
18
+ class VulcanizeGenerator < Rails::Generator::NamedBase
19
+ include Rails::Generator::Commands
20
+
21
+ TEMPLATE_ROOT = File.dirname(__FILE__) + "/templates" unless defined?(TEMPLATE_ROOT)
22
+ TEMPLATE_FILE = "templates.yml" unless defined?(TEMPLATE_FILE)
23
+
24
+ def manifest
25
+ record do |m|
26
+ templates = [file_name] + actions
27
+ templates.each do |t|
28
+ apply_template(m, t)
29
+ end
30
+ end
31
+ end
32
+
33
+ def apply_template(m, name)
34
+ sp = source_path("#{name}/")
35
+ unless File.directory?(sp)
36
+ raise Rails::Generator::UsageError.new("Invalid template #{name}, use one of #{valid_templates.join(', ')}")
37
+ end
38
+
39
+ @template_dependencies ||= []
40
+
41
+ templ_conf = load_template_config(sp)
42
+ deps = templ_conf['dependent_templates'] || []
43
+ @template_dependencies.concat(deps)
44
+ deps.each do |dep|
45
+ apply_template(m, dep)
46
+ end
47
+
48
+ extra_generator_steps_file = File.join(TEMPLATE_ROOT, name, 'templates.rb')
49
+
50
+ Find.find(sp) do |f|
51
+ Find.prune if File.basename(f) =~ /^(CVS|\.svn)$/
52
+ Find.prune if f == "#{sp}#{TEMPLATE_FILE}"
53
+ Find.prune if f == extra_generator_steps_file # don't copy over templates.rb
54
+
55
+ rel = f.gsub(/#{source_root}\//, '')
56
+ dest_rel = rel.gsub(/^#{name}\//, '')
57
+
58
+ # Only include optional files when their conditions eval to true
59
+ template_conf = YAML.load(File.read(TEMPLATE_FILE)) rescue {}
60
+ optional = template_conf['optional'][dest_rel] rescue nil
61
+ Find.prune if optional && ! eval(optional)
62
+
63
+ m.directory(dest_rel) if File.directory?(f)
64
+ if File.file?(f)
65
+ # force scripts to be executable
66
+ opts = (File.read(f) =~ /^#!/) ? {:chmod => 0755} : {}
67
+ m.file(rel, dest_rel, opts)
68
+ end
69
+ end
70
+
71
+ if File.exist? extra_generator_steps_file
72
+ eval File.read(extra_generator_steps_file), binding, extra_generator_steps_file
73
+ end
74
+ end
75
+
76
+ protected
77
+ def valid_templates
78
+ valid = Dir.entries(TEMPLATE_ROOT).delete_if {|e| e =~ /(^\.)|svn|CVS/ }
79
+ end
80
+
81
+ def load_template_config(template_dir)
82
+ templ_file = "#{template_dir}/templates.yml"
83
+ templ_conf = YAML.load(File.read(templ_file)) rescue {}
84
+ return templ_conf
85
+ end
86
+
87
+ def banner
88
+ usage = "Usage: #{$0} vulcanize template_name ...\n"
89
+ usage << "where template_name is one of:\n\n"
90
+ valid_templates.each do |t|
91
+ templ_conf = load_template_config("#{TEMPLATE_ROOT}/#{t}")
92
+ desc = templ_conf['description']
93
+ usage << " #{t}: #{desc}\n"
94
+ end
95
+ return usage
96
+ end
97
+ end
98
+
99
+ else
100
+ require 'rails/generators'
101
+
102
+ class VulcanizeGenerator < Rails::Generators::NamedBase
103
+
104
+ def self.source_root
105
+ File.join(File.dirname(__FILE__), 'templates')
106
+ end
107
+
108
+ def copy_template_files
109
+ @template_dependencies = find_dependencies(file_name)
110
+ ([file_name] + @template_dependencies).each do |template|
111
+ apply_template(template)
112
+ end
113
+ end
114
+
115
+ protected
116
+
117
+ # helper to test for rails for optional templates
118
+ def rails?
119
+ Rubber::Util::is_rails?
120
+ end
121
+
122
+ def find_dependencies(name)
123
+ template_dir = File.join(self.class.source_root, name, '')
124
+ unless File.directory?(template_dir)
125
+ raise Rails::Generators::Error.new("Invalid template #{name}, use one of #{valid_templates.join(', ')}")
126
+ end
127
+
128
+ template_conf = load_template_config(template_dir)
129
+ template_dependencies = template_conf['dependent_templates'] || []
130
+
131
+ template_dependencies.clone.each do |dep|
132
+ template_dependencies.concat(find_dependencies(dep))
133
+ end
134
+
135
+ return template_dependencies.uniq
136
+ end
137
+
138
+ def apply_template(name)
139
+ template_dir = File.join(self.class.source_root, name, '')
140
+ unless File.directory?(template_dir)
141
+ raise Rails::Generators::Error.new("Invalid template #{name}, use one of #{valid_templates.join(', ')}")
142
+ end
143
+
144
+ template_conf = load_template_config(template_dir)
145
+
146
+ extra_generator_steps_file = File.join(template_dir, 'templates.rb')
147
+
148
+ Find.find(template_dir) do |f|
149
+ Find.prune if f == File.join(template_dir, 'templates.yml') # don't copy over templates.yml
150
+ Find.prune if f == extra_generator_steps_file # don't copy over templates.rb
151
+
152
+ template_rel = f.gsub(/#{template_dir}/, '')
153
+ source_rel = f.gsub(/#{self.class.source_root}\//, '')
154
+ dest_rel = source_rel.gsub(/^#{name}\//, '')
155
+
156
+ # Only include optional files when their conditions eval to true
157
+ optional = template_conf['optional'][template_rel] rescue nil
158
+ Find.prune if optional && ! eval(optional)
159
+
160
+ if File.directory?(f)
161
+ empty_directory(dest_rel)
162
+ else
163
+ copy_file(source_rel, dest_rel)
164
+ src_mode = File.stat(f).mode
165
+ dest_mode = File.stat(File.join(destination_root, dest_rel)).mode
166
+ chmod(dest_rel, src_mode) if src_mode != dest_mode
167
+ end
168
+ end
169
+
170
+ if File.exist? extra_generator_steps_file
171
+ eval File.read(extra_generator_steps_file), binding, extra_generator_steps_file
172
+ end
173
+ end
174
+
175
+ def valid_templates
176
+ valid = Dir.entries(self.class.source_root).delete_if {|e| e =~ /(^\.)|svn|CVS/ }
177
+ end
178
+
179
+ def load_template_config(template_dir)
180
+ YAML.load(File.read(File.join(template_dir, 'templates.yml'))) rescue {}
181
+ end
182
+ end
183
+
184
+ end
data/lib/rubber.rb ADDED
@@ -0,0 +1,76 @@
1
+ $:.unshift(File.dirname(__FILE__))
2
+
3
+ module Rubber
4
+
5
+ @@version = File.read(File.join(File.dirname(__FILE__), '..', 'VERSION')).chomp
6
+
7
+ def self.initialize(project_root, project_env)
8
+ return if defined?(RUBBER_ROOT) && defined?(RUBBER_ENV)
9
+
10
+ @@root = project_root
11
+ @@env = project_env
12
+ Object.const_set('RUBBER_ENV', project_env)
13
+ Object.const_set('RUBBER_ROOT', File.expand_path(project_root))
14
+
15
+ if ! defined?(Rails) && ! Rubber::Util::is_bundler?
16
+ # pull in basic rails env. rubber only needs RAILS_ROOT and RAILS_ENV.
17
+ # We actually do NOT want the entire rails environment because it
18
+ # complicates bootstrap (i.e. can't run config to create db because full
19
+ # rails env needs db to exist as some plugin accesses model or something)
20
+ rails_boot_file = File.join(RUBBER_ROOT, 'config', 'boot.rb')
21
+ require(rails_boot_file) if File.exists? rails_boot_file
22
+ end
23
+
24
+ if defined?(Rails.logger) && Rails.logger
25
+ @@logger = Rails.logger
26
+ else
27
+ @@logger = Logger.new($stdout)
28
+ @@logger.level = Logger::INFO
29
+ @@logger.formatter = lambda {|severity, time, progname, msg| "Rubber[%s]: %s\n" % [severity, msg.to_s.lstrip]}
30
+ end
31
+
32
+ # conveniences for backwards compatibility with old names
33
+ Object.const_set('RUBBER_CONFIG', self.config)
34
+ Object.const_set('RUBBER_INSTANCES', self.instances)
35
+
36
+ end
37
+
38
+ def self.root
39
+ @@root
40
+ end
41
+
42
+ def self.env
43
+ @@env
44
+ end
45
+
46
+ def self.version
47
+ @@version
48
+ end
49
+
50
+ def self.logger
51
+ @@logger
52
+ end
53
+
54
+ def self.config
55
+ Rubber::Configuration.rubber_env
56
+ end
57
+
58
+ def self.instances
59
+ Rubber::Configuration.rubber_instances
60
+ end
61
+ end
62
+
63
+
64
+ require 'rubber/configuration'
65
+ require 'rubber/environment'
66
+ require 'rubber/generator'
67
+ require 'rubber/instance'
68
+ require 'rubber/util'
69
+ require 'rubber/cloud'
70
+ require 'rubber/dns'
71
+
72
+ if Rubber::Util::is_rails3?
73
+ module Rubber
74
+ require 'rubber/railtie'
75
+ end
76
+ end
@@ -0,0 +1 @@
1
+ Capistrano::Configuration.instance.load(File.join(File.dirname(__FILE__), 'recipes', 'rubber.rb'))
@@ -0,0 +1,13 @@
1
+ require "rubber/cloud/base"
2
+
3
+ module Rubber
4
+ module Cloud
5
+
6
+ def self.get_provider(provider, env, capistrano)
7
+ require "rubber/cloud/#{provider}"
8
+ clazz = Rubber::Cloud.const_get(provider.capitalize)
9
+ return clazz.new(env, capistrano)
10
+ end
11
+
12
+ end
13
+ end
@@ -0,0 +1,362 @@
1
+ require 'rubygems'
2
+ require 'AWS'
3
+ require 'aws/s3'
4
+
5
+ module Rubber
6
+ module Cloud
7
+
8
+ class Aws < Base
9
+
10
+ def initialize(env, capistrano)
11
+ super(env, capistrano)
12
+ @aws_env = env.cloud_providers.aws
13
+ @ec2 = AWS::EC2::Base.new(:access_key_id => @aws_env.access_key, :secret_access_key => @aws_env.secret_access_key)
14
+ @ec2elb = AWS::ELB::Base.new(:access_key_id => @aws_env.access_key, :secret_access_key => @aws_env.secret_access_key)
15
+ AWS::S3::Base.establish_connection!(:access_key_id => @aws_env.access_key, :secret_access_key => @aws_env.secret_access_key)
16
+ end
17
+
18
+ def create_instance(ami, ami_type, security_groups, availability_zone)
19
+ response = @ec2.run_instances(:image_id => ami, :key_name => @aws_env.key_name, :instance_type => ami_type, :security_group => security_groups, :availability_zone => availability_zone)
20
+ instance_id = response.instancesSet.item[0].instanceId
21
+ return instance_id
22
+ end
23
+
24
+ def create_spot_instance_request(spot_price, ami, ami_type, security_groups, availability_zone)
25
+ response = @ec2.request_spot_instances(:spot_price => spot_price, :image_id => ami, :key_name => @aws_env.key_name, :instance_type => ami_type, :security_group => security_groups, :availability_zone => availability_zone)
26
+ request_id = response.spotInstanceRequestSet.item[0].spotInstanceRequestId
27
+ return request_id
28
+ end
29
+
30
+ def describe_instances(instance_id=nil)
31
+ instances = []
32
+ opts = {}
33
+ opts[:instance_id] = instance_id if instance_id
34
+
35
+ response = @ec2.describe_instances(opts)
36
+ response.reservationSet.item.each do |ritem|
37
+ ritem.instancesSet.item.each do |item|
38
+ instance = {}
39
+ instance[:id] = item.instanceId
40
+ instance[:external_host] = item.dnsName
41
+ instance[:external_ip] = item.ipAddress
42
+ instance[:internal_host] = item.privateDnsName
43
+ instance[:internal_ip] = item.privateIpAddress
44
+ instance[:state] = item.instanceState.name
45
+ instance[:zone] = item.placement.availabilityZone
46
+ instance[:platform] = item.platform || 'linux'
47
+ instance[:root_device_type] = item.rootDeviceType
48
+ instances << instance
49
+ end
50
+ end if response.reservationSet
51
+
52
+ return instances
53
+ end
54
+
55
+ def destroy_instance(instance_id)
56
+ response = @ec2.terminate_instances(:instance_id => instance_id)
57
+ end
58
+
59
+ def reboot_instance(instance_id)
60
+ response = @ec2.reboot_instances(:instance_id => instance_id)
61
+ end
62
+
63
+ def stop_instance(instance_id)
64
+ # Don't force the stop process. I.e., allow the instance to flush its file system operations.
65
+ response = @ec2.stop_instances(:instance_id => instance_id, :force => false)
66
+ end
67
+
68
+ def start_instance(instance_id)
69
+ response = @ec2.start_instances(:instance_id => instance_id)
70
+ end
71
+
72
+ def describe_availability_zones
73
+ zones = []
74
+ response = @ec2.describe_availability_zones()
75
+ response.availabilityZoneInfo.item.each do |item|
76
+ zone = {}
77
+ zone[:name] = item.zoneName
78
+ zone[:state] =item.zoneState
79
+ zones << zone
80
+ end if response.availabilityZoneInfo
81
+ return zones
82
+ end
83
+
84
+ def create_security_group(group_name, group_description)
85
+ @ec2.create_security_group(:group_name => group_name, :group_description => group_description)
86
+ end
87
+
88
+ def describe_security_groups(group_name=nil)
89
+ groups = []
90
+
91
+ opts = {}
92
+ opts[:group_name] = group_name if group_name
93
+ response = @ec2.describe_security_groups(opts)
94
+
95
+ response.securityGroupInfo.item.each do |item|
96
+ group = {}
97
+ group[:name] = item.groupName
98
+ group[:description] = item.groupDescription
99
+
100
+ item.ipPermissions.item.each do |ip_item|
101
+ group[:permissions] ||= []
102
+ rule = {}
103
+
104
+ rule[:protocol] = ip_item.ipProtocol
105
+ rule[:from_port] = ip_item.fromPort
106
+ rule[:to_port] = ip_item.toPort
107
+
108
+ ip_item.groups.item.each do |rule_group|
109
+ rule[:source_groups] ||= []
110
+ source_group = {}
111
+ source_group[:account] = rule_group.userId
112
+ source_group[:name] = rule_group.groupName
113
+ rule[:source_groups] << source_group
114
+ end if ip_item.groups
115
+
116
+ ip_item.ipRanges.item.each do |ip_range|
117
+ rule[:source_ips] ||= []
118
+ rule[:source_ips] << ip_range.cidrIp
119
+ end if ip_item.ipRanges
120
+
121
+ group[:permissions] << rule
122
+ end if item.ipPermissions
123
+
124
+ groups << group
125
+
126
+ end if response.securityGroupInfo
127
+
128
+ return groups
129
+ end
130
+
131
+ def add_security_group_rule(group_name, protocol, from_port, to_port, source)
132
+ opts = {:group_name => group_name}
133
+ if source.instance_of? Hash
134
+ opts = opts.merge(:source_security_group_name => source[:name], :source_security_group_owner_id => source[:account])
135
+ else
136
+ opts = opts.merge(:ip_protocol => protocol, :from_port => from_port, :to_port => to_port, :cidr_ip => source)
137
+ end
138
+ @ec2.authorize_security_group_ingress(opts)
139
+ end
140
+
141
+ def remove_security_group_rule(group_name, protocol, from_port, to_port, source)
142
+ opts = {:group_name => group_name}
143
+ if source.instance_of? Hash
144
+ opts = opts.merge(:source_security_group_name => source[:name], :source_security_group_owner_id => source[:account])
145
+ else
146
+ opts = opts.merge(:ip_protocol => protocol, :from_port => from_port, :to_port => to_port, :cidr_ip => source)
147
+ end
148
+ @ec2.revoke_security_group_ingress(opts)
149
+ end
150
+
151
+ def destroy_security_group(group_name)
152
+ @ec2.delete_security_group(:group_name => group_name)
153
+ end
154
+
155
+ def create_static_ip
156
+ response = @ec2.allocate_address()
157
+ return response.publicIp
158
+ end
159
+
160
+ def attach_static_ip(ip, instance_id)
161
+ response = @ec2.associate_address(:instance_id => instance_id, :public_ip => ip)
162
+ return response.return == "true"
163
+ end
164
+
165
+ def detach_static_ip(ip)
166
+ response = @ec2.disassociate_address(:public_ip => ip)
167
+ return response.return == "true"
168
+ end
169
+
170
+ def describe_static_ips(ip=nil)
171
+ ips = []
172
+ opts = {}
173
+ opts[:public_ip] = ip if ip
174
+ response = @ec2.describe_addresses(opts)
175
+ response.addressesSet.item.each do |item|
176
+ ip = {}
177
+ ip[:instance_id] = item.instanceId
178
+ ip[:ip] = item.publicIp
179
+ ips << ip
180
+ end if response.addressesSet
181
+ return ips
182
+ end
183
+
184
+ def destroy_static_ip(ip)
185
+ response = @ec2.release_address(:public_ip => ip)
186
+ return response.return == "true"
187
+ end
188
+
189
+ def create_volume(size, zone)
190
+ response = @ec2.create_volume(:size => size.to_s, :availability_zone => zone)
191
+ return response.volumeId
192
+ end
193
+
194
+ def attach_volume(volume_id, instance_id, device)
195
+ response = @ec2.attach_volume(:volume_id => volume_id, :instance_id => instance_id, :device => device)
196
+ return response.status
197
+ end
198
+
199
+ def detach_volume(volume_id)
200
+ @ec2.detach_volume(:volume_id => volume_id, :force => 'true')
201
+ end
202
+
203
+ def describe_volumes(volume_id=nil)
204
+ volumes = []
205
+ opts = {}
206
+ opts[:volume_id] = volume_id if volume_id
207
+ response = @ec2.describe_volumes(opts)
208
+ response.volumeSet.item.each do |item|
209
+ volume = {}
210
+ volume[:id] = item.volumeId
211
+ volume[:status] = item.status
212
+ if item.attachmentSet
213
+ attach = item.attachmentSet.item[0]
214
+ volume[:attachment_instance_id] = attach.instanceId
215
+ volume[:attachment_status] = attach.status
216
+ end
217
+ volumes << volume
218
+ end if response.volumeSet
219
+ return volumes
220
+ end
221
+
222
+ def destroy_volume(volume_id)
223
+ @ec2.delete_volume(:volume_id => volume_id)
224
+ end
225
+
226
+ def create_image(image_name)
227
+ ec2_key = @aws_env.key_file
228
+ ec2_pk = @aws_env.pk_file
229
+ ec2_cert = @aws_env.cert_file
230
+ ec2_key_dest = "/mnt/#{File.basename(ec2_key)}"
231
+ ec2_pk_dest = "/mnt/#{File.basename(ec2_pk)}"
232
+ ec2_cert_dest = "/mnt/#{File.basename(ec2_cert)}"
233
+
234
+ capistrano.put(File.read(ec2_key), ec2_key_dest)
235
+ capistrano.put(File.read(ec2_pk), ec2_pk_dest)
236
+ capistrano.put(File.read(ec2_cert), ec2_cert_dest)
237
+
238
+ arch = capistrano.capture("uname -m").strip
239
+ arch = case arch when /i\d86/ then "i386" else arch end
240
+
241
+ capistrano.sudo_script "create_bundle", <<-CMD
242
+ rvm use system
243
+ export RUBYLIB=/usr/lib/site_ruby/
244
+ unset RUBYOPT
245
+ nohup ec2-bundle-vol --batch -d /mnt -k #{ec2_pk_dest} -c #{ec2_cert_dest} -u #{@aws_env.account} -p #{image_name} -r #{arch} &> /tmp/ec2-bundle-vol.log &
246
+ echo "Creating image from instance volume..."
247
+ while true; do
248
+ if ! ps ax | grep -q "[e]c2-bundle-vol"; then exit; fi
249
+ echo -n .
250
+ sleep 1
251
+ done
252
+ CMD
253
+
254
+ capistrano.sudo_script "register_bundle", <<-CMD
255
+ rvm use system
256
+ export RUBYLIB=/usr/lib/site_ruby/
257
+ unset RUBYOPT
258
+ echo "Uploading image to S3..."
259
+ ec2-upload-bundle --batch -b #{@aws_env.image_bucket} -m /mnt/#{image_name}.manifest.xml -a #{@aws_env.access_key} -s #{@aws_env.secret_access_key}
260
+ CMD
261
+
262
+ image_location = "#{@aws_env.image_bucket}/#{image_name}.manifest.xml"
263
+ response = @ec2.register_image(:image_location => image_location)
264
+ return response.imageId
265
+ end
266
+
267
+ def describe_images(image_id=nil)
268
+ images = []
269
+ opts = {:owner_id => 'self'}
270
+ opts[:image_id] = image_id if image_id
271
+ response = @ec2.describe_images(opts)
272
+ response.imagesSet.item.each do |item|
273
+ image = {}
274
+ image[:id] = item.imageId
275
+ image[:location] = item.imageLocation
276
+ image[:root_device_type] = item.rootDeviceType
277
+ images << image
278
+ end if response.imagesSet
279
+ return images
280
+ end
281
+
282
+ def destroy_image(image_id)
283
+ image = describe_images(image_id).first
284
+ raise "Could not find image: #{image_id}, aborting destroy_image" if image.nil?
285
+ image_location = image[:location]
286
+ bucket = image_location.split('/').first
287
+ image_name = image_location.split('/').last.gsub(/\.manifest\.xml$/, '')
288
+
289
+ @ec2.deregister_image(:image_id => image_id)
290
+
291
+ s3_bucket = AWS::S3::Bucket.find(bucket)
292
+ s3_bucket.objects(:prefix => image_name).clone.each do |obj|
293
+ obj.delete
294
+ end
295
+ if s3_bucket.empty?
296
+ s3_bucket.delete
297
+ end
298
+ end
299
+
300
+ def destroy_spot_instance_request(request_id)
301
+ @ec2.cancel_spot_instance_requests :spot_instance_request_id => request_id
302
+ end
303
+
304
+ def describe_load_balancers(name=nil)
305
+ lbs = []
306
+ opts = {}
307
+ opts[:load_balancer_names] = name if name
308
+ response = @ec2elb.describe_load_balancers(opts)
309
+ response.describeLoadBalancersResult.member.each do |member|
310
+ lb = {}
311
+ lb[:name] = member.loadBalancerName
312
+ lb[:dns_name] = member.dNSName
313
+
314
+ member.availabilityZones.member.each do |zone|
315
+ lb[:zones] ||= []
316
+ lb[:zones] << zone
317
+ end
318
+
319
+ member.listeners.member.each do |member|
320
+ listener = {}
321
+ listener[:protocol] = member.protocol
322
+ listener[:port] = member.loadBalancerPort
323
+ listener[:instance_port] = member.instancePort
324
+ lb[:listeners] ||= []
325
+ lb[:listeners] << listener
326
+ end
327
+
328
+ lbs << lb
329
+ end if response.describeLoadBalancersResult
330
+ return lbs
331
+ end
332
+
333
+ def describe_spot_instance_requests(request_id=nil)
334
+ requests = []
335
+ opts = {}
336
+ opts[:spot_instance_request_id] = request_id if request_id
337
+ response = @ec2.describe_spot_instance_requests(opts)
338
+ response.spotInstanceRequestSet.item.each do |item|
339
+ request = {}
340
+ request[:id] = item.spotInstanceRequestId
341
+ request[:spot_price] = item.spotPrice
342
+ request[:state] = item.state
343
+ request[:created_at] = item.createTime
344
+ request[:type] = item.launchSpecification.instanceType
345
+ request[:image_id] = item.launchSpecification.imageId
346
+ request[:instance_id] = item.instanceId
347
+ requests << request
348
+ end if response.spotInstanceRequestSet
349
+ return requests
350
+ end
351
+
352
+ # resource_id is any Amazon resource ID (e.g., instance ID or volume ID)
353
+ # tags is a hash of tag_name => tag_value pairs
354
+ def create_tags(resource_id, tags)
355
+ # Tags needs to be an array of hashes, not one big hash, so break it down.
356
+ @ec2.create_tags(:resource_id => resource_id, :tag => tags.collect { |k, v| { k.to_s => v.to_s } })
357
+ end
358
+
359
+ end
360
+
361
+ end
362
+ end