sml-rubber 0.9.13 → 1.5.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (312) hide show
  1. data/CHANGELOG +350 -0
  2. data/TODO +4 -0
  3. data/VERSION +1 -1
  4. data/bin/vulcanize +16 -32
  5. data/generators/vulcanize/templates/apache/config/rubber/deploy-apache.rb +6 -6
  6. data/generators/vulcanize/templates/apache/config/rubber/role/apache/monit-apache.conf +2 -2
  7. data/generators/vulcanize/templates/apache/config/rubber/role/apache/ports.conf +3 -0
  8. data/generators/vulcanize/templates/apache/config/rubber/role/web_tools/tools-apache-vhost.conf +30 -13
  9. data/generators/vulcanize/templates/apache/config/rubber/role/web_tools/tools-index.html +6 -2
  10. data/generators/vulcanize/templates/apache/config/rubber/rubber-apache.yml +0 -1
  11. data/generators/vulcanize/templates/base/Rakefile +21 -0
  12. data/generators/vulcanize/templates/base/config/deploy.rb +1 -0
  13. data/generators/vulcanize/templates/base/config/rubber/common/crontab +7 -1
  14. data/generators/vulcanize/templates/base/config/rubber/common/monit-postfix.conf +8 -0
  15. data/generators/vulcanize/templates/base/config/rubber/common/rubber.profile +13 -0
  16. data/generators/vulcanize/templates/base/config/rubber/deploy-setup.rb +53 -65
  17. data/generators/vulcanize/templates/base/config/rubber/deploy-util.rb +97 -0
  18. data/generators/vulcanize/templates/base/config/rubber/rubber-dns.yml +78 -0
  19. data/generators/vulcanize/templates/base/config/rubber/rubber-rvm.yml +28 -0
  20. data/generators/vulcanize/templates/base/config/rubber/rubber.yml +28 -34
  21. data/generators/vulcanize/templates/base/script/cron-runner +1 -1
  22. data/generators/vulcanize/templates/base/templates.rb +9 -0
  23. data/generators/vulcanize/templates/base/templates.yml +5 -0
  24. data/generators/vulcanize/templates/cassandra/config/rubber/deploy-cassandra.rb +88 -0
  25. data/generators/vulcanize/templates/cassandra/config/rubber/role/cassandra/cassandra.in.sh +60 -0
  26. data/generators/vulcanize/templates/cassandra/config/rubber/role/cassandra/cassandra.yaml +210 -0
  27. data/generators/vulcanize/templates/cassandra/config/rubber/role/cassandra/log4j-server.properties +45 -0
  28. data/generators/vulcanize/templates/cassandra/config/rubber/role/cassandra/monit-cassandra.conf +8 -0
  29. data/generators/vulcanize/templates/cassandra/config/rubber/rubber-cassandra.yml +18 -0
  30. data/generators/vulcanize/templates/cassandra/templates.yml +1 -0
  31. data/generators/vulcanize/templates/complete_mongrel_mysql/config/rubber/role/haproxy/haproxy-mongrel.conf +2 -2
  32. data/generators/vulcanize/templates/{complete_passenger_mysql → complete_passenger}/config/rubber/role/haproxy/haproxy-passenger.conf +4 -2
  33. data/generators/vulcanize/templates/{complete_passenger_mysql → complete_passenger}/config/rubber/rubber-complete.yml +0 -0
  34. data/generators/vulcanize/templates/complete_passenger/templates.rb +9 -0
  35. data/generators/vulcanize/templates/complete_passenger/templates.yml +9 -0
  36. data/generators/vulcanize/templates/complete_passenger_mysql/templates.yml +1 -7
  37. data/generators/vulcanize/templates/complete_passenger_postgresql/templates.yml +4 -0
  38. data/generators/vulcanize/templates/cruise/config/rubber/deploy-cruise.rb +3 -3
  39. data/generators/vulcanize/templates/cruise/config/rubber/role/cruise/my.cnf +1 -1
  40. data/generators/vulcanize/templates/haproxy/config/rubber/deploy-haproxy.rb +5 -5
  41. data/generators/vulcanize/templates/haproxy/config/rubber/role/haproxy/monit-haproxy.conf +2 -2
  42. data/generators/vulcanize/templates/haproxy/config/rubber/role/haproxy/syslog-haproxy.conf +8 -3
  43. data/generators/vulcanize/templates/haproxy/config/rubber/role/haproxy/syslogd-default.conf +4 -0
  44. data/generators/vulcanize/templates/jetty/config/rubber/deploy-jetty.rb +59 -0
  45. data/generators/vulcanize/templates/jetty/config/rubber/role/jetty/jetty.sh +589 -0
  46. data/generators/vulcanize/templates/jetty/config/rubber/role/jetty/jetty.xml +199 -0
  47. data/generators/vulcanize/templates/jetty/config/rubber/role/jetty/monit-jetty.conf +9 -0
  48. data/generators/vulcanize/templates/jetty/config/rubber/rubber-jetty.yml +10 -0
  49. data/generators/vulcanize/templates/jetty/templates.yml +1 -0
  50. data/generators/vulcanize/templates/memcached/config/rubber/role/memcached/memcached.conf +1 -1
  51. data/generators/vulcanize/templates/mongrel/config/rubber/deploy-mongrel.rb +5 -5
  52. data/generators/vulcanize/templates/mongrel/config/rubber/role/mongrel/monit-mongrel.conf +2 -2
  53. data/generators/vulcanize/templates/monit/config/rubber/common/monit.conf +2 -1
  54. data/generators/vulcanize/templates/monit/config/rubber/deploy-monit.rb +5 -4
  55. data/generators/vulcanize/templates/munin/config/rubber/common/monit-munin.conf +2 -2
  56. data/generators/vulcanize/templates/munin/config/rubber/common/munin-node.conf +1 -1
  57. data/generators/vulcanize/templates/munin/config/rubber/common/munin-plugins.conf +11 -0
  58. data/generators/vulcanize/templates/munin/config/rubber/deploy-munin.rb +5 -5
  59. data/generators/vulcanize/templates/munin/config/rubber/role/web_tools/munin-plugins.conf +1 -1
  60. data/generators/vulcanize/templates/munin/config/rubber/role/web_tools/munin.conf +1 -0
  61. data/generators/vulcanize/templates/munin/config/rubber/rubber-munin.yml +1 -1
  62. data/generators/vulcanize/templates/munin/script/munin/example_mysql_query.rb +6 -8
  63. data/generators/vulcanize/templates/mysql/config/rubber/common/database.yml +1 -0
  64. data/generators/vulcanize/templates/mysql/config/rubber/deploy-mysql.rb +40 -27
  65. data/generators/vulcanize/templates/mysql/config/rubber/role/db/apparmor-mysql.conf +46 -0
  66. data/generators/vulcanize/templates/mysql/config/rubber/role/db/monit-mysql.cnf +2 -2
  67. data/generators/vulcanize/templates/mysql/config/rubber/role/db/my.cnf +2 -6
  68. data/generators/vulcanize/templates/mysql/config/rubber/rubber-mysql.yml +2 -1
  69. data/generators/vulcanize/templates/mysql_cluster/config/rubber/deploy-mysql_cluster.rb +19 -15
  70. data/generators/vulcanize/templates/mysql_cluster/config/rubber/role/mysql_sql/monit-mysql_cluster_sql.cnf +2 -2
  71. data/generators/vulcanize/templates/mysql_proxy/config/rubber/common/monit-mysql_proxy.cnf +2 -2
  72. data/generators/vulcanize/templates/mysql_proxy/config/rubber/deploy-mysql_proxy.rb +3 -3
  73. data/generators/vulcanize/templates/nginx/config/rubber/deploy-nginx.rb +5 -5
  74. data/generators/vulcanize/templates/nginx/config/rubber/role/nginx/monit-nginx.conf +2 -2
  75. data/generators/vulcanize/templates/passenger/config/rubber/deploy-passenger.rb +11 -2
  76. data/generators/vulcanize/templates/passenger/config/rubber/role/passenger/munin-passenger-memory.conf +34 -0
  77. data/generators/vulcanize/templates/passenger/config/rubber/role/passenger/munin-passenger-sudoers.conf +2 -1
  78. data/generators/vulcanize/templates/passenger/config/rubber/role/passenger/munin-passenger.conf +1 -1
  79. data/generators/vulcanize/templates/passenger/config/rubber/role/passenger/passenger.conf +28 -3
  80. data/generators/vulcanize/templates/passenger/config/rubber/rubber-passenger.yml +5 -2
  81. data/generators/vulcanize/templates/passenger/templates.yml +3 -1
  82. data/generators/vulcanize/templates/postgresql/config/rubber/common/database.yml +12 -0
  83. data/generators/vulcanize/templates/postgresql/config/rubber/deploy-postgresql.rb +131 -0
  84. data/generators/vulcanize/templates/postgresql/config/rubber/role/db/crontab +14 -0
  85. data/generators/vulcanize/templates/postgresql/config/rubber/role/db/monit-postgresql.conf +10 -0
  86. data/generators/vulcanize/templates/postgresql/config/rubber/role/db/pg_hba.conf +89 -0
  87. data/generators/vulcanize/templates/postgresql/config/rubber/role/db/postgresql-sysctl.conf +6 -0
  88. data/generators/vulcanize/templates/postgresql/config/rubber/role/db/postgresql.conf +504 -0
  89. data/generators/vulcanize/templates/postgresql/config/rubber/rubber-postgresql.yml +45 -0
  90. data/generators/vulcanize/templates/postgresql/templates.yml +1 -0
  91. data/generators/vulcanize/templates/redis/config/rubber/deploy-redis.rb +37 -0
  92. data/generators/vulcanize/templates/redis/config/rubber/role/redis/crontab +8 -0
  93. data/generators/vulcanize/templates/redis/config/rubber/role/redis/monit-redis.conf +9 -0
  94. data/generators/vulcanize/templates/redis/config/rubber/role/redis/redis.conf +141 -0
  95. data/generators/vulcanize/templates/redis/config/rubber/rubber-redis.yml +4 -0
  96. data/generators/vulcanize/templates/redis/templates.yml +1 -0
  97. data/generators/vulcanize/templates/resque/config/initializers/resque.rb +15 -0
  98. data/generators/vulcanize/templates/resque/config/rubber/common/resque.yml +5 -0
  99. data/generators/vulcanize/templates/resque/config/rubber/deploy-resque.rb +58 -0
  100. data/generators/vulcanize/templates/resque/config/rubber/role/resque_web/monit-resque_web.conf +14 -0
  101. data/generators/vulcanize/templates/resque/config/rubber/role/resque_worker/monit-resque_worker.conf +19 -0
  102. data/generators/vulcanize/templates/resque/config/rubber/rubber-resque.yml +18 -0
  103. data/generators/vulcanize/templates/resque/script/resque_worker_management.rb +112 -0
  104. data/generators/vulcanize/templates/resque/templates.rb +1 -0
  105. data/generators/vulcanize/templates/resque/templates.yml +3 -0
  106. data/generators/vulcanize/templates/sphinx/config/rubber/deploy-sphinx.rb +8 -8
  107. data/generators/vulcanize/templates/sphinx/config/rubber/role/sphinx/crontab +2 -2
  108. data/generators/vulcanize/templates/sphinx/config/rubber/role/sphinx/monit-sphinx.conf +7 -4
  109. data/generators/vulcanize/vulcanize_generator.rb +166 -49
  110. data/lib/generators/vulcanize/USAGE +6 -0
  111. data/lib/generators/vulcanize/templates/apache/config/rubber/deploy-apache.rb +51 -0
  112. data/lib/generators/vulcanize/templates/apache/config/rubber/role/apache/deflate.conf +10 -0
  113. data/lib/generators/vulcanize/templates/apache/config/rubber/role/apache/expires.conf +9 -0
  114. data/lib/generators/vulcanize/templates/apache/config/rubber/role/apache/headers.conf +6 -0
  115. data/lib/generators/vulcanize/templates/apache/config/rubber/role/apache/monit-apache.conf +8 -0
  116. data/lib/generators/vulcanize/templates/apache/config/rubber/role/apache/ports.conf +8 -0
  117. data/lib/generators/vulcanize/templates/apache/config/rubber/role/apache/setenvif.conf +52 -0
  118. data/lib/generators/vulcanize/templates/apache/config/rubber/role/web_tools/tools-apache-vhost.conf +79 -0
  119. data/lib/generators/vulcanize/templates/apache/config/rubber/role/web_tools/tools-apache.auth +7 -0
  120. data/lib/generators/vulcanize/templates/apache/config/rubber/role/web_tools/tools-index.html +34 -0
  121. data/lib/generators/vulcanize/templates/apache/config/rubber/rubber-apache.yml +6 -0
  122. data/lib/generators/vulcanize/templates/apache/templates.yml +1 -0
  123. data/lib/generators/vulcanize/templates/base/Capfile +14 -0
  124. data/lib/generators/vulcanize/templates/base/Rakefile +21 -0
  125. data/lib/generators/vulcanize/templates/base/config/deploy.rb +56 -0
  126. data/lib/generators/vulcanize/templates/base/config/rubber/common/crontab +22 -0
  127. data/lib/generators/vulcanize/templates/base/config/rubber/common/monit-postfix.conf +8 -0
  128. data/lib/generators/vulcanize/templates/base/config/rubber/common/rubber.profile +13 -0
  129. data/lib/generators/vulcanize/templates/base/config/rubber/deploy-setup.rb +92 -0
  130. data/lib/generators/vulcanize/templates/base/config/rubber/deploy-util.rb +97 -0
  131. data/lib/generators/vulcanize/templates/base/config/rubber/rubber-dns.yml +78 -0
  132. data/lib/generators/vulcanize/templates/base/config/rubber/rubber-rvm.yml +28 -0
  133. data/lib/generators/vulcanize/templates/base/config/rubber/rubber.yml +235 -0
  134. data/lib/generators/vulcanize/templates/base/lib/tasks/rubber.rake +15 -0
  135. data/lib/generators/vulcanize/templates/base/script/cron-rake +18 -0
  136. data/lib/generators/vulcanize/templates/base/script/cron-runner +18 -0
  137. data/lib/generators/vulcanize/templates/base/script/cron-sh +67 -0
  138. data/lib/generators/vulcanize/templates/base/templates.rb +9 -0
  139. data/lib/generators/vulcanize/templates/base/templates.yml +6 -0
  140. data/lib/generators/vulcanize/templates/cassandra/config/rubber/deploy-cassandra.rb +88 -0
  141. data/lib/generators/vulcanize/templates/cassandra/config/rubber/role/cassandra/cassandra.in.sh +60 -0
  142. data/lib/generators/vulcanize/templates/cassandra/config/rubber/role/cassandra/cassandra.yaml +210 -0
  143. data/lib/generators/vulcanize/templates/cassandra/config/rubber/role/cassandra/log4j-server.properties +45 -0
  144. data/lib/generators/vulcanize/templates/cassandra/config/rubber/role/cassandra/monit-cassandra.conf +8 -0
  145. data/lib/generators/vulcanize/templates/cassandra/config/rubber/rubber-cassandra.yml +18 -0
  146. data/lib/generators/vulcanize/templates/cassandra/templates.yml +1 -0
  147. data/lib/generators/vulcanize/templates/complete_mongrel_mysql/config/rubber/role/haproxy/haproxy-mongrel.conf +23 -0
  148. data/lib/generators/vulcanize/templates/complete_mongrel_mysql/config/rubber/role/nginx/nginx-mongrel.conf +113 -0
  149. data/lib/generators/vulcanize/templates/complete_mongrel_mysql/config/rubber/rubber-complete.yml +41 -0
  150. data/lib/generators/vulcanize/templates/complete_mongrel_mysql/templates.yml +6 -0
  151. data/lib/generators/vulcanize/templates/complete_passenger/config/rubber/role/haproxy/haproxy-passenger.conf +21 -0
  152. data/lib/generators/vulcanize/templates/complete_passenger/config/rubber/rubber-complete.yml +40 -0
  153. data/lib/generators/vulcanize/templates/complete_passenger/templates.rb +9 -0
  154. data/lib/generators/vulcanize/templates/complete_passenger/templates.yml +9 -0
  155. data/lib/generators/vulcanize/templates/complete_passenger_mysql/templates.yml +4 -0
  156. data/lib/generators/vulcanize/templates/complete_passenger_postgresql/templates.yml +4 -0
  157. data/lib/generators/vulcanize/templates/cruise/config/rubber/deploy-cruise.rb +72 -0
  158. data/lib/generators/vulcanize/templates/cruise/config/rubber/role/cruise/cruise +40 -0
  159. data/lib/generators/vulcanize/templates/cruise/config/rubber/role/cruise/my.cnf +165 -0
  160. data/lib/generators/vulcanize/templates/cruise/config/rubber/role/cruise/production.rb +8 -0
  161. data/lib/generators/vulcanize/templates/cruise/config/rubber/role/cruise/site_config.rb +76 -0
  162. data/lib/generators/vulcanize/templates/cruise/config/rubber/role/web_tools/cruise-nginx.conf +11 -0
  163. data/lib/generators/vulcanize/templates/cruise/config/rubber/rubber-cruise.yml +18 -0
  164. data/lib/generators/vulcanize/templates/cruise/templates.yml +1 -0
  165. data/lib/generators/vulcanize/templates/haproxy/config/rubber/deploy-haproxy.rb +45 -0
  166. data/lib/generators/vulcanize/templates/haproxy/config/rubber/role/haproxy/haproxy-base.conf +26 -0
  167. data/lib/generators/vulcanize/templates/haproxy/config/rubber/role/haproxy/haproxy-default.conf +8 -0
  168. data/lib/generators/vulcanize/templates/haproxy/config/rubber/role/haproxy/monit-haproxy.conf +9 -0
  169. data/lib/generators/vulcanize/templates/haproxy/config/rubber/role/haproxy/syslog-haproxy.conf +11 -0
  170. data/lib/generators/vulcanize/templates/haproxy/config/rubber/role/haproxy/syslogd-default.conf +21 -0
  171. data/lib/generators/vulcanize/templates/haproxy/config/rubber/role/web_tools/haproxy-nginx.conf +10 -0
  172. data/lib/generators/vulcanize/templates/haproxy/config/rubber/rubber-haproxy.yml +7 -0
  173. data/lib/generators/vulcanize/templates/haproxy/templates.yml +1 -0
  174. data/lib/generators/vulcanize/templates/jetty/config/rubber/deploy-jetty.rb +59 -0
  175. data/lib/generators/vulcanize/templates/jetty/config/rubber/role/jetty/jetty.sh +589 -0
  176. data/lib/generators/vulcanize/templates/jetty/config/rubber/role/jetty/jetty.xml +199 -0
  177. data/lib/generators/vulcanize/templates/jetty/config/rubber/role/jetty/monit-jetty.conf +9 -0
  178. data/lib/generators/vulcanize/templates/jetty/config/rubber/rubber-jetty.yml +10 -0
  179. data/lib/generators/vulcanize/templates/jetty/templates.yml +1 -0
  180. data/lib/generators/vulcanize/templates/memcached/config/memcached.yml +28 -0
  181. data/lib/generators/vulcanize/templates/memcached/config/rubber/common/memcached.yml +14 -0
  182. data/lib/generators/vulcanize/templates/memcached/config/rubber/role/memcached/memcached.conf +52 -0
  183. data/lib/generators/vulcanize/templates/memcached/config/rubber/role/memcached/memcached_munin_plugin +249 -0
  184. data/lib/generators/vulcanize/templates/memcached/config/rubber/rubber-memcached.yml +7 -0
  185. data/lib/generators/vulcanize/templates/memcached/templates.yml +1 -0
  186. data/lib/generators/vulcanize/templates/minimal_mysql/templates.yml +7 -0
  187. data/lib/generators/vulcanize/templates/minimal_nodb/templates.yml +6 -0
  188. data/lib/generators/vulcanize/templates/mongrel/config/rubber/deploy-mongrel.rb +75 -0
  189. data/lib/generators/vulcanize/templates/mongrel/config/rubber/role/mongrel/mongrel_cluster.yml +12 -0
  190. data/lib/generators/vulcanize/templates/mongrel/config/rubber/role/mongrel/monit-mongrel.conf +20 -0
  191. data/lib/generators/vulcanize/templates/mongrel/config/rubber/rubber-mongrel.yml +9 -0
  192. data/lib/generators/vulcanize/templates/mongrel/templates.yml +1 -0
  193. data/lib/generators/vulcanize/templates/monit/config/rubber/common/monit-default.conf +15 -0
  194. data/lib/generators/vulcanize/templates/monit/config/rubber/common/monit.conf +252 -0
  195. data/lib/generators/vulcanize/templates/monit/config/rubber/deploy-monit.rb +33 -0
  196. data/lib/generators/vulcanize/templates/monit/config/rubber/role/web_tools/monit-admin-nginx.conf +10 -0
  197. data/lib/generators/vulcanize/templates/monit/config/rubber/rubber-monit.yml +6 -0
  198. data/lib/generators/vulcanize/templates/monit/templates.yml +1 -0
  199. data/lib/generators/vulcanize/templates/munin/config/rubber/common/monit-munin.conf +8 -0
  200. data/lib/generators/vulcanize/templates/munin/config/rubber/common/munin-node.conf +48 -0
  201. data/lib/generators/vulcanize/templates/munin/config/rubber/common/munin-plugins.conf +11 -0
  202. data/lib/generators/vulcanize/templates/munin/config/rubber/deploy-munin.rb +46 -0
  203. data/lib/generators/vulcanize/templates/munin/config/rubber/role/web_tools/munin-nginx.conf +8 -0
  204. data/lib/generators/vulcanize/templates/munin/config/rubber/role/web_tools/munin-plugins.conf +31 -0
  205. data/lib/generators/vulcanize/templates/munin/config/rubber/role/web_tools/munin.conf +81 -0
  206. data/lib/generators/vulcanize/templates/munin/config/rubber/rubber-munin.yml +8 -0
  207. data/lib/generators/vulcanize/templates/munin/script/munin/example_mysql_query.rb +55 -0
  208. data/lib/generators/vulcanize/templates/munin/script/munin/example_simple.rb +24 -0
  209. data/lib/generators/vulcanize/templates/munin/templates.yml +1 -0
  210. data/lib/generators/vulcanize/templates/mysql/config/rubber/common/database.yml +12 -0
  211. data/lib/generators/vulcanize/templates/mysql/config/rubber/deploy-mysql.rb +169 -0
  212. data/lib/generators/vulcanize/templates/mysql/config/rubber/role/db/apparmor-mysql.conf +46 -0
  213. data/lib/generators/vulcanize/templates/mysql/config/rubber/role/db/crontab +14 -0
  214. data/lib/generators/vulcanize/templates/mysql/config/rubber/role/db/monit-mysql.cnf +10 -0
  215. data/lib/generators/vulcanize/templates/mysql/config/rubber/role/db/my.cnf +163 -0
  216. data/lib/generators/vulcanize/templates/mysql/config/rubber/role/mysql_slave/mysql_slave_munin_plugin +51 -0
  217. data/lib/generators/vulcanize/templates/mysql/config/rubber/rubber-mysql.yml +47 -0
  218. data/lib/generators/vulcanize/templates/mysql/templates.yml +1 -0
  219. data/lib/generators/vulcanize/templates/mysql_cluster/config/rubber/common/mysql_cluster_migrations.rb +13 -0
  220. data/lib/generators/vulcanize/templates/mysql_cluster/config/rubber/deploy-mysql_cluster.rb +177 -0
  221. data/lib/generators/vulcanize/templates/mysql_cluster/config/rubber/role/mysql_data/my.cnf +15 -0
  222. data/lib/generators/vulcanize/templates/mysql_cluster/config/rubber/role/mysql_mgm/ndb_mgmd.cnf +39 -0
  223. data/lib/generators/vulcanize/templates/mysql_cluster/config/rubber/role/mysql_sql/monit-mysql_cluster_sql.cnf +10 -0
  224. data/lib/generators/vulcanize/templates/mysql_cluster/config/rubber/role/mysql_sql/my.cnf +23 -0
  225. data/lib/generators/vulcanize/templates/mysql_cluster/config/rubber/rubber-mysql_cluster.yml +32 -0
  226. data/lib/generators/vulcanize/templates/mysql_cluster/templates.yml +1 -0
  227. data/lib/generators/vulcanize/templates/mysql_proxy/config/rubber/common/database.yml +16 -0
  228. data/lib/generators/vulcanize/templates/mysql_proxy/config/rubber/common/monit-mysql_proxy.cnf +10 -0
  229. data/lib/generators/vulcanize/templates/mysql_proxy/config/rubber/common/mysql-proxy +153 -0
  230. data/lib/generators/vulcanize/templates/mysql_proxy/config/rubber/common/mysql-proxy.conf +10 -0
  231. data/lib/generators/vulcanize/templates/mysql_proxy/config/rubber/common/mysql-proxy.lua +5 -0
  232. data/lib/generators/vulcanize/templates/mysql_proxy/config/rubber/deploy-mysql_proxy.rb +52 -0
  233. data/lib/generators/vulcanize/templates/mysql_proxy/config/rubber/rubber-mysql_proxy.yml +11 -0
  234. data/lib/generators/vulcanize/templates/mysql_proxy/templates.yml +1 -0
  235. data/lib/generators/vulcanize/templates/nginx/config/rubber/deploy-nginx.rb +45 -0
  236. data/lib/generators/vulcanize/templates/nginx/config/rubber/role/nginx/crontab +9 -0
  237. data/lib/generators/vulcanize/templates/nginx/config/rubber/role/nginx/monit-nginx.conf +8 -0
  238. data/lib/generators/vulcanize/templates/nginx/config/rubber/role/nginx/nginx.conf +42 -0
  239. data/lib/generators/vulcanize/templates/nginx/config/rubber/role/web_tools/nginx-tools.conf +55 -0
  240. data/lib/generators/vulcanize/templates/nginx/config/rubber/role/web_tools/tools-index.html +30 -0
  241. data/lib/generators/vulcanize/templates/nginx/config/rubber/role/web_tools/tools-nginx.auth +7 -0
  242. data/lib/generators/vulcanize/templates/nginx/config/rubber/rubber-nginx.yml +10 -0
  243. data/lib/generators/vulcanize/templates/nginx/templates.yml +1 -0
  244. data/lib/generators/vulcanize/templates/passenger/config/rubber/deploy-passenger.rb +46 -0
  245. data/lib/generators/vulcanize/templates/passenger/config/rubber/role/passenger/munin-passenger-memory.conf +34 -0
  246. data/lib/generators/vulcanize/templates/passenger/config/rubber/role/passenger/munin-passenger-sudoers.conf +7 -0
  247. data/lib/generators/vulcanize/templates/passenger/config/rubber/role/passenger/munin-passenger.conf +47 -0
  248. data/lib/generators/vulcanize/templates/passenger/config/rubber/role/passenger/passenger-apache-vhost.conf +46 -0
  249. data/lib/generators/vulcanize/templates/passenger/config/rubber/role/passenger/passenger.conf +35 -0
  250. data/lib/generators/vulcanize/templates/passenger/config/rubber/rubber-passenger.yml +15 -0
  251. data/lib/generators/vulcanize/templates/passenger/templates.yml +3 -0
  252. data/lib/generators/vulcanize/templates/postgresql/config/rubber/common/database.yml +12 -0
  253. data/lib/generators/vulcanize/templates/postgresql/config/rubber/deploy-postgresql.rb +131 -0
  254. data/lib/generators/vulcanize/templates/postgresql/config/rubber/role/db/crontab +14 -0
  255. data/lib/generators/vulcanize/templates/postgresql/config/rubber/role/db/monit-postgresql.conf +10 -0
  256. data/lib/generators/vulcanize/templates/postgresql/config/rubber/role/db/pg_hba.conf +89 -0
  257. data/lib/generators/vulcanize/templates/postgresql/config/rubber/role/db/postgresql-sysctl.conf +6 -0
  258. data/lib/generators/vulcanize/templates/postgresql/config/rubber/role/db/postgresql.conf +504 -0
  259. data/lib/generators/vulcanize/templates/postgresql/config/rubber/rubber-postgresql.yml +45 -0
  260. data/lib/generators/vulcanize/templates/postgresql/templates.yml +1 -0
  261. data/lib/generators/vulcanize/templates/redis/config/rubber/deploy-redis.rb +37 -0
  262. data/lib/generators/vulcanize/templates/redis/config/rubber/role/redis/crontab +8 -0
  263. data/lib/generators/vulcanize/templates/redis/config/rubber/role/redis/monit-redis.conf +9 -0
  264. data/lib/generators/vulcanize/templates/redis/config/rubber/role/redis/redis.conf +141 -0
  265. data/lib/generators/vulcanize/templates/redis/config/rubber/rubber-redis.yml +4 -0
  266. data/lib/generators/vulcanize/templates/redis/templates.yml +1 -0
  267. data/lib/generators/vulcanize/templates/resque/config/initializers/resque.rb +15 -0
  268. data/lib/generators/vulcanize/templates/resque/config/rubber/common/resque.yml +5 -0
  269. data/lib/generators/vulcanize/templates/resque/config/rubber/deploy-resque.rb +58 -0
  270. data/lib/generators/vulcanize/templates/resque/config/rubber/role/resque_web/monit-resque_web.conf +14 -0
  271. data/lib/generators/vulcanize/templates/resque/config/rubber/role/resque_worker/monit-resque_worker.conf +19 -0
  272. data/lib/generators/vulcanize/templates/resque/config/rubber/rubber-resque.yml +18 -0
  273. data/lib/generators/vulcanize/templates/resque/script/resque_worker_management.rb +112 -0
  274. data/lib/generators/vulcanize/templates/resque/templates.rb +1 -0
  275. data/lib/generators/vulcanize/templates/resque/templates.yml +3 -0
  276. data/lib/generators/vulcanize/templates/sphinx/config/rubber/common/sphinx.yml +46 -0
  277. data/lib/generators/vulcanize/templates/sphinx/config/rubber/deploy-sphinx.rb +112 -0
  278. data/lib/generators/vulcanize/templates/sphinx/config/rubber/role/sphinx/crontab +11 -0
  279. data/lib/generators/vulcanize/templates/sphinx/config/rubber/role/sphinx/monit-sphinx.conf +13 -0
  280. data/lib/generators/vulcanize/templates/sphinx/config/rubber/rubber-sphinx.yml +6 -0
  281. data/lib/generators/vulcanize/templates/sphinx/templates.yml +1 -0
  282. data/lib/generators/vulcanize/vulcanize_generator.rb +184 -0
  283. data/lib/rubber.rb +43 -7
  284. data/lib/rubber/cloud/aws.rb +38 -4
  285. data/lib/rubber/dns/base.rb +41 -26
  286. data/lib/rubber/dns/dyndns.rb +25 -10
  287. data/lib/rubber/dns/nettica.rb +90 -29
  288. data/lib/rubber/dns/zerigo.rb +90 -96
  289. data/lib/rubber/environment.rb +26 -10
  290. data/lib/rubber/generator.rb +33 -25
  291. data/lib/rubber/instance.rb +12 -1
  292. data/lib/rubber/railtie.rb +14 -0
  293. data/lib/rubber/recipes/rubber.rb +16 -9
  294. data/lib/rubber/recipes/rubber/deploy.rb +3 -3
  295. data/lib/rubber/recipes/rubber/instances.rb +73 -8
  296. data/lib/rubber/recipes/rubber/security_groups.rb +1 -1
  297. data/lib/rubber/recipes/rubber/setup.rb +245 -96
  298. data/lib/rubber/recipes/rubber/spot_requests.rb +23 -0
  299. data/lib/rubber/recipes/rubber/static_ips.rb +83 -0
  300. data/lib/rubber/recipes/rubber/utils.rb +41 -18
  301. data/lib/rubber/recipes/rubber/volumes.rb +4 -4
  302. data/lib/rubber/tasks/rubber.rb +64 -6
  303. data/lib/rubber/util.rb +36 -1
  304. data/rails/init.rb +6 -0
  305. data/test/environment_test.rb +27 -1
  306. data/test/generator_test.rb +52 -5
  307. data/test/instance_test.rb +4 -1
  308. data/test/test_helper.rb +10 -0
  309. data/test/util_test.rb +4 -1
  310. data/test/zerigo_test.rb +88 -0
  311. metadata +309 -49
  312. data/generators/vulcanize/templates/base/config/rubber/common/profile.rc +0 -9
