nogara-rubber 1.7.2

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 (389) hide show
  1. data/CHANGELOG +448 -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 +233 -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/passenger/config/rubber/deploy-passenger.rb +46 -0
  142. data/generators/vulcanize/templates/passenger/config/rubber/role/passenger/munin-passenger-memory.conf +34 -0
  143. data/generators/vulcanize/templates/passenger/config/rubber/role/passenger/munin-passenger-sudoers.conf +7 -0
  144. data/generators/vulcanize/templates/passenger/config/rubber/role/passenger/munin-passenger.conf +47 -0
  145. data/generators/vulcanize/templates/passenger/config/rubber/role/passenger/passenger-apache-vhost.conf +46 -0
  146. data/generators/vulcanize/templates/passenger/config/rubber/role/passenger/passenger.conf +35 -0
  147. data/generators/vulcanize/templates/passenger/config/rubber/rubber-passenger.yml +15 -0
  148. data/generators/vulcanize/templates/passenger/templates.yml +3 -0
  149. data/generators/vulcanize/templates/postgresql/config/rubber/common/database.yml +12 -0
  150. data/generators/vulcanize/templates/postgresql/config/rubber/deploy-postgresql.rb +131 -0
  151. data/generators/vulcanize/templates/postgresql/config/rubber/role/db/crontab +14 -0
  152. data/generators/vulcanize/templates/postgresql/config/rubber/role/db/monit-postgresql.conf +10 -0
  153. data/generators/vulcanize/templates/postgresql/config/rubber/role/db/pg_hba.conf +89 -0
  154. data/generators/vulcanize/templates/postgresql/config/rubber/role/db/postgresql-sysctl.conf +6 -0
  155. data/generators/vulcanize/templates/postgresql/config/rubber/role/db/postgresql.conf +504 -0
  156. data/generators/vulcanize/templates/postgresql/config/rubber/rubber-postgresql.yml +45 -0
  157. data/generators/vulcanize/templates/postgresql/templates.yml +1 -0
  158. data/generators/vulcanize/templates/redis/config/rubber/deploy-redis.rb +37 -0
  159. data/generators/vulcanize/templates/redis/config/rubber/role/redis/crontab +8 -0
  160. data/generators/vulcanize/templates/redis/config/rubber/role/redis/monit-redis.conf +9 -0
  161. data/generators/vulcanize/templates/redis/config/rubber/role/redis/redis.conf +141 -0
  162. data/generators/vulcanize/templates/redis/config/rubber/rubber-redis.yml +4 -0
  163. data/generators/vulcanize/templates/redis/templates.yml +1 -0
  164. data/generators/vulcanize/templates/resque/config/initializers/resque.rb +15 -0
  165. data/generators/vulcanize/templates/resque/config/rubber/common/resque.yml +5 -0
  166. data/generators/vulcanize/templates/resque/config/rubber/deploy-resque.rb +58 -0
  167. data/generators/vulcanize/templates/resque/config/rubber/role/resque_web/monit-resque_web.conf +14 -0
  168. data/generators/vulcanize/templates/resque/config/rubber/role/resque_worker/monit-resque_worker.conf +19 -0
  169. data/generators/vulcanize/templates/resque/config/rubber/rubber-resque.yml +18 -0
  170. data/generators/vulcanize/templates/resque/script/resque_worker_management.rb +144 -0
  171. data/generators/vulcanize/templates/resque/templates.rb +1 -0
  172. data/generators/vulcanize/templates/resque/templates.yml +3 -0
  173. data/generators/vulcanize/templates/sphinx/config/rubber/common/sphinx.yml +46 -0
  174. data/generators/vulcanize/templates/sphinx/config/rubber/deploy-sphinx.rb +112 -0
  175. data/generators/vulcanize/templates/sphinx/config/rubber/role/sphinx/crontab +11 -0
  176. data/generators/vulcanize/templates/sphinx/config/rubber/role/sphinx/monit-sphinx.conf +13 -0
  177. data/generators/vulcanize/templates/sphinx/config/rubber/rubber-sphinx.yml +6 -0
  178. data/generators/vulcanize/templates/sphinx/templates.yml +1 -0
  179. data/generators/vulcanize/vulcanize_generator.rb +184 -0
  180. data/lib/capistrano/hostcmd.rb +12 -0
  181. data/lib/generators/vulcanize/USAGE +6 -0
  182. data/lib/generators/vulcanize/templates/apache/config/rubber/deploy-apache.rb +51 -0
  183. data/lib/generators/vulcanize/templates/apache/config/rubber/role/apache/deflate.conf +10 -0
  184. data/lib/generators/vulcanize/templates/apache/config/rubber/role/apache/expires.conf +9 -0
  185. data/lib/generators/vulcanize/templates/apache/config/rubber/role/apache/headers.conf +6 -0
  186. data/lib/generators/vulcanize/templates/apache/config/rubber/role/apache/monit-apache.conf +8 -0
  187. data/lib/generators/vulcanize/templates/apache/config/rubber/role/apache/ports.conf +8 -0
  188. data/lib/generators/vulcanize/templates/apache/config/rubber/role/apache/setenvif.conf +52 -0
  189. data/lib/generators/vulcanize/templates/apache/config/rubber/role/web_tools/tools-apache-vhost.conf +79 -0
  190. data/lib/generators/vulcanize/templates/apache/config/rubber/role/web_tools/tools-apache.auth +7 -0
  191. data/lib/generators/vulcanize/templates/apache/config/rubber/role/web_tools/tools-index.html +34 -0
  192. data/lib/generators/vulcanize/templates/apache/config/rubber/rubber-apache.yml +6 -0
  193. data/lib/generators/vulcanize/templates/apache/templates.yml +1 -0
  194. data/lib/generators/vulcanize/templates/base/Capfile +14 -0
  195. data/lib/generators/vulcanize/templates/base/Rakefile +23 -0
  196. data/lib/generators/vulcanize/templates/base/config/deploy.rb +56 -0
  197. data/lib/generators/vulcanize/templates/base/config/rubber/common/crontab +22 -0
  198. data/lib/generators/vulcanize/templates/base/config/rubber/common/monit-postfix.conf +8 -0
  199. data/lib/generators/vulcanize/templates/base/config/rubber/common/rubber.profile +13 -0
  200. data/lib/generators/vulcanize/templates/base/config/rubber/deploy-setup.rb +92 -0
  201. data/lib/generators/vulcanize/templates/base/config/rubber/deploy-util.rb +97 -0
  202. data/lib/generators/vulcanize/templates/base/config/rubber/rubber-dns.yml +78 -0
  203. data/lib/generators/vulcanize/templates/base/config/rubber/rubber-rvm.yml +33 -0
  204. data/lib/generators/vulcanize/templates/base/config/rubber/rubber.yml +233 -0
  205. data/lib/generators/vulcanize/templates/base/lib/tasks/rubber.rake +15 -0
  206. data/lib/generators/vulcanize/templates/base/script/cron-rake +18 -0
  207. data/lib/generators/vulcanize/templates/base/script/cron-runner +18 -0
  208. data/lib/generators/vulcanize/templates/base/script/cron-sh +67 -0
  209. data/lib/generators/vulcanize/templates/base/templates.rb +11 -0
  210. data/lib/generators/vulcanize/templates/base/templates.yml +6 -0
  211. data/lib/generators/vulcanize/templates/cassandra/config/rubber/deploy-cassandra.rb +88 -0
  212. data/lib/generators/vulcanize/templates/cassandra/config/rubber/role/cassandra/cassandra.in.sh +60 -0
  213. data/lib/generators/vulcanize/templates/cassandra/config/rubber/role/cassandra/cassandra.yaml +210 -0
  214. data/lib/generators/vulcanize/templates/cassandra/config/rubber/role/cassandra/log4j-server.properties +45 -0
  215. data/lib/generators/vulcanize/templates/cassandra/config/rubber/role/cassandra/monit-cassandra.conf +8 -0
  216. data/lib/generators/vulcanize/templates/cassandra/config/rubber/rubber-cassandra.yml +18 -0
  217. data/lib/generators/vulcanize/templates/cassandra/templates.yml +1 -0
  218. data/lib/generators/vulcanize/templates/complete_mongrel_mysql/config/rubber/role/haproxy/haproxy-mongrel.conf +23 -0
  219. data/lib/generators/vulcanize/templates/complete_mongrel_mysql/config/rubber/role/nginx/nginx-mongrel.conf +113 -0
  220. data/lib/generators/vulcanize/templates/complete_mongrel_mysql/config/rubber/rubber-complete.yml +41 -0
  221. data/lib/generators/vulcanize/templates/complete_mongrel_mysql/templates.yml +6 -0
  222. data/lib/generators/vulcanize/templates/complete_passenger/config/rubber/role/haproxy/haproxy-passenger.conf +21 -0
  223. data/lib/generators/vulcanize/templates/complete_passenger/config/rubber/rubber-complete.yml +40 -0
  224. data/lib/generators/vulcanize/templates/complete_passenger/templates.rb +9 -0
  225. data/lib/generators/vulcanize/templates/complete_passenger/templates.yml +9 -0
  226. data/lib/generators/vulcanize/templates/complete_passenger_mysql/templates.yml +4 -0
  227. data/lib/generators/vulcanize/templates/complete_passenger_postgresql/templates.yml +4 -0
  228. data/lib/generators/vulcanize/templates/cruise/config/rubber/deploy-cruise.rb +72 -0
  229. data/lib/generators/vulcanize/templates/cruise/config/rubber/role/cruise/cruise +40 -0
  230. data/lib/generators/vulcanize/templates/cruise/config/rubber/role/cruise/my.cnf +165 -0
  231. data/lib/generators/vulcanize/templates/cruise/config/rubber/role/cruise/production.rb +8 -0
  232. data/lib/generators/vulcanize/templates/cruise/config/rubber/role/cruise/site_config.rb +76 -0
  233. data/lib/generators/vulcanize/templates/cruise/config/rubber/role/web_tools/cruise-nginx.conf +11 -0
  234. data/lib/generators/vulcanize/templates/cruise/config/rubber/rubber-cruise.yml +18 -0
  235. data/lib/generators/vulcanize/templates/cruise/templates.yml +1 -0
  236. data/lib/generators/vulcanize/templates/haproxy/config/rubber/deploy-haproxy.rb +45 -0
  237. data/lib/generators/vulcanize/templates/haproxy/config/rubber/role/haproxy/haproxy-base.conf +26 -0
  238. data/lib/generators/vulcanize/templates/haproxy/config/rubber/role/haproxy/haproxy-default.conf +8 -0
  239. data/lib/generators/vulcanize/templates/haproxy/config/rubber/role/haproxy/monit-haproxy.conf +9 -0
  240. data/lib/generators/vulcanize/templates/haproxy/config/rubber/role/haproxy/syslog-haproxy.conf +11 -0
  241. data/lib/generators/vulcanize/templates/haproxy/config/rubber/role/haproxy/syslogd-default.conf +21 -0
  242. data/lib/generators/vulcanize/templates/haproxy/config/rubber/role/web_tools/haproxy-nginx.conf +10 -0
  243. data/lib/generators/vulcanize/templates/haproxy/config/rubber/rubber-haproxy.yml +7 -0
  244. data/lib/generators/vulcanize/templates/haproxy/templates.yml +1 -0
  245. data/lib/generators/vulcanize/templates/jetty/config/rubber/deploy-jetty.rb +59 -0
  246. data/lib/generators/vulcanize/templates/jetty/config/rubber/role/jetty/jetty.sh +589 -0
  247. data/lib/generators/vulcanize/templates/jetty/config/rubber/role/jetty/jetty.xml +199 -0
  248. data/lib/generators/vulcanize/templates/jetty/config/rubber/role/jetty/monit-jetty.conf +9 -0
  249. data/lib/generators/vulcanize/templates/jetty/config/rubber/rubber-jetty.yml +10 -0
  250. data/lib/generators/vulcanize/templates/jetty/templates.yml +1 -0
  251. data/lib/generators/vulcanize/templates/memcached/config/memcached.yml +28 -0
  252. data/lib/generators/vulcanize/templates/memcached/config/rubber/common/memcached.yml +14 -0
  253. data/lib/generators/vulcanize/templates/memcached/config/rubber/role/memcached/memcached.conf +52 -0
  254. data/lib/generators/vulcanize/templates/memcached/config/rubber/role/memcached/memcached_munin_plugin +249 -0
  255. data/lib/generators/vulcanize/templates/memcached/config/rubber/rubber-memcached.yml +7 -0
  256. data/lib/generators/vulcanize/templates/memcached/templates.yml +1 -0
  257. data/lib/generators/vulcanize/templates/minimal_mysql/templates.yml +7 -0
  258. data/lib/generators/vulcanize/templates/minimal_nodb/templates.yml +6 -0
  259. data/lib/generators/vulcanize/templates/mongrel/config/rubber/deploy-mongrel.rb +75 -0
  260. data/lib/generators/vulcanize/templates/mongrel/config/rubber/role/mongrel/mongrel_cluster.yml +12 -0
  261. data/lib/generators/vulcanize/templates/mongrel/config/rubber/role/mongrel/monit-mongrel.conf +20 -0
  262. data/lib/generators/vulcanize/templates/mongrel/config/rubber/rubber-mongrel.yml +9 -0
  263. data/lib/generators/vulcanize/templates/mongrel/templates.yml +1 -0
  264. data/lib/generators/vulcanize/templates/monit/config/rubber/common/monit-default.conf +15 -0
  265. data/lib/generators/vulcanize/templates/monit/config/rubber/common/monit.conf +252 -0
  266. data/lib/generators/vulcanize/templates/monit/config/rubber/deploy-monit.rb +33 -0
  267. data/lib/generators/vulcanize/templates/monit/config/rubber/role/web_tools/monit-admin-nginx.conf +10 -0
  268. data/lib/generators/vulcanize/templates/monit/config/rubber/rubber-monit.yml +6 -0
  269. data/lib/generators/vulcanize/templates/monit/templates.yml +1 -0
  270. data/lib/generators/vulcanize/templates/munin/config/rubber/common/monit-munin.conf +8 -0
  271. data/lib/generators/vulcanize/templates/munin/config/rubber/common/munin-node.conf +48 -0
  272. data/lib/generators/vulcanize/templates/munin/config/rubber/common/munin-plugins.conf +11 -0
  273. data/lib/generators/vulcanize/templates/munin/config/rubber/deploy-munin.rb +46 -0
  274. data/lib/generators/vulcanize/templates/munin/config/rubber/role/web_tools/munin-nginx.conf +8 -0
  275. data/lib/generators/vulcanize/templates/munin/config/rubber/role/web_tools/munin-plugins.conf +31 -0
  276. data/lib/generators/vulcanize/templates/munin/config/rubber/role/web_tools/munin.conf +115 -0
  277. data/lib/generators/vulcanize/templates/munin/config/rubber/rubber-munin.yml +8 -0
  278. data/lib/generators/vulcanize/templates/munin/script/munin/example_mysql_query.rb +55 -0
  279. data/lib/generators/vulcanize/templates/munin/script/munin/example_simple.rb +24 -0
  280. data/lib/generators/vulcanize/templates/munin/templates.yml +1 -0
  281. data/lib/generators/vulcanize/templates/mysql/config/rubber/common/database.yml +12 -0
  282. data/lib/generators/vulcanize/templates/mysql/config/rubber/deploy-mysql.rb +169 -0
  283. data/lib/generators/vulcanize/templates/mysql/config/rubber/role/db/apparmor-mysql.conf +46 -0
  284. data/lib/generators/vulcanize/templates/mysql/config/rubber/role/db/crontab +14 -0
  285. data/lib/generators/vulcanize/templates/mysql/config/rubber/role/db/monit-mysql.cnf +10 -0
  286. data/lib/generators/vulcanize/templates/mysql/config/rubber/role/db/my.cnf +163 -0
  287. data/lib/generators/vulcanize/templates/mysql/config/rubber/role/mysql_slave/mysql_slave_munin_plugin +51 -0
  288. data/lib/generators/vulcanize/templates/mysql/config/rubber/rubber-mysql.yml +47 -0
  289. data/lib/generators/vulcanize/templates/mysql/templates.yml +1 -0
  290. data/lib/generators/vulcanize/templates/mysql_cluster/config/rubber/common/mysql_cluster_migrations.rb +13 -0
  291. data/lib/generators/vulcanize/templates/mysql_cluster/config/rubber/deploy-mysql_cluster.rb +177 -0
  292. data/lib/generators/vulcanize/templates/mysql_cluster/config/rubber/role/mysql_data/my.cnf +15 -0
  293. data/lib/generators/vulcanize/templates/mysql_cluster/config/rubber/role/mysql_mgm/ndb_mgmd.cnf +39 -0
  294. data/lib/generators/vulcanize/templates/mysql_cluster/config/rubber/role/mysql_sql/monit-mysql_cluster_sql.cnf +10 -0
  295. data/lib/generators/vulcanize/templates/mysql_cluster/config/rubber/role/mysql_sql/my.cnf +23 -0
  296. data/lib/generators/vulcanize/templates/mysql_cluster/config/rubber/rubber-mysql_cluster.yml +32 -0
  297. data/lib/generators/vulcanize/templates/mysql_cluster/templates.yml +1 -0
  298. data/lib/generators/vulcanize/templates/mysql_proxy/config/rubber/common/database.yml +16 -0
  299. data/lib/generators/vulcanize/templates/mysql_proxy/config/rubber/common/monit-mysql_proxy.cnf +10 -0
  300. data/lib/generators/vulcanize/templates/mysql_proxy/config/rubber/common/mysql-proxy +153 -0
  301. data/lib/generators/vulcanize/templates/mysql_proxy/config/rubber/common/mysql-proxy.conf +10 -0
  302. data/lib/generators/vulcanize/templates/mysql_proxy/config/rubber/common/mysql-proxy.lua +5 -0
  303. data/lib/generators/vulcanize/templates/mysql_proxy/config/rubber/deploy-mysql_proxy.rb +52 -0
  304. data/lib/generators/vulcanize/templates/mysql_proxy/config/rubber/rubber-mysql_proxy.yml +11 -0
  305. data/lib/generators/vulcanize/templates/mysql_proxy/templates.yml +1 -0
  306. data/lib/generators/vulcanize/templates/nginx/config/rubber/deploy-nginx.rb +45 -0
  307. data/lib/generators/vulcanize/templates/nginx/config/rubber/role/nginx/crontab +9 -0
  308. data/lib/generators/vulcanize/templates/nginx/config/rubber/role/nginx/monit-nginx.conf +8 -0
  309. data/lib/generators/vulcanize/templates/nginx/config/rubber/role/nginx/nginx.conf +42 -0
  310. data/lib/generators/vulcanize/templates/nginx/config/rubber/role/web_tools/nginx-tools.conf +55 -0
  311. data/lib/generators/vulcanize/templates/nginx/config/rubber/role/web_tools/tools-index.html +30 -0
  312. data/lib/generators/vulcanize/templates/nginx/config/rubber/role/web_tools/tools-nginx.auth +7 -0
  313. data/lib/generators/vulcanize/templates/nginx/config/rubber/rubber-nginx.yml +10 -0
  314. data/lib/generators/vulcanize/templates/nginx/templates.yml +1 -0
  315. data/lib/generators/vulcanize/templates/passenger/config/rubber/deploy-passenger.rb +46 -0
  316. data/lib/generators/vulcanize/templates/passenger/config/rubber/role/passenger/munin-passenger-memory.conf +34 -0
  317. data/lib/generators/vulcanize/templates/passenger/config/rubber/role/passenger/munin-passenger-sudoers.conf +7 -0
  318. data/lib/generators/vulcanize/templates/passenger/config/rubber/role/passenger/munin-passenger.conf +47 -0
  319. data/lib/generators/vulcanize/templates/passenger/config/rubber/role/passenger/passenger-apache-vhost.conf +46 -0
  320. data/lib/generators/vulcanize/templates/passenger/config/rubber/role/passenger/passenger.conf +35 -0
  321. data/lib/generators/vulcanize/templates/passenger/config/rubber/rubber-passenger.yml +15 -0
  322. data/lib/generators/vulcanize/templates/passenger/templates.yml +3 -0
  323. data/lib/generators/vulcanize/templates/postgresql/config/rubber/common/database.yml +12 -0
  324. data/lib/generators/vulcanize/templates/postgresql/config/rubber/deploy-postgresql.rb +131 -0
  325. data/lib/generators/vulcanize/templates/postgresql/config/rubber/role/db/crontab +14 -0
  326. data/lib/generators/vulcanize/templates/postgresql/config/rubber/role/db/monit-postgresql.conf +10 -0
  327. data/lib/generators/vulcanize/templates/postgresql/config/rubber/role/db/pg_hba.conf +89 -0
  328. data/lib/generators/vulcanize/templates/postgresql/config/rubber/role/db/postgresql-sysctl.conf +6 -0
  329. data/lib/generators/vulcanize/templates/postgresql/config/rubber/role/db/postgresql.conf +504 -0
  330. data/lib/generators/vulcanize/templates/postgresql/config/rubber/rubber-postgresql.yml +45 -0
  331. data/lib/generators/vulcanize/templates/postgresql/templates.yml +1 -0
  332. data/lib/generators/vulcanize/templates/redis/config/rubber/deploy-redis.rb +37 -0
  333. data/lib/generators/vulcanize/templates/redis/config/rubber/role/redis/crontab +8 -0
  334. data/lib/generators/vulcanize/templates/redis/config/rubber/role/redis/monit-redis.conf +9 -0
  335. data/lib/generators/vulcanize/templates/redis/config/rubber/role/redis/redis.conf +141 -0
  336. data/lib/generators/vulcanize/templates/redis/config/rubber/rubber-redis.yml +4 -0
  337. data/lib/generators/vulcanize/templates/redis/templates.yml +1 -0
  338. data/lib/generators/vulcanize/templates/resque/config/initializers/resque.rb +15 -0
  339. data/lib/generators/vulcanize/templates/resque/config/rubber/common/resque.yml +5 -0
  340. data/lib/generators/vulcanize/templates/resque/config/rubber/deploy-resque.rb +58 -0
  341. data/lib/generators/vulcanize/templates/resque/config/rubber/role/resque_web/monit-resque_web.conf +14 -0
  342. data/lib/generators/vulcanize/templates/resque/config/rubber/role/resque_worker/monit-resque_worker.conf +19 -0
  343. data/lib/generators/vulcanize/templates/resque/config/rubber/rubber-resque.yml +18 -0
  344. data/lib/generators/vulcanize/templates/resque/script/resque_worker_management.rb +144 -0
  345. data/lib/generators/vulcanize/templates/resque/templates.rb +1 -0
  346. data/lib/generators/vulcanize/templates/resque/templates.yml +3 -0
  347. data/lib/generators/vulcanize/templates/sphinx/config/rubber/common/sphinx.yml +46 -0
  348. data/lib/generators/vulcanize/templates/sphinx/config/rubber/deploy-sphinx.rb +112 -0
  349. data/lib/generators/vulcanize/templates/sphinx/config/rubber/role/sphinx/crontab +11 -0
  350. data/lib/generators/vulcanize/templates/sphinx/config/rubber/role/sphinx/monit-sphinx.conf +13 -0
  351. data/lib/generators/vulcanize/templates/sphinx/config/rubber/rubber-sphinx.yml +6 -0
  352. data/lib/generators/vulcanize/templates/sphinx/templates.yml +1 -0
  353. data/lib/generators/vulcanize/vulcanize_generator.rb +184 -0
  354. data/lib/rubber.rb +76 -0
  355. data/lib/rubber/capistrano.rb +1 -0
  356. data/lib/rubber/cloud.rb +13 -0
  357. data/lib/rubber/cloud/aws.rb +355 -0
  358. data/lib/rubber/cloud/base.rb +16 -0
  359. data/lib/rubber/configuration.rb +47 -0
  360. data/lib/rubber/dns.rb +13 -0
  361. data/lib/rubber/dns/base.rb +84 -0
  362. data/lib/rubber/dns/dyndns.rb +77 -0
  363. data/lib/rubber/dns/nettica.rb +117 -0
  364. data/lib/rubber/dns/zerigo.rb +115 -0
  365. data/lib/rubber/environment.rb +177 -0
  366. data/lib/rubber/generator.rb +209 -0
  367. data/lib/rubber/instance.rb +176 -0
  368. data/lib/rubber/railtie.rb +14 -0
  369. data/lib/rubber/recipes/rubber.rb +96 -0
  370. data/lib/rubber/recipes/rubber/bundles.rb +30 -0
  371. data/lib/rubber/recipes/rubber/deploy.rb +90 -0
  372. data/lib/rubber/recipes/rubber/instances.rb +445 -0
  373. data/lib/rubber/recipes/rubber/load_balancers.rb +44 -0
  374. data/lib/rubber/recipes/rubber/security_groups.rb +189 -0
  375. data/lib/rubber/recipes/rubber/setup.rb +534 -0
  376. data/lib/rubber/recipes/rubber/spot_requests.rb +23 -0
  377. data/lib/rubber/recipes/rubber/static_ips.rb +190 -0
  378. data/lib/rubber/recipes/rubber/utils.rb +226 -0
  379. data/lib/rubber/recipes/rubber/volumes.rb +264 -0
  380. data/lib/rubber/tasks/rubber.rb +279 -0
  381. data/lib/rubber/util.rb +72 -0
  382. data/rails/init.rb +6 -0
  383. data/test/environment_test.rb +144 -0
  384. data/test/generator_test.rb +370 -0
  385. data/test/instance_test.rb +96 -0
  386. data/test/test_helper.rb +14 -0
  387. data/test/util_test.rb +19 -0
  388. data/test/zerigo_test.rb +88 -0
  389. metadata +494 -0