@@ -36,7 +36,7 @@ namespace :rubber do
36
36
  security_groups << host
37
37
  security_groups += roles
38
38
  end
39
- security_groups = security_groups.uniq.compact
39
+ security_groups = security_groups.uniq.compact.reject {|x| x.empty? }
40
40
  security_groups = security_groups.collect {|x| isolate_group_name(x) } if env.isolate_security_groups
41
41
  return security_groups
42
42
  end
@@ -4,8 +4,9 @@ namespace :rubber do
4
4
  Bootstraps instances by setting timezone, installing packages and gems
5
5
  DESC
6
6
  task :bootstrap do
7
- set_timezone
8
7
  link_bash
8
+ set_timezone
9
+ enable_multiverse
9
10
  upgrade_packages
10
11
  install_packages
11
12
  setup_volumes
@@ -14,6 +15,33 @@ namespace :rubber do
14
15
  deploy.setup
15
16
  end
16
17
 
18
+ # Sets up instance to allow root access (e.g. recent canonical AMIs)
19
+ def enable_root_ssh(ip, initial_ssh_user)
20
+ old_user = user
21
+ begin
22
+ set :user, initial_ssh_user
23
+
24
+ task :_allow_root_ssh, :hosts => ip do
25
+ rsudo "cp /home/#{initial_ssh_user}/.ssh/authorized_keys /root/.ssh/"
26
+ end
27
+
28
+ begin
29
+ _allow_root_ssh
30
+ rescue ConnectionError => e
31
+ if e.message =~ /Net::SSH::AuthenticationFailed/
32
+ logger.info "Can't connect as user #{initial_ssh_user} to #{ip}, assuming root allowed"
33
+ else
34
+ sleep 2
35
+ logger.info "Failed to connect to #{ip}, retrying"
36
+ retry
37
+ end
38
+ end
39
+ ensure
40
+ set :user, old_user
41
+ end
42
+
43
+ end
44
+
17
45
  desc <<-DESC
18
46
  Sets up aliases for instance hostnames based on contents of instance.yml.
19
47
  Generates /etc/hosts for local/remote machines and sets hostname on
@@ -61,6 +89,83 @@ namespace :rubber do
61
89
  end
62
90
  end
63
91
 
92
+ desc <<-DESC
93
+ Sets up the additional dns records supplied in the dns_records config in rubber.yml
94
+ DESC
95
+ required_task :setup_dns_records do
96
+ records = rubber_env.dns_records
97
+ if records && rubber_env.dns_provider
98
+ provider = Rubber::Dns::get_provider(rubber_env.dns_provider, rubber_env)
99
+
100
+ # collect the round robin records (those with the same host/domain/type)
101
+ rr_records = []
102
+ records.each_with_index do |record, i|
103
+ m = records.find_all {|r| record['host'] == r['host'] && record['domain'] == r['domain'] && record['type'] == r['type']}
104
+ m = m.sort {|a,b| a.object_id <=> b.object_id}
105
+ rr_records << m if m.size > 1 && ! rr_records.include?(m)
106
+ end
107
+
108
+ # simple records are those that aren't round robin ones
109
+ simple_records = records - rr_records.flatten
110
+
111
+ # for each simple record, create or update as necessary
112
+ simple_records.each do |record|
113
+ matching = provider.find_host_records(:host => record['host'], :domain =>record['domain'], :type => record['type'])
114
+ if matching.size > 1
115
+ msg = "Multiple records in dns provider, but not in rubber.yml\n"
116
+ msg << "Round robin records need to be in both, or neither.\n"
117
+ msg << "Please fix manually:\n"
118
+ msg << matching.pretty_inspect
119
+ fatal(msg)
120
+ end
121
+
122
+ record = provider.setup_opts(record)
123
+ if matching.size == 1
124
+ match = matching.first
125
+ if provider.host_records_equal?(record, match)
126
+ logger.info "Simple dns record already up to date: #{record[:host]}.#{record[:domain]}:#{record[:type]} => #{record[:data]}"
127
+ else
128
+ logger.info "Updating simple dns record: #{record[:host]}.#{record[:domain]}:#{record[:type]} => #{record[:data]}"
129
+ provider.update_host_record(match, record)
130
+ end
131
+ else
132
+ logger.info "Creating simple dns record: #{record[:host]}.#{record[:domain]}:#{record[:type]} => #{record[:data]}"
133
+ provider.create_host_record(record)
134
+ end
135
+ end
136
+
137
+ # group round robin records
138
+ rr_records.each do |rr_group|
139
+ host = rr_group.first['host']
140
+ domain = rr_group.first['domain']
141
+ type = rr_group.first['type']
142
+ matching = provider.find_host_records(:host => host, :domain => domain, :type => type)
143
+
144
+ # remove from consideration the local records that are the same as remote ones
145
+ matching.clone.each do |r|
146
+ rr_group.delete_if {|rg| provider.host_records_equal?(r, rg) }
147
+ matching.delete_if {|rg| provider.host_records_equal?(r, rg) }
148
+ end
149
+ if rr_group.size == 0 && matching.size == 0
150
+ logger.info "Round robin dns records already up to date: #{host}.#{domain}:#{type}"
151
+ end
152
+
153
+ # create the local records that don't exist remotely
154
+ rr_group.each do |r|
155
+ r = provider.setup_opts(r)
156
+ logger.info "Creating round robin dns record: #{r[:host]}.#{r[:domain]}:#{r[:type]} => #{r[:data]}"
157
+ provider.create_host_record(r)
158
+ end
159
+
160
+ # remove the remote records that don't exist locally
161
+ matching.each do |r|
162
+ logger.info "Removing round robin dns record: #{r[:host]}.#{r[:domain]}:#{r[:type]} => #{r[:data]}"
163
+ provider.destroy_host_record(r)
164
+ end
165
+ end
166
+ end
167
+ end
168
+
64
169
  desc <<-DESC