@@ -0,0 +1,30 @@
1
+ namespace :rubber do
2
+
3
+ desc "Back up and register an image of the running instance"
4
+ task :bundle do
5
+ if find_servers_for_task(current_task).size > 1
6
+ fatal "Can only bundle a single instance at a time, use FILTER to limit the scope"
7
+ end
8
+ image_name = get_env('IMAGE', "The image name for the bundle", true, Time.now.strftime("%Y%m%d_%H%M"))
9
+ image_id = cloud.create_image(image_name)
10
+ logger.info "Newly registered image is: #{image_id}"
11
+ end
12
+
13
+ desc "De-register and Destroy the image for the given name"
14
+ required_task :destroy_bundle do
15
+ image_id = get_env('IMAGE_ID', 'The id of the image to be destroyed', true)
16
+ cloud.destroy_image(image_id)
17
+ end
18
+
19
+ desc "Describes all your own image bundles"
20
+ required_task :describe_bundles do
21
+ images = cloud.describe_images()
22
+ images.each do |image|
23
+ logger.info "======================"
24
+ logger.info "ID: #{image[:id]}"
25
+ logger.info "Location: #{image[:location]}"
26
+ logger.info "Root device type: #{image[:root_device_type]}"
27
+ end
28
+ end
29
+
30
+ end
@@ -0,0 +1,90 @@
1
+ namespace :rubber do
2
+
3
+ # Add in some hooks so that we can insert our own hooks at head/tail of
4
+ # hook chain - this is needed for making monit stop before everyone else.
5
+ before "deploy:start", "rubber:pre_start"
6
+ before "deploy:restart", "rubber:pre_restart"
7
+ before "deploy:stop", "rubber:pre_stop"
8
+ on :load do
9
+ after "deploy:start", "rubber:post_start"
10
+ after "deploy:restart", "rubber:post_restart"
11
+ after "deploy:stop", "rubber:post_stop"
12
+ end
13
+
14
+ task :pre_start do
15
+ end
16
+ task :pre_restart do
17
+ end
18
+ task :pre_stop do
19
+ end
20
+ task :post_start do
21
+ end
22
+ task :post_restart do
23
+ end
24
+ task :post_stop do
25
+ end
26
+
27
+ # Don't want to do rubber:config for update_code as that tree isn't official
28
+ # until it is 'committed' by the symlink task (and doing so causes it to run
29
+ # for bootstrap_db which should only config the db config file). However,
30
+ # deploy:migrations doesn't call update, so we need an additional trigger for
31
+ # it
32
+ after "deploy:update", "rubber:config"
33
+ after "deploy:rollback_code", "rubber:config"
34
+ before "deploy:migrate", "rubber:config"
35
+
36
+ desc <<-DESC
37
+ Configures the deployed rails application by running the rubber configuration process
38
+ DESC
39
+ task :config do
40
+ opts = {}
41
+ opts['NO_POST'] = true if ENV['NO_POST']
42
+ opts['FILE'] = ENV['FILE'] if ENV['FILE']
43
+ opts['RUBBER_ENV'] = RUBBER_ENV
44
+ # we need to set rails env as well because when running rake
45
+ # in a rails project, rails gets loaded before the rubber hook gets run
46
+ opts['RAILS_ENV'] = RUBBER_ENV
47
+
48
+ # when running deploy:migrations, we need to run config against release_path
49
+ opts[:deploy_path] = current_release if fetch(:migrate_target, :current).to_sym == :latest
50
+
51
+ run_config(opts)
52
+ end
53
+
54
+ # because we start server as appserver user, but migrate as root, server needs to be able to write logs, etc.
55
+ before "rubber:pre_start", "rubber:setup_app_permissions"
56
+ before "rubber:pre_restart", "rubber:setup_app_permissions"
57
+
58
+ desc <<-DESC
59
+ Sets permissions of files in application directory to be owned by app_user.
60
+ DESC
61
+ task :setup_app_permissions do
62
+ rsudo "find #{shared_path} -name cached-copy -prune -o -name bundle -prune -o -print0 | xargs -0 chown #{rubber_env.app_user}:#{rubber_env.app_user}"
63
+ rsudo "chown -R #{rubber_env.app_user}:#{rubber_env.app_user} #{current_path}/tmp"
64
+ end
65
+
66
+ def run_config(options={})
67
+ path = options.delete(:deploy_path) || current_path
68
+ extra_env = options.keys.inject("") {|all, k| "#{all} #{k}=\"#{options[k]}\""}
69
+
70
+ # Need to do this so we can work with staging instances without having to
71
+ # checkin instance file between create and bootstrap, as well as during a deploy
72
+ if fetch(:push_instance_config, false)
73
+ push_files = [rubber_instances.file] + rubber_cfg.environment.config_files
74
+ push_files.each do |file|
75
+ dest_file = file.sub(/^#{RUBBER_ROOT}\/?/, '')
76
+ put(File.read(file), File.join(path, dest_file), :mode => "+r")
77
+ end
78
+ end
79
+
80
+ # if the user has defined a secret config file, then push it into RUBBER_ROOT/config/rubber
81
+ secret = rubber_cfg.environment.config_secret
82
+ if secret && File.exist?(secret)
83
+ base = rubber_cfg.environment.config_root.sub(/^#{RUBBER_ROOT}\/?/, '')
84
+ put(File.read(secret), File.join(path, base, File.basename(secret)), :mode => "+r")
85
+ end
86
+
87
+ rsudo "cd #{path} && #{extra_env} rake rubber:config"
88
+ end
89
+
90
+ end
@@ -0,0 +1,445 @@
1
+ namespace :rubber do
2
+
3
+ desc <<-DESC
4
+ Create a new EC2 instance with the given ALIAS and ROLES
5
+ DESC
6
+ required_task :create do
7
+ instance_alias = get_env('ALIAS', "Instance alias (e.g. web01)", true)
8
+
9
+ env = rubber_cfg.environment.bind(nil, instance_alias)
10
+ default_roles = env.instance_roles
11
+ r = get_env("ROLES", "Instance roles (e.g. web,app,db:primary=true)", true, default_roles)
12
+
13
+ create_spot_instance = ENV.delete("SPOT_INSTANCE") || env.cloud_providers[env.cloud_provider].spot_instance
14
+
15
+ if r == '*'
16
+ instance_roles = rubber_cfg.environment.known_roles
17
+ instance_roles = instance_roles.collect {|role| role == "db" ? "db:primary=true" : role }
18
+ else
19
+ instance_roles = r.split(",")
20
+ end
21
+
22
+ ir = []
23
+ instance_roles.each do |r|
24
+ role = Rubber::Configuration::RoleItem.parse(r)
25
+
26
+ # If user doesn't setup a primary db, then be nice and do it
27
+ if role.name == "db" && role.options["primary"] == nil && rubber_instances.for_role("db").size == 0
28
+ value = Capistrano::CLI.ui.ask("You do not have a primary db role, should #{instance_alias} be it [y/n]?: ")
29
+ role.options["primary"] = true if value =~ /^y/
30
+ end
31
+
32
+ ir << role
33
+ end
34
+
35
+ # Add in roles that the given set of roles depends on
36
+ ir = Rubber::Configuration::RoleItem.expand_role_dependencies(ir, get_role_dependencies)
37
+
38
+ create_instance(instance_alias, ir, create_spot_instance)
39
+ end
40
+
41
+ desc <<-DESC
42
+ Refresh the host data for a EC2 instance with the given ALIAS.
43
+ This is useful to run when rubber:create fails after instance creation
44
+ DESC
45
+ required_task :refresh do
46
+ instance_alias = get_env('ALIAS', "Instance alias (e.g. web01)", true)
47
+ ENV.delete('ROLES') # so we don't get an error if people leave ROLES in env from :create CLI
48
+ refresh_instance(instance_alias)
49
+ end
50
+
51
+ desc <<-DESC
52
+ Destroy the EC2 instance for the given ALIAS
53
+ DESC
54
+ required_task :destroy do
55
+ instance_alias = get_env('ALIAS', "Instance alias (e.g. web01)", true)
56
+ ENV.delete('ROLES') # so we don't get an error if people leave ROLES in env from :create CLI
57
+ destroy_instance(instance_alias)
58
+ end
59
+
60
+ desc <<-DESC
61
+ Destroy ALL the EC2 instances for the current env
62
+ DESC
63
+ required_task :destroy_all do
64
+ rubber_instances.each do |ic|
65
+ destroy_instance(ic.name)
66
+ end
67
+ end
68
+
69
+ desc <<-DESC
70
+ Reboot the EC2 instance for the give ALIAS
71
+ DESC
72
+ required_task :reboot do
73
+ instance_alias = get_env('ALIAS', "Instance alias (e.g. web01)", true)
74
+ ENV.delete('ROLES') # so we don't get an error if people leave ROLES in env from :create CLI
75
+ reboot_instance(instance_alias)
76
+ end
77
+
78
+ desc <<-DESC
79
+ Stop the EC2 instance for the give ALIAS
80
+ DESC
81
+ required_task :stop do
82
+ instance_alias = get_env('ALIAS', "Instance alias (e.g. web01)", true)
83
+ ENV.delete('ROLES') # so we don't get an error if people leave ROLES in env from :create CLI
84
+ stop_instance(instance_alias)
85
+ end
86
+
87
+ desc <<-DESC
88
+ Start the EC2 instance for the give ALIAS
89
+ DESC
90
+ required_task :start do
91
+ instance_alias = get_env('ALIAS', "Instance alias (e.g. web01)", true)
92
+ ENV.delete('ROLES') # so we don't get an error if people leave ROLES in env from :create CLI
93
+ start_instance(instance_alias)
94
+ end
95
+
96
+ desc <<-DESC
97
+ Adds the given ROLES to the instance named ALIAS
98
+ DESC
99
+ required_task :add_role do
100
+ instance_alias = get_env('ALIAS', "Instance alias (e.g. web01)", true)
101
+ r = get_env('ROLES', "Instance roles (e.g. web,app,db:primary=true)", true)
102
+
103
+ instance_roles = r.split(",")
104
+
105
+ ir = []
106
+ instance_roles.each do |r|
107
+ role = Rubber::Configuration::RoleItem.parse(r)
108
+ ir << role
109
+ end
110
+
111
+ # Add in roles that the given set of roles depends on
112
+ ir = Rubber::Configuration::RoleItem.expand_role_dependencies(ir, get_role_dependencies)
113
+
114
+ instance = rubber_instances[instance_alias]
115
+ fatal "Instance does not exist: #{instance_alias}" unless instance
116
+
117
+ instance.roles = (instance.roles + ir).uniq
118
+ rubber_instances.save()
119
+ logger.info "Roles for #{instance_alias} are now:"
120
+ logger.info instance.role_names.sort.join("\n")
121
+ logger.info ''
122
+ logger.info "Run 'cap rubber:bootstrap' if done adding roles"
123
+ end
124
+
125
+ desc <<-DESC
126
+ Removes the given ROLES from the instance named ALIAS
127
+ DESC
128
+ required_task :remove_role do
129
+ instance_alias = get_env('ALIAS', "Instance alias (e.g. web01)", true)
130
+ r = get_env('ROLES', "Instance roles (e.g. web,app,db:primary=true)", true)
131
+
132
+ instance_roles = r.split(",")
133
+
134
+ ir = []
135
+ instance_roles.each do |r|
136
+ role = Rubber::Configuration::RoleItem.parse(r)
137
+ ir << role
138
+ end
139
+
140
+ instance = rubber_instances[instance_alias]
141
+ fatal "Instance does not exist: #{instance_alias}" unless instance
142
+
143
+ instance.roles = (instance.roles - ir).uniq
144
+ rubber_instances.save()
145
+ logger.info "Roles for #{instance_alias} are now:"
146
+ logger.info instance.role_names.sort.join("\n")
147
+ end
148
+
149
+ desc <<-DESC
150
+ List all your EC2 instances
151
+ DESC
152
+ required_task :describe do
153
+ results = []
154
+ format = "%-10s %-10s %-10s %-15s %-30s"
155
+ results << format % %w[InstanceID State Zone IP Alias\ (*=unknown)]
156
+
157
+ instances = cloud.describe_instances()
158
+ instances.each do |instance|
159
+ local_alias = find_alias(instance[:external_ip], instance[:id], instance[:state] == 'running')
160
+ results << format % [instance[:id], instance[:state], instance[:zone], instance[:external_ip] || "NoIP", local_alias || "Unknown"]
161
+ end
162
+ results.each {|r| logger.info r}
163
+ end
164
+
165
+ desc <<-DESC
166
+ Describes the availability zones
167
+ DESC
168
+ required_task :describe_zones do
169
+ results = []
170
+ format = "%-20s %-15s"
171
+ results << format % %w[Name State]
172
+
173
+ zones = cloud.describe_availability_zones()
174
+ zones.each do |zone|
175
+ results << format % [zone[:name], zone[:state]]
176
+ end
177
+
178
+ results.each {|r| logger.info r}
179
+ end
180
+
181
+
182
+ set :print_ip_command, "ifconfig eth0 | awk 'NR==2 {print $2}' | awk -F: '{print $2}'"
183
+
184
+ # Creates a new ec2 instance with the given alias and roles
185
+ # Configures aliases (/etc/hosts) on local and remote machines
186
+ def create_instance(instance_alias, instance_roles, create_spot_instance=false)
187
+ fatal "Instance already exists: #{instance_alias}" if rubber_instances[instance_alias]
188
+
189
+ role_names = instance_roles.collect{|x| x.name}
190
+ env = rubber_cfg.environment.bind(role_names, instance_alias)
191
+
192
+ # We need to use security_groups during create, so create them up front
193
+ setup_security_groups(instance_alias, role_names)
194
+ security_groups = get_assigned_security_groups(instance_alias, role_names)
195
+
196
+ ami = env.cloud_providers[env.cloud_provider].image_id
197
+ ami_type = env.cloud_providers[env.cloud_provider].image_type
198
+ availability_zone = env.availability_zone
199
+
200
+ if create_spot_instance
201
+ spot_price = env.cloud_providers[env.cloud_provider].spot_price.to_s
202
+
203
+ logger.info "Creating spot instance request for instance #{ami}/#{ami_type}/#{security_groups.join(',') rescue 'Default'}/#{availability_zone || 'Default'}"
204
+ request_id = cloud.create_spot_instance_request(spot_price, ami, ami_type, security_groups, availability_zone)
205
+
206
+ print "Waiting for spot instance request to be fulfilled"
207
+ max_wait_time = env.cloud_providers[env.cloud_provider].spot_instance_request_timeout || (1.0 / 0) # Use the specified timeout value or default to infinite.
208
+ instance_id = nil
209
+ while instance_id.nil? do
210
+ print "."
211
+ sleep 2
212
+ max_wait_time -= 2
213
+
214
+ request = cloud.describe_spot_instance_requests(request_id).first
215
+ instance_id = request[:instance_id]
216
+
217
+ if max_wait_time < 0 && instance_id.nil?
218
+ cloud.destroy_spot_instance_request(request[:id])
219
+
220
+ print "\n"
221
+ print "Failed to fulfill spot instance in the time specified. Falling back to on-demand instance creation."
222
+ break
223
+ end
224
+ end
225
+
226
+ print "\n"
227
+ end
228
+
229
+ if !create_spot_instance || (create_spot_instance && max_wait_time < 0)
230
+ logger.info "Creating instance #{ami}/#{ami_type}/#{security_groups.join(',') rescue 'Default'}/#{availability_zone || 'Default'}"
231
+ instance_id = cloud.create_instance(ami, ami_type, security_groups, availability_zone)
232
+ end
233
+
234
+ logger.info "Instance #{instance_id} created"
235
+
236
+ instance_item = Rubber::Configuration::InstanceItem.new(instance_alias, env.domain, instance_roles, instance_id, security_groups)
237
+ instance_item.spot_instance_request_id = request_id if create_spot_instance
238
+ rubber_instances.add(instance_item)
239
+ rubber_instances.save()
240
+
241
+
242
+ print "Waiting for instance to start"
243
+ while true do
244
+ print "."
245
+ sleep 2
246
+
247
+ break if refresh_instance(instance_alias)
248
+ end
249
+ end
250
+
251
+ # Refreshes a ec2 instance with the given alias
252
+ # Configures aliases (/etc/hosts) on local and remote machines
253
+ def refresh_instance(instance_alias)
254
+ instance_item = rubber_instances[instance_alias]
255
+
256
+ fatal "Instance does not exist: #{instance_alias}" if ! instance_item
257
+
258
+ env = rubber_cfg.environment.bind(instance_item.role_names, instance_alias)
259
+
260
+ instance = cloud.describe_instances(instance_item.instance_id).first rescue {}
261
+
262
+ if instance[:state] == "running"
263
+ print "\n"
264
+ logger.info "Instance running, fetching hostname/ip data"
265
+ instance_item.external_host = instance[:external_host]
266
+ instance_item.external_ip = instance[:external_ip]
267
+ instance_item.internal_host = instance[:internal_host]
268
+ instance_item.internal_ip = instance[:internal_ip]
269
+ instance_item.zone = instance[:zone]
270
+ instance_item.platform = instance[:platform]
271
+ instance_item.root_device_type = instance[:root_device_type]
272
+ rubber_instances.save()
273
+
274
+ unless instance_item.windows?
275
+ # weird cap/netssh bug, sometimes just hangs forever on initial connect, so force a timeout
276
+ begin
277
+ Timeout::timeout(30) do
278
+ # turn back on root ssh access if we are using root as the capistrano user for connecting
279
+ enable_root_ssh(instance_item.external_ip, fetch(:initial_ssh_user, 'ubuntu')) if user == 'root'
280
+ # force a connection so if above isn't enabled we still timeout if initial connection hangs
281
+ direct_connection(instance_item.external_ip) do
282
+ run "echo"
283
+ end
284
+ end
285
+ rescue Timeout::Error
286
+ logger.info "timeout in initial connect, retrying"
287
+ retry
288
+ end
289
+ end
290
+
291
+ # setup amazon elastic ips if configured to do so
292
+ setup_static_ips
293
+
294
+ # Need to setup aliases so ssh doesn't give us errors when we
295
+ # later try to connect to same ip but using alias
296
+ setup_local_aliases
297
+
298
+ # re-load the roles since we may have just defined new ones
299
+ load_roles() unless env.disable_auto_roles
300
+
301
+ rubber_instances.save()
302
+
303
+ # Add the aliases for this instance to all other hosts
304
+ setup_remote_aliases
305
+ setup_dns_aliases
306
+
307
+ return true
308
+ end
309
+ return false
310
+ end
311
+
312
+
313
+ # Destroys the given ec2 instance
314
+ def destroy_instance(instance_alias)
315
+ instance_item = rubber_instances[instance_alias]
316
+ fatal "Instance does not exist: #{instance_alias}" if ! instance_item
317
+
318
+ env = rubber_cfg.environment.bind(instance_item.role_names, instance_item.name)
319
+
320
+ value = Capistrano::CLI.ui.ask("About to DESTROY #{instance_alias} (#{instance_item.instance_id}) in mode #{RUBBER_ENV}. Are you SURE [yes/NO]?: ")
321
+ fatal("Exiting", 0) if value != "yes"
322
+
323
+ if instance_item.static_ip
324
+ value = Capistrano::CLI.ui.ask("Instance has a static ip, do you want to release it? [y/N]?: ")
325
+ destroy_static_ip(instance_item.static_ip) if value =~ /^y/
326
+ end
327
+
328
+ if instance_item.volumes
329
+ value = Capistrano::CLI.ui.ask("Instance has persistent volumes, do you want to destroy them? [y/N]?: ")
330
+ if value =~ /^y/
331
+ instance_item.volumes.clone.each do |volume_id|
332
+ destroy_volume(volume_id)
333
+ end
334
+ end
335
+ end
336
+
337
+ logger.info "Destroying instance alias=#{instance_alias}, instance_id=#{instance_item.instance_id}"
338
+
339
+ cloud.destroy_instance(instance_item.instance_id)
340
+
341
+ rubber_instances.remove(instance_alias)
342
+ rubber_instances.save()
343
+
344
+ # re-load the roles since we just removed some and setup_remote_aliases
345
+ # shouldn't hit removed ones
346
+ load_roles() unless env.disable_auto_roles
347
+
348
+ setup_aliases
349
+ destroy_dyndns(instance_item)
350
+ cleanup_known_hosts(instance_item) unless env.disable_known_hosts_cleanup
351
+ end
352
+
353
+ # Reboots the given ec2 instance
354
+ def reboot_instance(instance_alias)
355
+ instance_item = rubber_instances[instance_alias]
356
+ fatal "Instance does not exist: #{instance_alias}" if ! instance_item
357
+
358
+ env = rubber_cfg.environment.bind(instance_item.role_names, instance_item.name)
359
+
360
+ value = Capistrano::CLI.ui.ask("About to REBOOT #{instance_alias} (#{instance_item.instance_id}) in mode #{RUBBER_ENV}. Are you SURE [yes/NO]?: ")
361
+ fatal("Exiting", 0) if value != "yes"
362
+
363
+ logger.info "Rebooting instance alias=#{instance_alias}, instance_id=#{instance_item.instance_id}"
364
+
365
+ cloud.reboot_instance(instance_item.instance_id)
366
+ end
367
+
368
+ # Stops the given ec2 instance. Note that this operation only works for instances that use an EBS volume for the root
369
+ # device and that are not spot instances.
370
+ def stop_instance(instance_alias)
371
+ instance_item = rubber_instances[instance_alias]
372
+ fatal "Instance does not exist: #{instance_alias}" if ! instance_item
373
+ fatal "Cannot stop spot instances!" if ! instance_item.spot_instance_request_id.nil?
374
+ fatal "Cannot stop instances with instance-store root device!" if (instance_item.root_device_type != 'ebs')
375
+
376
+ env = rubber_cfg.environment.bind(instance_item.role_names, instance_item.name)
377
+
378
+ value = Capistrano::CLI.ui.ask("About to STOP #{instance_alias} (#{instance_item.instance_id}) in mode #{RUBBER_ENV}. Are you SURE [yes/NO]?: ")
379
+ fatal("Exiting", 0) if value != "yes"
380
+
381
+ logger.info "Stopping instance alias=#{instance_alias}, instance_id=#{instance_item.instance_id}"
382
+
383
+ cloud.stop_instance(instance_item.instance_id)
384
+ end
385
+
386
+ # Starts the given ec2 instance. Note that this operation only works for instances that use an EBS volume for the root
387
+ # device, that are not spot instances, and that are already stopped.
388
+ def start_instance(instance_alias)
389
+ instance_item = rubber_instances[instance_alias]
390
+ fatal "Instance does not exist: #{instance_alias}" if ! instance_item
391
+ fatal "Cannot start spot instances!" if ! instance_item.spot_instance_request_id.nil?
392
+ fatal "Cannot start instances with instance-store root device!" if (instance_item.root_device_type != 'ebs')
393
+
394
+ env = rubber_cfg.environment.bind(instance_item.role_names, instance_item.name)
395
+
396
+ value = Capistrano::CLI.ui.ask("About to START #{instance_alias} (#{instance_item.instance_id}) in mode #{RUBBER_ENV}. Are you SURE [yes/NO]?: ")
397
+ fatal("Exiting", 0) if value != "yes"
398
+
399
+ logger.info "Starting instance alias=#{instance_alias}, instance_id=#{instance_item.instance_id}"
400
+
401
+ cloud.start_instance(instance_item.instance_id)
402
+
403
+ # Re-starting an instance will almost certainly give it a new set of IPs and DNS entries, so refresh the values.
404
+ print "Waiting for instance to start"
405
+ while true do
406
+ print "."
407
+ sleep 2
408
+
409
+ break if refresh_instance(instance_alias)
410
+ end
411
+ end
412
+
413
+ # delete from ~/.ssh/known_hosts all lines that begin with ec2- or instance_alias
414
+ def cleanup_known_hosts(instance_item)
415
+ logger.info "Cleaning ~/.ssh/known_hosts"
416
+ File.open(File.expand_path('~/.ssh/known_hosts'), 'r+') do |f|
417
+ out = ""
418
+ f.each do |line|
419
+ line = case line
420
+ when /^ec2-/; ''
421
+ when /#{instance_item.full_name}/; ''
422
+ when /#{instance_item.external_host}/; ''
423
+ when /#{instance_item.external_ip}/; ''
424
+ else line;
425
+ end
426
+ out << line
427
+ end
428
+ f.pos = 0
429
+ f.print out
430
+ f.truncate(f.pos)
431
+ end
432
+ end
433
+
434
+ def get_role_dependencies
435
+ # convert string format of role_dependencies from rubber.yml into
436
+ # objects for use by expand_role_dependencies
437
+ deps = {}
438
+ rubber_env.role_dependencies.each do |k, v|
439
+ rhs = Array(v).collect {|r| Rubber::Configuration::RoleItem.parse(r)}
440
+ deps[Rubber::Configuration::RoleItem.parse(k)] = rhs
441
+ end if rubber_env.role_dependencies
442
+ return deps
443
+ end
444
+
445
+ end