65
170
  Sets up aliases for instance hostnames based on contents of instance.yml.
66
171
  Generates /etc/hosts for remote machines and sets hostname on remote instances
@@ -87,7 +192,9 @@ namespace :rubber do
87
192
  put filtered, hosts_file
88
193
 
89
194
  # Setup hostname on instance so shell, etcs have nice display
90
- sudo "echo $CAPISTRANO:HOST$ > /etc/hostname && hostname $CAPISTRANO:HOST$"
195
+ rsudo "echo $CAPISTRANO:HOST$ > /etc/hostname && hostname $CAPISTRANO:HOST$"
196
+ # Newer ubuntus ec2-init script always resets hostname, so prevent it
197
+ rsudo "mkdir -p /etc/ec2-init && echo compat=0 > /etc/ec2-init/is-compat-env"
91
198
  end
92
199
 
93
200
  # TODO
@@ -141,51 +248,78 @@ namespace :rubber do
141
248
  gem_helper(false)
142
249
  end
143
250
 
251
+ desc <<-DESC
252
+ Install ruby gems defined in Gemfile
253
+ DESC
254
+ after "deploy:update_code", "rubber:install_bundler_gems" if Rubber::Util.is_bundler?
255
+ task :install_bundler_gems do
256
+ rsudo "cd #{current_release} && RAILS_ENV=#{RUBBER_ENV} bundle install --without development test"
257
+ end
258
+
144
259
  desc <<-DESC
145
260
  Install ruby gems defined in the rails environment.rb
146
261
  DESC
147
- after "deploy:symlink", "rubber:install_rails_gems" if Rubber::Util.is_rails?
262
+ after "rubber:config", "rubber:install_rails_gems" if (Rubber::Util::is_rails2? && !Rubber::Util.is_bundler?)
148
263
  task :install_rails_gems do
149
- sudo "sh -c 'cd #{current_path} && RAILS_ENV=#{RUBBER_ENV} rake gems:install'"
264
+ rsudo "cd #{current_release} && RAILS_ENV=#{RUBBER_ENV} rake gems:install"
150
265
  end
151
266
 
152
267
  desc <<-DESC
153
- Setup ruby gems sources. Set 'gemsources' in rubber.yml to \
154
- be an array of URI strings.
268
+ Convenience task for installing your defined set of ruby gems locally.
155
269
  DESC
156
- task :setup_gem_sources do
157
- if rubber_env.gemsources
158
- script = prepare_script 'gem_sources_helper', <<-'ENDSCRIPT'
159
- ruby - $@ <<-'EOF'
160
-
161
- sources = ARGV
270
+ required_task :install_local_gems do
271
+ fatal("install_local_gems can only be run in development") if RUBBER_ENV != 'development'
272
+ env = rubber_cfg.environment.bind(rubber_cfg.environment.known_roles)
273
+ gems = env['gems']
274
+ expanded_gem_list = []
275
+ gems.each do |gem_spec|
276
+ if gem_spec.is_a?(Array)
277
+ expanded_gem_list << "#{gem_spec[0]}:#{gem_spec[1]}"
278
+ else
279
+ expanded_gem_list << gem_spec
280
+ end
281
+ end
282
+ expanded_gem_list = expanded_gem_list.join(' ')
162
283
 
163
- installed = []
164
- `gem sources -l`.grep(/^[^*]/) do |line|
165
- line = line.strip
166
- installed << line if line.size > 0
167
- end
284
+ logger.info "Installing gems:#{expanded_gem_list}"
285
+ open("/tmp/gem_helper", "w") {|f| f.write(gem_helper_script)}
286
+ system "ruby /tmp/gem_helper install #{expanded_gem_list}"
287
+ end
168
288
 
169
- to_install = sources - installed
170
- to_remove = installed - sources
289
+ set :gem_sources_helper_script, <<-'ENDSCRIPT'
290
+ sources = ARGV
171
291
 
172
- if to_install.size > 0
173
- to_install.each do |source|
174
- system "gem sources -a #{source}"
175
- fail "Unable to add gem sources" if $?.exitstatus > 0
176
- end
177
- end
178
- if to_remove.size > 0
179
- to_remove.each do |source|
180
- system "gem sources -r #{source}"
181
- fail "Unable to remove gem sources" if $?.exitstatus > 0
182
- end
183
- end
292
+ installed = []
293
+ `gem sources -l`.each_line do |line|
294
+ line = line.strip
295
+ installed << line if line.size > 0 && line =~ /^[^*]/
296
+ end
184
297
 
185
- 'EOF'
186
- ENDSCRIPT
298
+ to_install = sources - installed
299
+ to_remove = installed - sources
187
300
 
188
- sudo "sh #{script} #{rubber_env.gemsources.join(' ')}"
301
+ if to_install.size > 0
302
+ to_install.each do |source|
303
+ system "gem sources -a #{source}"
304
+ fail "Unable to add gem sources" if $?.exitstatus > 0
305
+ end
306
+ end
307
+ if to_remove.size > 0
308
+ to_remove.each do |source|
309
+ system "gem sources -r #{source}"
310
+ fail "Unable to remove gem sources" if $?.exitstatus > 0
311
+ end
312
+ end
313
+ ENDSCRIPT
314
+
315
+ desc <<-DESC
316
+ Setup ruby gems sources. Set 'gemsources' in rubber.yml to \
317
+ be an array of URI strings.
318
+ DESC
319
+ task :setup_gem_sources do
320
+ if rubber_env.gemsources
321
+ script = prepare_script 'gem_sources_helper', gem_sources_helper_script, nil
322
+ rsudo "ruby #{script} #{rubber_env.gemsources.join(' ')}"
189
323
  end
190
324
  end
191
325
 
@@ -194,7 +328,7 @@ namespace :rubber do
194
328
  You can override this task if you don't want this to happen
195
329
  DESC
196
330
  task :link_bash do
197
- sudo("ln -sf /bin/bash /bin/sh")
331
+ rsudo "ln -sf /bin/bash /bin/sh"
198
332
  end
199
333
 
200
334
  desc <<-DESC
@@ -208,10 +342,28 @@ namespace :rubber do
208
342
  DESC
209
343
  task :set_timezone do
210
344
  opts = get_host_options('timezone')
211
- sudo "bash -c 'echo $CAPISTRANO:VAR$ > /etc/timezone'", opts
212
- sudo "cp /usr/share/zoneinfo/$CAPISTRANO:VAR$ /etc/localtime", opts
345
+ rsudo "echo $CAPISTRANO:VAR$ > /etc/timezone", opts
346
+ rsudo "cp /usr/share/zoneinfo/$CAPISTRANO:VAR$ /etc/localtime", opts
213
347
  # restart syslog so that times match timezone
214
- sudo "/etc/init.d/sysklogd restart"
348
+ sudo_script 'restart_syslog', <<-ENDSCRIPT
349
+ if [[ -x /etc/init.d/sysklogd ]]; then
350
+ /etc/init.d/sysklogd restart
351
+ elif [[ -x /etc/init.d/rsyslog ]]; then
352
+ service rsyslog restart
353
+ fi
354
+ ENDSCRIPT
355
+ end
356
+
357
+ desc <<-DESC
358
+ Enable the ubuntu multiverse source for getting packages like
359
+ ec2-ami-tools used for bundling images
360
+ DESC
361
+ task :enable_multiverse do
362
+ sudo_script 'enable_multiverse', <<-ENDSCRIPT
363
+ if ! grep -qc multiverse /etc/apt/sources.list /etc/apt/sources.list.d/* &> /dev/null; then
364
+ cat /etc/apt/sources.list | sed 's/main universe/multiverse/' > /etc/apt/sources.list.d/rubber-multiverse-source.list
365
+ fi
366
+ ENDSCRIPT
215
367
  end
216
368
 
217
369
  def update_dyndns(instance_item)
@@ -243,16 +395,16 @@ namespace :rubber do
243
395
  expanded_pkg_list.join(' ')
244
396
  end
245
397
 
246
- sudo "apt-get -q update"
398
+ rsudo "apt-get -q update"
247
399
  if upgrade
248
- sudo "/bin/sh -c 'export DEBIAN_FRONTEND=noninteractive; apt-get -q -y --force-yes dist-upgrade'"
400
+ rsudo "export DEBIAN_FRONTEND=noninteractive; apt-get -q -y --force-yes dist-upgrade"
249
401
  else
250
- sudo "/bin/sh -c 'export DEBIAN_FRONTEND=noninteractive; apt-get -q -y --force-yes install $CAPISTRANO:VAR$'", opts
402
+ rsudo "export DEBIAN_FRONTEND=noninteractive; apt-get -q -y --force-yes install $CAPISTRANO:VAR$", opts
251
403
  end
252
404
  end
253
405
 
254
406
  def custom_package(url_base, name, ver, install_test)
255
- rubber.run_script "install_#{name}", <<-ENDSCRIPT
407
+ rubber.sudo_script "install_#{name}", <<-ENDSCRIPT
256
408
  if [[ #{install_test} ]]; then
257
409
  arch=`uname -m`
258
410
  if [ "$arch" = "x86_64" ]; then
@@ -261,7 +413,7 @@ namespace :rubber do
261
413
  src="#{url_base}/#{name}_#{ver}_i386.deb"
262
414
  fi
263
415
  src_file="${src##*/}"
264
- wget -qP /tmp ${src}
416
+ wget -qNP /tmp ${src}
265
417
  dpkg -i /tmp/${src_file}
266
418
  fi
267
419
  ENDSCRIPT
@@ -280,11 +432,57 @@ namespace :rubber do
280
432
  end
281
433
  end
282
434
 
435
+ # Rubygems always installs even if the gem is already installed
436
+ # When providing versions, rubygems fails unless versions are provided for all gems
437
+ # This helper script works around these issues by installing gems only if they
438
+ # aren't already installed, and separates versioned/unversioned into two separate
439
+ # calls to rubygems
440
+ #
441
+ set :gem_helper_script, <<-'ENDSCRIPT'
442
+ gem_cmd = ARGV[0]
443
+ gems = ARGV[1..-1]
444
+ cmd = "gem #{gem_cmd} --no-rdoc --no-ri"
445
+
446
+ to_install = {}
447
+ to_install_ver = {}
448
+ # gem list passed in, possibly with versions, as "gem1 gem2:1.2 gem3"
449
+ gems.each do |gem_spec|
450
+ parts = gem_spec.split(':')
451
+ if parts[1]
452
+ to_install_ver[parts[0]] = parts[1]
453
+ else
454
+ to_install[parts[0]] = true
455
+ end
456
+ end
457
+
458
+ installed = {}
459
+ `gem list --local`.each_line do |line|
460
+ parts = line.scan(/(.*) \((.*)\)/).first
461
+ next unless parts && parts.size == 2
462
+ installed[parts[0]] = parts[1].split(",")
463
+ end
464
+
465
+ to_install.delete_if {|g, v| installed.has_key?(g) } if gem_cmd == 'install'
466
+ to_install_ver.delete_if {|g, v| installed.has_key?(g) && installed[g].include?(v) }
467
+
468
+ # rubygems can only do asingle versioned gem at a time so we need
469
+ # to do the two groups separately
470
+ # install versioned ones first so unversioned don't pull in a newer version
471
+ to_install_ver.each do |g, v|
472
+ system "#{cmd} #{g} -v #{v}"
473
+ fail "Unable to install versioned gem #{g}:#{v}" if $?.exitstatus > 0
474
+ end
475
+ if to_install.size > 0
476
+ gem_list = to_install.keys.join(' ')
477
+ system "#{cmd} #{gem_list}"
478
+ fail "Unable to install gems" if $?.exitstatus > 0
479
+ end
480
+ ENDSCRIPT
481
+
283
482
  # Helper for installing gems,allows one to respond to prompts
284
483
  def gem_helper(update=false)
285
484
  cmd = update ? "update" : "install"
286
485
 
287
-
288
486
  opts = get_host_options('gems') do |gem_list|
289
487
  expanded_gem_list = []
290
488
  gem_list.each do |gem_spec|
@@ -298,60 +496,11 @@ namespace :rubber do
298
496
  end
299
497
 
300
498
  if opts.size > 0
301
- # Rubygems always installs even if the gem is already installed
302
- # When providing versions, rubygems fails unless versions are provided for all gems
303
- # This helper script works around these issues by installing gems only if they
304
- # aren't already installed, and separates versioned/unversioned into two separate
305
- # calls to rubygems
306
- script = prepare_script 'gem_helper', <<-'ENDSCRIPT'
307
- ruby - $@ <<-'EOF'
308
-
309
- gem_cmd = ARGV[0]
310
- gems = ARGV[1..-1]
311
- cmd = "gem #{gem_cmd} --no-rdoc --no-ri"
312
-
313
- to_install = {}
314
- to_install_ver = {}
315
- # gem list passed in, possibly with versions, as "gem1 gem2:1.2 gem3"
316
- gems.each do |gem_spec|
317
- parts = gem_spec.split(':')
318
- if parts[1]
319
- to_install_ver[parts[0]] = parts[1]
320
- else
321
- to_install[parts[0]] = true
322
- end
323
- end
324
-
325
- installed = {}
326
- `gem list --local`.each do |line|
327
- parts = line.scan(/(.*) \((.*)\)/).first
328
- next unless parts && parts.size == 2
329
- installed[parts[0]] = parts[1].split(",")
330
- end
331
-
332
- to_install.delete_if {|g, v| installed.has_key?(g) } if gem_cmd == 'install'
333
- to_install_ver.delete_if {|g, v| installed.has_key?(g) && installed[g].include?(v) }
334
-
335
- # rubygems can only do asingle versioned gem at a time so we need
336
- # to do the two groups separately
337
- # install versioned ones first so unversioned don't pull in a newer version
338
- to_install_ver.each do |g, v|
339
- system "#{cmd} #{g} -v #{v}"
340
- fail "Unable to install versioned gem #{g}:#{v}" if $?.exitstatus > 0
341
- end
342
- if to_install.size > 0
343
- gem_list = to_install.keys.join(' ')
344
- system "#{cmd} #{gem_list}"
345
- fail "Unable to install gems" if $?.exitstatus > 0
346
- end
347
-
348
- 'EOF'
349
- ENDSCRIPT
350
-
351
- sudo "sh #{script} #{cmd} $CAPISTRANO:VAR$", opts do |ch, str, data|
499
+ script = prepare_script('gem_helper', gem_helper_script, nil)
500
+ rsudo "ruby #{script} #{cmd} $CAPISTRANO:VAR$", opts do |ch, str, data|
352
501
  handle_gem_prompt(ch, data, str)
353
502
  end
354
503
  end
355
504
  end
356
505
 
357
- end
506
+ end
@@ -0,0 +1,23 @@
1
+ namespace :rubber do
2
+
3
+ desc "Describes all your spot instance requests"
4
+ required_task :describe_spot_instance_requests do
5
+ requests = cloud.describe_spot_instance_requests()
6
+ requests.each do |request|
7
+ logger.info "======================"
8
+ logger.info "ID: #{request[:id]}"
9
+ logger.info "Created at: #{request[:created_at]}"
10
+ logger.info "Max. price: $#{request[:spot_price]}"
11
+ logger.info "State: #{request[:state]}"
12
+ logger.info "Instance type: #{request[:type]}"
13
+ logger.info "AMI: #{request[:image_id]}"
14
+ end
15
+ end
16
+
17
+ desc "Cancel the spot instances request for the given id"
18
+ required_task :cancel_spot_instances_request do
19
+ request_id = get_env('SPOT_INSTANCE_REQUEST_ID', 'The id of the spot instances request to cancel', true)
20
+ cloud.destroy_spot_instance_request(request_id)
21
+ end
22
+
23
+ end