poolparty 0.2.18 → 0.2.69

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 (335) hide show
  1. data/Manifest.txt +142 -47
  2. data/PostInstall.txt +5 -5
  3. data/README.txt +25 -4
  4. data/Rakefile +46 -2
  5. data/bin/cloud +12 -21
  6. data/bin/cloud-add-keypair +18 -13
  7. data/bin/cloud-configure +11 -18
  8. data/bin/cloud-contract +7 -17
  9. data/bin/cloud-ensure-provisioning +39 -0
  10. data/bin/cloud-expand +9 -17
  11. data/bin/cloud-handle-load +27 -0
  12. data/bin/cloud-list +3 -9
  13. data/bin/cloud-maintain +12 -18
  14. data/bin/cloud-osxcopy +3 -9
  15. data/bin/cloud-provision +20 -21
  16. data/bin/cloud-refresh +4 -13
  17. data/bin/cloud-run +3 -4
  18. data/bin/cloud-ssh +3 -2
  19. data/bin/cloud-start +18 -21
  20. data/bin/cloud-stats +17 -0
  21. data/bin/cloud-terminate +4 -7
  22. data/bin/messenger-get-current-nodes +14 -0
  23. data/bin/pool +12 -12
  24. data/bin/pool-describe +0 -1
  25. data/bin/{pool-spec → pool-generate} +1 -0
  26. data/bin/pool-init +28 -0
  27. data/bin/pool-list +14 -12
  28. data/bin/pool-start +11 -17
  29. data/bin/server-build-messenger +13 -6
  30. data/bin/server-fire-cmd +1 -1
  31. data/bin/server-get-load +5 -16
  32. data/bin/server-list-active +3 -10
  33. data/bin/server-rerun +4 -4
  34. data/bin/server-send-command +18 -0
  35. data/bin/server-show-stats +17 -0
  36. data/bin/server-start-client +29 -0
  37. data/bin/server-start-master +13 -14
  38. data/bin/server-start-node +14 -15
  39. data/bin/server-stop-client +3 -0
  40. data/bin/server-stop-master +3 -0
  41. data/bin/server-stop-node +3 -0
  42. data/bin/server-update-hosts +48 -0
  43. data/config/hoe.rb +4 -3
  44. data/examples/plugin_without_plugin_directory.rb +1 -2
  45. data/generators/poolspec/USAGE +2 -2
  46. data/generators/poolspec/poolspec_generator.rb +2 -1
  47. data/generators/poolspec/templates/pool_spec_template.erb +3 -2
  48. data/lib/erlang/messenger/Rakefile +12 -0
  49. data/lib/erlang/messenger/ebin/client.app +19 -0
  50. data/lib/erlang/messenger/ebin/master.app +1 -1
  51. data/lib/erlang/messenger/ebin/node.app +1 -1
  52. data/lib/erlang/messenger/ebin/pm_client_rel-0.1.rel +1 -0
  53. data/lib/erlang/messenger/ebin/pm_master_rel-0.1.rel +1 -1
  54. data/lib/erlang/messenger/ebin/pm_node_rel-0.1.rel +1 -1
  55. data/lib/erlang/messenger/include/defines.hrl +27 -0
  56. data/lib/erlang/messenger/lib/eunit/.svn/all-wcprops +53 -0
  57. data/lib/erlang/messenger/lib/eunit/.svn/entries +140 -0
  58. data/lib/erlang/messenger/lib/eunit/.svn/format +1 -0
  59. data/lib/erlang/messenger/lib/eunit/.svn/prop-base/NOTES.svn-base +5 -0
  60. data/lib/erlang/messenger/lib/eunit/.svn/text-base/AUTHORS.svn-base +2 -0
  61. data/lib/erlang/messenger/lib/eunit/.svn/text-base/CHANGELOG.svn-base +14 -0
  62. data/lib/erlang/messenger/lib/eunit/.svn/text-base/COPYING.svn-base +504 -0
  63. data/lib/erlang/messenger/lib/eunit/.svn/text-base/NOTES.svn-base +276 -0
  64. data/lib/erlang/messenger/lib/eunit/.svn/text-base/README.svn-base +3 -0
  65. data/lib/erlang/messenger/lib/eunit/.svn/text-base/sys.config.svn-base +9 -0
  66. data/lib/erlang/messenger/lib/eunit/.svn/text-base/vsn.mk.svn-base +1 -0
  67. data/lib/erlang/messenger/lib/eunit/doc/.svn/all-wcprops +59 -0
  68. data/lib/erlang/messenger/lib/eunit/doc/.svn/entries +142 -0
  69. data/lib/erlang/messenger/lib/eunit/doc/.svn/format +1 -0
  70. data/lib/erlang/messenger/lib/eunit/doc/.svn/prop-base/erlang.png.svn-base +5 -0
  71. data/lib/erlang/messenger/lib/eunit/doc/.svn/prop-base/eunit.html.svn-base +5 -0
  72. data/lib/erlang/messenger/lib/eunit/doc/.svn/prop-base/index.html.svn-base +5 -0
  73. data/lib/erlang/messenger/lib/eunit/doc/.svn/prop-base/modules-frame.html.svn-base +5 -0
  74. data/lib/erlang/messenger/lib/eunit/doc/.svn/prop-base/overview-summary.html.svn-base +5 -0
  75. data/lib/erlang/messenger/lib/eunit/doc/.svn/prop-base/packages-frame.html.svn-base +5 -0
  76. data/lib/erlang/messenger/lib/eunit/doc/.svn/text-base/edoc-info.svn-base +3 -0
  77. data/lib/erlang/messenger/lib/eunit/doc/.svn/text-base/erlang.png.svn-base +0 -0
  78. data/lib/erlang/messenger/lib/eunit/doc/.svn/text-base/eunit.html.svn-base +172 -0
  79. data/lib/erlang/messenger/lib/eunit/doc/.svn/text-base/index.html.svn-base +17 -0
  80. data/lib/erlang/messenger/lib/eunit/doc/.svn/text-base/modules-frame.html.svn-base +12 -0
  81. data/lib/erlang/messenger/lib/eunit/doc/.svn/text-base/overview-summary.html.svn-base +984 -0
  82. data/lib/erlang/messenger/lib/eunit/doc/.svn/text-base/overview.edoc.svn-base +980 -0
  83. data/lib/erlang/messenger/lib/eunit/doc/.svn/text-base/packages-frame.html.svn-base +11 -0
  84. data/lib/erlang/messenger/lib/eunit/doc/.svn/text-base/stylesheet.css.svn-base +55 -0
  85. data/lib/erlang/messenger/lib/eunit/ebin/.svn/all-wcprops +5 -0
  86. data/lib/erlang/messenger/lib/eunit/ebin/.svn/dir-prop-base +8 -0
  87. data/lib/erlang/messenger/lib/eunit/ebin/.svn/entries +28 -0
  88. data/lib/erlang/messenger/lib/eunit/ebin/.svn/format +1 -0
  89. data/lib/erlang/messenger/lib/eunit/examples/.svn/all-wcprops +23 -0
  90. data/lib/erlang/messenger/lib/eunit/examples/.svn/entries +66 -0
  91. data/lib/erlang/messenger/lib/eunit/examples/.svn/format +1 -0
  92. data/lib/erlang/messenger/lib/eunit/examples/.svn/prop-base/eunit_examples.erl.svn-base +5 -0
  93. data/lib/erlang/messenger/lib/eunit/examples/.svn/prop-base/fib.erl.svn-base +5 -0
  94. data/lib/erlang/messenger/lib/eunit/examples/.svn/text-base/eunit_examples.erl.svn-base +339 -0
  95. data/lib/erlang/messenger/lib/eunit/examples/.svn/text-base/fib.erl.svn-base +19 -0
  96. data/lib/erlang/messenger/lib/eunit/examples/.svn/text-base/tests.txt.svn-base +1 -0
  97. data/lib/erlang/messenger/lib/eunit/include/.svn/all-wcprops +11 -0
  98. data/lib/erlang/messenger/lib/eunit/include/.svn/entries +41 -0
  99. data/lib/erlang/messenger/lib/eunit/include/.svn/format +1 -0
  100. data/lib/erlang/messenger/lib/eunit/include/.svn/prop-base/eunit.hrl.svn-base +5 -0
  101. data/lib/erlang/messenger/lib/eunit/include/.svn/text-base/eunit.hrl.svn-base +313 -0
  102. data/lib/erlang/messenger/lib/eunit/src/.svn/all-wcprops +113 -0
  103. data/lib/erlang/messenger/lib/eunit/src/.svn/entries +259 -0
  104. data/lib/erlang/messenger/lib/eunit/src/.svn/format +1 -0
  105. data/lib/erlang/messenger/lib/eunit/src/.svn/prop-base/autoload.erl.svn-base +5 -0
  106. data/lib/erlang/messenger/lib/eunit/src/.svn/prop-base/code_monitor.erl.svn-base +5 -0
  107. data/lib/erlang/messenger/lib/eunit/src/.svn/prop-base/eunit.erl.svn-base +5 -0
  108. data/lib/erlang/messenger/lib/eunit/src/.svn/prop-base/eunit_autoexport.erl.svn-base +5 -0
  109. data/lib/erlang/messenger/lib/eunit/src/.svn/prop-base/eunit_data.erl.svn-base +5 -0
  110. data/lib/erlang/messenger/lib/eunit/src/.svn/prop-base/eunit_internal.hrl.svn-base +5 -0
  111. data/lib/erlang/messenger/lib/eunit/src/.svn/prop-base/eunit_lib.erl.svn-base +5 -0
  112. data/lib/erlang/messenger/lib/eunit/src/.svn/prop-base/eunit_proc.erl.svn-base +5 -0
  113. data/lib/erlang/messenger/lib/eunit/src/.svn/prop-base/eunit_serial.erl.svn-base +5 -0
  114. data/lib/erlang/messenger/lib/eunit/src/.svn/prop-base/eunit_server.erl.svn-base +5 -0
  115. data/lib/erlang/messenger/lib/eunit/src/.svn/prop-base/eunit_striptests.erl.svn-base +5 -0
  116. data/lib/erlang/messenger/lib/eunit/src/.svn/prop-base/eunit_test.erl.svn-base +5 -0
  117. data/lib/erlang/messenger/lib/eunit/src/.svn/prop-base/eunit_tests.erl.svn-base +5 -0
  118. data/lib/erlang/messenger/lib/eunit/src/.svn/prop-base/eunit_tty.erl.svn-base +5 -0
  119. data/lib/erlang/messenger/lib/eunit/src/.svn/prop-base/file_monitor.erl.svn-base +5 -0
  120. data/lib/erlang/messenger/lib/eunit/src/.svn/text-base/autoload.erl.svn-base +388 -0
  121. data/lib/erlang/messenger/lib/eunit/src/.svn/text-base/code_monitor.erl.svn-base +243 -0
  122. data/lib/erlang/messenger/lib/eunit/src/.svn/text-base/eunit.app.src.svn-base +21 -0
  123. data/lib/erlang/messenger/lib/eunit/src/.svn/text-base/eunit.appup.src.svn-base +1 -0
  124. data/lib/erlang/messenger/lib/eunit/src/.svn/text-base/eunit.erl.svn-base +196 -0
  125. data/lib/erlang/messenger/lib/eunit/src/.svn/text-base/eunit_autoexport.erl.svn-base +102 -0
  126. data/lib/erlang/messenger/lib/eunit/src/.svn/text-base/eunit_data.erl.svn-base +798 -0
  127. data/lib/erlang/messenger/lib/eunit/src/.svn/text-base/eunit_internal.hrl.svn-base +48 -0
  128. data/lib/erlang/messenger/lib/eunit/src/.svn/text-base/eunit_lib.erl.svn-base +682 -0
  129. data/lib/erlang/messenger/lib/eunit/src/.svn/text-base/eunit_proc.erl.svn-base +552 -0
  130. data/lib/erlang/messenger/lib/eunit/src/.svn/text-base/eunit_serial.erl.svn-base +157 -0
  131. data/lib/erlang/messenger/lib/eunit/src/.svn/text-base/eunit_server.erl.svn-base +340 -0
  132. data/lib/erlang/messenger/lib/eunit/src/.svn/text-base/eunit_striptests.erl.svn-base +64 -0
  133. data/lib/erlang/messenger/lib/eunit/src/.svn/text-base/eunit_test.erl.svn-base +334 -0
  134. data/lib/erlang/messenger/lib/eunit/src/.svn/text-base/eunit_tests.erl.svn-base +45 -0
  135. data/lib/erlang/messenger/lib/eunit/src/.svn/text-base/eunit_tty.erl.svn-base +272 -0
  136. data/lib/erlang/messenger/lib/eunit/src/.svn/text-base/file_monitor.erl.svn-base +409 -0
  137. data/lib/erlang/messenger/pm_client_rel-0.1.boot +0 -0
  138. data/lib/erlang/messenger/pm_client_rel-0.1.script +238 -0
  139. data/lib/erlang/messenger/pm_master_rel-0.1.boot +0 -0
  140. data/lib/erlang/messenger/pm_master_rel-0.1.script +82 -85
  141. data/lib/erlang/messenger/pm_node_rel-0.1.boot +0 -0
  142. data/lib/erlang/messenger/pm_node_rel-0.1.script +80 -85
  143. data/lib/erlang/messenger/src/client_app.erl +39 -0
  144. data/lib/erlang/messenger/src/client_server.erl +60 -0
  145. data/lib/erlang/messenger/src/pm_client.erl +48 -18
  146. data/lib/erlang/messenger/src/pm_client_old.erl +52 -0
  147. data/lib/erlang/messenger/src/pm_client_supervisor.erl +38 -0
  148. data/lib/erlang/messenger/src/pm_cluster.erl +20 -16
  149. data/lib/erlang/messenger/src/pm_event_manager.erl +27 -0
  150. data/lib/erlang/messenger/src/pm_master.erl +126 -34
  151. data/lib/erlang/messenger/src/pm_master_event_handler.erl +72 -0
  152. data/lib/erlang/messenger/src/pm_master_supervisor.erl +9 -10
  153. data/lib/erlang/messenger/src/pm_node.erl +107 -30
  154. data/lib/erlang/messenger/src/pm_node_supervisor.erl +13 -15
  155. data/lib/erlang/messenger/src/pm_packager.erl +5 -2
  156. data/lib/erlang/messenger/src/pm_strings.erl +11 -0
  157. data/lib/erlang/messenger/src/utils.erl +43 -8
  158. data/lib/erlang/messenger/useful_snippets +17 -0
  159. data/lib/poolparty/aska/aska.rb +150 -0
  160. data/lib/poolparty/base_packages/haproxy.rb +19 -26
  161. data/lib/poolparty/base_packages/heartbeat.rb +48 -47
  162. data/lib/poolparty/base_packages/poolparty.rb +88 -36
  163. data/lib/poolparty/base_packages/runit.rb +21 -0
  164. data/lib/poolparty/config/postlaunchmessage.txt +5 -0
  165. data/lib/poolparty/core/array.rb +4 -1
  166. data/lib/poolparty/core/class.rb +2 -0
  167. data/lib/poolparty/core/exception.rb +2 -1
  168. data/lib/poolparty/core/hash.rb +2 -2
  169. data/lib/poolparty/core/kernel.rb +3 -3
  170. data/lib/poolparty/core/metaid.rb +15 -0
  171. data/lib/poolparty/core/object.rb +42 -2
  172. data/lib/poolparty/core/string.rb +21 -6
  173. data/lib/poolparty/core/symbol.rb +9 -0
  174. data/lib/poolparty/dependency_resolutions/puppet.rb +20 -7
  175. data/lib/poolparty/exceptions/CloudNotFoundException.rb +7 -0
  176. data/lib/poolparty/exceptions/LoadRulesException.rb +7 -0
  177. data/lib/poolparty/exceptions/MasterException.rb +10 -0
  178. data/lib/poolparty/helpers/binary.rb +37 -4
  179. data/lib/poolparty/helpers/console.rb +25 -8
  180. data/lib/poolparty/helpers/nice_printer.rb +36 -0
  181. data/lib/poolparty/helpers/optioner.rb +51 -16
  182. data/lib/poolparty/helpers/provisioner_base.rb +117 -28
  183. data/lib/poolparty/helpers/provisioners/master.rb +102 -35
  184. data/lib/poolparty/helpers/provisioners/slave.rb +25 -9
  185. data/lib/poolparty/modules/cloud_dsl.rb +13 -0
  186. data/lib/poolparty/modules/cloud_resourcer.rb +51 -8
  187. data/lib/poolparty/modules/configurable.rb +1 -1
  188. data/lib/poolparty/modules/definable_resource.rb +2 -2
  189. data/lib/poolparty/modules/file_writer.rb +37 -6
  190. data/lib/poolparty/modules/method_missing_sugar.rb +8 -3
  191. data/lib/poolparty/modules/pretty_printer.rb +1 -0
  192. data/lib/poolparty/modules/resourcing_dsl.rb +4 -2
  193. data/lib/poolparty/modules/thread_pool.rb +106 -0
  194. data/lib/poolparty/monitors/base_monitor.rb +65 -6
  195. data/lib/poolparty/monitors/monitors/cpu_monitor.rb +1 -1
  196. data/lib/poolparty/monitors/monitors/memory_monitor.rb +28 -1
  197. data/lib/poolparty/monitors/monitors/web_monitor.rb +18 -0
  198. data/lib/poolparty/net/messenger.rb +72 -0
  199. data/lib/poolparty/net/remote.rb +5 -2
  200. data/lib/poolparty/net/remote_bases/ec2/ec2_response_object.rb +66 -0
  201. data/lib/poolparty/net/remote_bases/ec2.rb +133 -131
  202. data/lib/poolparty/net/remote_instance.rb +28 -6
  203. data/lib/poolparty/net/remoter.rb +117 -64
  204. data/lib/poolparty/net/remoter_base.rb +49 -11
  205. data/lib/poolparty/plugins/deploydirectory.rb +66 -0
  206. data/lib/poolparty/plugins/line.rb +5 -4
  207. data/lib/poolparty/plugins/rsyncmirror.rb +26 -0
  208. data/lib/poolparty/plugins/runit.rb +96 -0
  209. data/lib/poolparty/plugins/svn.rb +1 -1
  210. data/lib/poolparty/pool/base.rb +47 -18
  211. data/lib/poolparty/pool/cloud.rb +121 -65
  212. data/lib/poolparty/pool/custom_resource.rb +4 -20
  213. data/lib/poolparty/pool/loggable.rb +3 -8
  214. data/lib/poolparty/pool/plugin.rb +14 -19
  215. data/lib/poolparty/pool/plugin_model.rb +8 -8
  216. data/lib/poolparty/pool/pool.rb +28 -11
  217. data/lib/poolparty/pool/resource.rb +109 -40
  218. data/lib/poolparty/pool/resources/class_package.rb +74 -33
  219. data/lib/poolparty/pool/resources/conditional.rb +32 -10
  220. data/lib/poolparty/pool/resources/custom_service.rb +30 -0
  221. data/lib/poolparty/pool/resources/exec.rb +6 -5
  222. data/lib/poolparty/pool/resources/gem_package.rb +52 -0
  223. data/lib/poolparty/pool/resources/mount.rb +22 -0
  224. data/lib/poolparty/pool/resources/package.rb +13 -3
  225. data/lib/poolparty/pool/resources/sshkey.rb +1 -1
  226. data/lib/poolparty/pool/resources/variable.rb +4 -0
  227. data/lib/poolparty/pool/script.rb +8 -6
  228. data/lib/poolparty/templates/haproxy.conf +1 -1
  229. data/lib/poolparty/templates/messenger/client/log-run.erb +2 -0
  230. data/lib/poolparty/templates/messenger/client/run.erb +4 -0
  231. data/lib/poolparty/templates/messenger/master/log-run.erb +2 -0
  232. data/lib/poolparty/templates/messenger/master/run.erb +4 -0
  233. data/lib/poolparty/templates/messenger/node/log-run.erb +2 -0
  234. data/lib/poolparty/templates/messenger/node/run.erb +4 -0
  235. data/lib/poolparty/templates/poolparty.monitor +1 -1
  236. data/lib/poolparty/templates/puppet.conf +0 -0
  237. data/lib/poolparty/templates/puppetcleaner +6 -0
  238. data/lib/poolparty/templates/puppetrerun +9 -0
  239. data/lib/poolparty/templates/puppetrunner +8 -0
  240. data/lib/poolparty/templates/yaws.conf +19 -0
  241. data/lib/poolparty/version.rb +1 -1
  242. data/lib/poolparty.rb +35 -6
  243. data/lib/poolpartycl.rb +4 -0
  244. data/log/pool.logs +0 -0
  245. data/poolparty.gemspec +574 -61
  246. data/spec/poolparty/aska/aska_spec.rb +122 -0
  247. data/spec/poolparty/bin/console_spec.rb +18 -0
  248. data/spec/poolparty/core/hash_spec.rb +4 -4
  249. data/spec/poolparty/core/object_spec.rb +29 -0
  250. data/spec/poolparty/core/string_spec.rb +6 -0
  251. data/spec/poolparty/core/time_spec.rb +0 -3
  252. data/spec/poolparty/helpers/binary_spec.rb +2 -2
  253. data/spec/poolparty/helpers/optioner_spec.rb +1 -4
  254. data/spec/poolparty/helpers/provisioner_base_spec.rb +14 -1
  255. data/spec/poolparty/helpers/provisioners/master_spec.rb +3 -3
  256. data/spec/poolparty/modules/cloud_resourcer_spec.rb +3 -3
  257. data/spec/poolparty/modules/configurable_spec.rb +4 -1
  258. data/spec/poolparty/monitors/base_monitor_spec.rb +94 -2
  259. data/spec/poolparty/monitors/monitors/cpu_monitor_spec.rb +0 -1
  260. data/spec/poolparty/monitors/monitors/memory_monitor_spec.rb +47 -0
  261. data/spec/poolparty/{helpers → net}/messenger_spec.rb +3 -1
  262. data/spec/poolparty/net/remote_bases/ec2_spec.rb +46 -5
  263. data/spec/poolparty/net/remote_instance_spec.rb +2 -1
  264. data/spec/poolparty/net/remote_spec.rb +30 -8
  265. data/spec/poolparty/net/remoter_base_spec.rb +4 -1
  266. data/spec/poolparty/net/remoter_spec.rb +11 -108
  267. data/spec/poolparty/plugins/deploydirectory_spec.rb +51 -0
  268. data/spec/poolparty/pool/base_spec.rb +43 -33
  269. data/spec/poolparty/pool/cloud_spec.rb +299 -248
  270. data/spec/poolparty/pool/custom_resource_spec.rb +10 -5
  271. data/spec/poolparty/pool/example_spec.rb +0 -84
  272. data/spec/poolparty/pool/plugin_model_spec.rb +3 -2
  273. data/spec/poolparty/pool/plugin_spec.rb +89 -62
  274. data/spec/poolparty/pool/pool_spec.rb +17 -2
  275. data/spec/poolparty/pool/resource_spec.rb +341 -236
  276. data/spec/poolparty/pool/resources/class_package_spec.rb +102 -66
  277. data/spec/poolparty/pool/resources/conditional_spec.rb +65 -26
  278. data/spec/poolparty/pool/resources/cron_spec.rb +3 -2
  279. data/spec/poolparty/pool/resources/exec_spec.rb +1 -1
  280. data/spec/poolparty/pool/resources/gem_spec.rb +18 -14
  281. data/spec/poolparty/pool/resources/remote_file_spec.rb +1 -1
  282. data/spec/poolparty/pool/resources/variable_spec.rb +1 -1
  283. data/spec/poolparty/pool/script_spec.rb +58 -37
  284. data/spec/poolparty/pool/test_plugins/webserver.rb +1 -0
  285. data/spec/poolparty/spec_helper.rb +16 -5
  286. data/tasks/deployment.rake +19 -3
  287. data/tasks/development.rake +11 -2
  288. data/tasks/ec2.rake +9 -1
  289. data/website/index.html +2 -2
  290. metadata +167 -70
  291. data/bin/pool-provision +0 -34
  292. data/erl_crash.dump +0 -8409
  293. data/examples/with_apache_plugin.rb +0 -22
  294. data/lib/erlang/messenger/Makefile +0 -15
  295. data/lib/erlang/messenger/ebin/master_app.beam +0 -0
  296. data/lib/erlang/messenger/ebin/node_app.beam +0 -0
  297. data/lib/erlang/messenger/ebin/pm_client.beam +0 -0
  298. data/lib/erlang/messenger/ebin/pm_cluster.beam +0 -0
  299. data/lib/erlang/messenger/ebin/pm_event_handler.beam +0 -0
  300. data/lib/erlang/messenger/ebin/pm_master.beam +0 -0
  301. data/lib/erlang/messenger/ebin/pm_master_supervisor.beam +0 -0
  302. data/lib/erlang/messenger/ebin/pm_node.beam +0 -0
  303. data/lib/erlang/messenger/ebin/pm_node_supervisor.beam +0 -0
  304. data/lib/erlang/messenger/ebin/pm_packager.beam +0 -0
  305. data/lib/erlang/messenger/ebin/utils.beam +0 -0
  306. data/lib/erlang/messenger/lib/eunit/Makefile +0 -28
  307. data/lib/erlang/messenger/lib/eunit/ebin/autoload.beam +0 -0
  308. data/lib/erlang/messenger/lib/eunit/ebin/code_monitor.beam +0 -0
  309. data/lib/erlang/messenger/lib/eunit/ebin/eunit.beam +0 -0
  310. data/lib/erlang/messenger/lib/eunit/ebin/eunit_autoexport.beam +0 -0
  311. data/lib/erlang/messenger/lib/eunit/ebin/eunit_data.beam +0 -0
  312. data/lib/erlang/messenger/lib/eunit/ebin/eunit_lib.beam +0 -0
  313. data/lib/erlang/messenger/lib/eunit/ebin/eunit_proc.beam +0 -0
  314. data/lib/erlang/messenger/lib/eunit/ebin/eunit_serial.beam +0 -0
  315. data/lib/erlang/messenger/lib/eunit/ebin/eunit_server.beam +0 -0
  316. data/lib/erlang/messenger/lib/eunit/ebin/eunit_striptests.beam +0 -0
  317. data/lib/erlang/messenger/lib/eunit/ebin/eunit_test.beam +0 -0
  318. data/lib/erlang/messenger/lib/eunit/ebin/eunit_tests.beam +0 -0
  319. data/lib/erlang/messenger/lib/eunit/ebin/eunit_tty.beam +0 -0
  320. data/lib/erlang/messenger/lib/eunit/ebin/file_monitor.beam +0 -0
  321. data/lib/erlang/messenger/lib/eunit/src/Makefile +0 -46
  322. data/lib/erlang/messenger/src/pm_event_handler.erl +0 -21
  323. data/lib/poolparty/config/allowed_commands.yml +0 -1
  324. data/lib/poolparty/helpers/messenger.rb +0 -29
  325. data/lib/poolparty/plugins/git.rb +0 -39
  326. data/lib/poolparty/pool/resources/gem.rb +0 -28
  327. data/lib/poolparty/pool/tmp/.ppkeys +0 -3
  328. data/lib/poolparty/pool/tmp/happydayz +0 -1
  329. data/lib/poolparty/pool/tmp/install_master.sh +0 -33
  330. data/lib/poolparty/pool/tmp/pool.spec +0 -11
  331. data/lib/poolparty/pool/tmp/poolparty.pp +0 -600
  332. data/lib/poolparty/pool/tmp/tc-instances.list +0 -1
  333. data/lib/poolparty/templates/fileserver.conf +0 -4
  334. data/spec/poolparty/plugins/git_spec.rb +0 -33
  335. data/test_manifest.pp +0 -658
@@ -0,0 +1,66 @@
1
+ class EC2ResponseObject
2
+ def self.get_descriptions(resp)
3
+ rs = get_instance_from_response(resp)
4
+ group = get_group_from_response(resp)
5
+
6
+ # puts rs.methods.sort - rs.ancestors.methods
7
+ out = begin
8
+ if rs.respond_to?(:instancesSet)
9
+ [EC2ResponseObject.get_hash_from_response(rs.instancesSet.item, group)]
10
+ else
11
+ rs.collect {|r|
12
+ if r.instancesSet.item.class == Array
13
+ r.instancesSet.item.map {|t| EC2ResponseObject.get_hash_from_response(t, group)}
14
+ else
15
+ [EC2ResponseObject.get_hash_from_response(r.instancesSet.item, group)]
16
+ end
17
+ }.flatten.reject {|a| a.nil? }
18
+ end
19
+ rescue Exception => e
20
+ # Really weird bug with amazon's ec2 gem
21
+ rs.collect {|r| EC2ResponseObject.get_hash_from_response(r)}.reject {|a| a.nil? } rescue []
22
+ end
23
+
24
+ out
25
+ end
26
+ def self.get_instance_from_response(resp)
27
+ begin
28
+ rs = resp.reservationSet.item unless resp.reservationSet.nil?
29
+ rs ||= resp.DescribeInstancesResponse.reservationSet.item
30
+ rs ||= rs.respond_to?(:instancesSet) ? rs.instancesSet : rs
31
+ rs.reject! {|a| a.nil? || a.empty? }
32
+ rescue Exception => e
33
+ resp
34
+ end
35
+ rs
36
+ end
37
+ def self.get_group_from_response(resp)
38
+ begin
39
+ resp = resp.reservationSet.item.first if resp.reservationSet.item.is_a?(Array)
40
+ group = resp.reservationSet.item.groupSet.item.groupId unless resp.reservationSet.nil?
41
+ group ||= resp.groupSet.item[0].groupId rescue nil
42
+ group ||= resp.DescribeInstancesResponse.reservationSet.item.groupSet.item.groupId
43
+ #rs ||= rs.respond_to?(:instancesSet) ? rs.instancesSet : rs
44
+ #rs.reject! {|a| a.nil? || a.empty? }
45
+ rescue Exception => e
46
+ resp
47
+ end
48
+ group
49
+ end
50
+ def self.get_hash_from_response(resp, group = 'default')
51
+ begin
52
+ {
53
+ :instance_id => resp.instanceId,
54
+ :name => resp.instanceId,
55
+ :ip => resp.dnsName || "not-assigned",
56
+ :status => resp.instanceState.name,
57
+ :launching_time => resp.launchTime.parse_datetime,
58
+ :internal_ip => resp.privateDnsName,
59
+ :keypair => resp.keyName,
60
+ :security_group => group
61
+ }
62
+ rescue Exception => e
63
+ nil
64
+ end
65
+ end
66
+ end
@@ -1,148 +1,150 @@
1
- require 'rubygems'
2
- require 'EC2'
1
+ =begin rdoc
2
+ EC2 Remoter Base
3
+
4
+ This serves as the basis for running PoolParty on Amazon's ec2 cloud
5
+ cluster.
6
+ =end
7
+ require "date"
8
+ require "#{::File.dirname(__FILE__)}/ec2/ec2_response_object"
3
9
 
4
- class String
5
- def convert_from_ec2_to_ip
6
- self.gsub(/.compute-1.amazonaws.com*/, '').gsub(/ec2-/, '').gsub(/-/, '.')
7
- end
8
- end
9
- module PoolParty
10
- module Ec2
11
- def launch_new_instance!(num=1)
12
- instance = ec2.run_instances(
13
- :image_id => (ami || Base.ami),
14
- :user_data => "",
15
- :minCount => 1,
16
- :maxCount => num,
17
- :key_name => (keypair || Base.keypair),
18
- :availability_zone => nil,
19
- :size => "#{size || Base.size}")
20
- begin
21
- item = instance#.instancesSet.item
22
- EC2ResponseObject.get_hash_from_response(item)
23
- rescue Exception => e
24
- end
25
- end
26
- # Terminate an instance by id
27
- def terminate_instance!(instance_id=nil)
28
- ec2.terminate_instances(:instance_id => instance_id)
10
+ begin
11
+ require 'EC2'
12
+
13
+ class String
14
+ def convert_from_ec2_to_ip
15
+ self.gsub(/.compute-1.amazonaws.com*/, '').gsub(/ec2-/, '').gsub(/-/, '.')
29
16
  end
30
- # Describe an instance's status
31
- def describe_instance(id=nil)
32
- describe_instances.select {|a| a[:name] == id}[0] rescue nil
17
+ def parse_datetime
18
+ DateTime.parse( self.chomp ) rescue self
33
19
  end
34
- def describe_instances
35
- unless @describe_instances && !@describe_instances.empty?
36
- @id = 0
37
- @describe_instances = get_instances_description.each_with_index do |h,i|
20
+ end
21
+ module PoolParty
22
+ module Ec2
23
+ include PoolParty::Remote::RemoterBase
24
+
25
+ def launch_new_instance!(num=1)
26
+ instance = ec2.run_instances(
27
+ :image_id => (ami || Base.ami),
28
+ :user_data => "",
29
+ :minCount => 1,
30
+ :maxCount => num,
31
+ :key_name => (keypair || Base.keypair),
32
+ :availability_zone => nil,
33
+ :instance_type => "#{size || Base.size}",
34
+ :group_id => ["#{security_group || Base.security_group}"])
35
+ begin
36
+ h = EC2ResponseObject.get_hash_from_response(instance)
37
+ #h = instance.instancesSet.item.first
38
+ rescue Exception => e
39
+ h = instance
40
+ end
41
+ h
42
+ end
43
+ # Terminate an instance by id
44
+ def terminate_instance!(instance_id=nil)
45
+ ec2.terminate_instances(:instance_id => instance_id)
46
+ end
47
+ # Describe an instance's status
48
+ def describe_instance(id=nil)
49
+ describe_instances.select {|a| a[:name] == id}[0] rescue nil
50
+ end
51
+ def describe_instances
52
+ id = 0
53
+ get_instances_description.each_with_index do |h,i|
38
54
  if h[:status] == "running"
39
- @name = @id == 0 ? "master" : "node#{@id}"
40
- @id += 1
55
+ inst_name = id == 0 ? "master" : "node#{id}"
56
+ id += 1
41
57
  else
42
- @name = "#{h[:status]}_node#{i}"
58
+ inst_name = "#{h[:status]}_node#{i}"
43
59
  end
44
60
  h.merge!({
45
- :name => @name,
61
+ :name => inst_name,
46
62
  :hostname => h[:ip],
47
- :ip => h[:ip].convert_from_ec2_to_ip
63
+ :ip => h[:ip].convert_from_ec2_to_ip,
64
+ :index => i,
65
+ :launching_time => (h[:launching_time])
48
66
  })
67
+ end.sort {|a,b| a[:index] <=> b[:index] }
68
+ end
69
+ # Get the s3 description for the response in a hash format
70
+ def get_instances_description
71
+ EC2ResponseObject.get_descriptions(ec2.describe_instances)
72
+ end
73
+
74
+ def after_launch_master(instance=nil)
75
+ begin
76
+ when_no_pending_instances do
77
+ if instance
78
+ ec2.associate_address(:instance_id => instance.instanceId, :public_ip => set_master_ip_to) if set_master_ip_to
79
+ ec2.attach_volume(:volume_id => ebs_volume_id, :instance_id => instance.instanceId, :device => ebs_volume_device) if ebs_volume_id && ebs_volume_mount_point
80
+ end
81
+ end
82
+ rescue Exception => e
49
83
  end
84
+ reset_remoter_base!
85
+ when_all_assigned_ips {wait "2.seconds"}
50
86
  end
51
- @describe_instances
52
- end
53
- # Get the s3 description for the response in a hash format
54
- def get_instances_description
55
- @cached_descriptions ||= EC2ResponseObject.get_descriptions(ec2.describe_instances).sort_by {|a| a[:launching_time]}
56
- end
57
-
58
- # Help create a keypair for the cloud
59
- # This is a helper to create the keypair and add them to the cloud for you
60
- def create_keypair
61
- return false unless keypair
62
- unless ::File.exists?( new_keypair_path )
63
- FileUtils.mkdir_p ::File.dirname( new_keypair_path )
64
- Kernel.system "ec2-add-keypair #{keypair} > #{new_keypair_path} && chmod 600 #{new_keypair_path}"
87
+
88
+ # Help create a keypair for the cloud
89
+ # This is a helper to create the keypair and add them to the cloud for you
90
+ def create_keypair
91
+ return false unless keypair
92
+ unless ::File.exists?( new_keypair_path )
93
+ FileUtils.mkdir_p ::File.dirname( new_keypair_path )
94
+ vputs "Creating keypair: #{keypair} in #{new_keypair_path}"
95
+ Kernel.system "ec2-add-keypair #{keypair} > #{new_keypair_path} && chmod 600 #{new_keypair_path}"
96
+ end
97
+ end
98
+
99
+ # wrapper for remote base to perform a snapshot backup for the ebs volume
100
+ def create_snapshot
101
+ return nil if ebs_volume_id.nil?
102
+ ec2.create_snapshot(:volume_id => ebs_volume_id)
103
+ end
104
+
105
+ # EC2 connections
106
+ def ec2
107
+ @ec2 ||= EC2::Base.new( :access_key_id => (access_key || Base.access_key),
108
+ :secret_access_key => (secret_access_key || Base.secret_access_key)
109
+ )
65
110
  end
66
- end
67
- # EC2 connections
68
- def ec2
69
- @ec2 ||= EC2::Base.new( :access_key_id => (access_key || Base.access_key),
70
- :secret_access_key => (secret_access_key || Base.secret_access_key)
71
- )
72
- end
73
-
74
- # Callback
75
- def custom_install_tasks_for(o)
76
- [
77
- "# ec2 installation tasks",
78
- "# Set hostname",
79
- # "if [ -z $(grep -v '#' /etc/hosts | grep '#{o.name}') ]; then echo \"$(curl http://169.254.169.254/latest/meta-data/public-ipv4) #{o.name}\" >> /etc/hosts; fi",
80
- "if [ -z \"$(grep -v '#' /etc/hosts | grep '#{o.name}')\" ]; then echo '127.0.0.1 #{o.name}' >> /etc/hosts; fi",
81
- "hostname #{o.name}",
82
- "echo #{o.name} > /etc/hostname"
83
- ]
84
- end
85
-
86
- def custom_configure_tasks_for(o)
87
- [
88
- "# ec2 configuration"
89
- ]
90
- end
91
-
92
- def reset!
93
- @describe_instances = @cached_descriptions = nil
94
- end
95
- end
96
- register_remote_base :Ec2
97
- end
98
111
 
99
- # Provides a simple class to wrap around the amazon responses
100
- class EC2ResponseObject
101
- def self.get_descriptions(resp)
102
- rs = get_response_from(resp)
103
-
104
- # puts rs.methods.sort - rs.ancestors.methods
105
- out = begin
106
- if rs.respond_to?(:instancesSet)
107
- [EC2ResponseObject.get_hash_from_response(rs.instancesSet.item)]
108
- else
109
- rs.collect {|r|
110
- if r.instancesSet.item.class == Array
111
- r.instancesSet.item.map {|t| EC2ResponseObject.get_hash_from_response(t)}
112
- else
113
- [EC2ResponseObject.get_hash_from_response(r.instancesSet.item)]
114
- end
115
- }.flatten.reject {|a| a.nil? }
112
+ # Callback
113
+ def custom_install_tasks_for(o)
114
+ [
115
+ "# ec2 installation tasks",
116
+ "# Set hostname",
117
+ # "if [ -z $(grep -v '#' /etc/hosts | grep '#{o.name}') ]; then echo \"$(curl http://169.254.169.254/latest/meta-data/public-ipv4) #{o.name}\" >> /etc/hosts; fi",
118
+ "if [ -z \"$(grep -v '#' /etc/hosts | grep '#{o.name}')\" ]; then echo '127.0.0.1 #{o.name}' >> /etc/hosts; fi",
119
+ "hostname #{o.name}",
120
+ "echo #{o.name} > /etc/hostname",
121
+ "cd /var/poolparty && wget http://rubyforge.org/frs/download.php/43666/amazon-ec2-0.3.1.gem -O amazon-ec2.gem 2>&1 && gem install -y --no-ri --no-rdoc amazon-ec2.gem 2>&1"
122
+ ]
123
+ end
124
+
125
+ def custom_configure_tasks_for(o)
126
+ [
127
+ "# ec2 configuration"
128
+ ]
129
+ end
130
+
131
+ def reset_base!
132
+ @describe_instances = @cached_descriptions = nil
116
133
  end
117
- rescue Exception => e
118
- # Really weird bug with amazon's ec2 gem
119
- rs.collect {|r| EC2ResponseObject.get_hash_from_response(r)}.reject {|a| a.nil? } rescue []
120
- end
121
-
122
- out
123
- end
124
- def self.get_response_from(resp)
125
- begin
126
- rs = resp.reservationSet.item unless resp.reservationSet.nil?
127
- rs ||= resp.DescribeInstancesResponse.reservationSet.item
128
- rs ||= rs.respond_to?(:instancesSet) ? rs.instancesSet : rs
129
- rs.reject! {|a| a.nil? || a.empty? }
130
- rescue Exception => e
131
134
  end
132
- rs
133
- end
134
- def self.get_hash_from_response(resp)
135
- begin
136
- {
137
- :instance_id => resp.instanceId,
138
- :name => resp.instanceId,
139
- :ip => resp.dnsName || "not-assigned",
140
- :status => resp.instanceState.name,
141
- :launching_time => resp.launchTime,
142
- :keypair => resp.keyName
143
- }
144
- rescue Exception => e
145
- nil
146
- end
135
+ register_remote_base :Ec2
147
136
  end
137
+ rescue LoadError
138
+ puts <<-EOM
139
+ Error: In order to use ec2, you need to install the amazon-ec2 gem
140
+
141
+ Ec2 is the default remoter base for PoolParty. If you intend on using
142
+ a different remoter base, specify it with:
143
+
144
+ using :remoter_name
145
+
146
+ in your config file, otherwise, to continue install amazon-ec2 with
147
+
148
+ gem install amazon-ec2
149
+ EOM
148
150
  end
@@ -7,11 +7,13 @@ module PoolParty
7
7
  include Remote
8
8
  include Configurable
9
9
  include CloudResourcer
10
-
11
- def initialize(opts, parent=self)
12
- @parent = parent
10
+
11
+ def initialize(opts, parent=nil)
12
+ run_setup(parent)
13
+
13
14
  set_vars_from_options(parent.options) if parent && parent.respond_to?(:options)
14
15
  set_vars_from_options(opts) unless opts.nil? || opts.empty?
16
+
15
17
  on_init
16
18
  end
17
19
 
@@ -61,12 +63,32 @@ module PoolParty
61
63
  # Printing. This is how we extract the instances into the listing on the
62
64
  # local side into the local listing file
63
65
  def to_s
64
- "#{name}\t#{ip}"
66
+ "#{name}\t#{ip}\t#{instance_id}"
65
67
  end
66
68
 
67
- # Commands for the servers
68
69
  def puppet_runner_command
69
- ". /etc/profile && /usr/sbin/puppetd --onetime --no-daemonize --logdest syslog --server master 2>&1"
70
+ self.class.send :puppet_runner_command
71
+ end
72
+ # Commands for the servers
73
+ def self.puppet_runner_command
74
+ ". /etc/profile && puppetrunner"
75
+ end
76
+ def self.puppet_master_rerun_command
77
+ ". /etc/profile && puppetrerun"
78
+ end
79
+ def self.puppet_rerun_commad
80
+ puppet_runner_command
81
+ end
82
+ def cloud
83
+ @pa = parent
84
+ while !(@pa.is_a?(PoolParty::Cloud::Cloud) || @pa.nil? || @pa == self)
85
+ @pa = @pa.parent
86
+ end
87
+ @pa
88
+ end
89
+ def hosts_file_listing_for(cl)
90
+ string = (cl.name == cloud.name) ? "#{name}.#{cloud.name}\t#{name}" : "#{name}.#{cloud.name}"
91
+ "#{internal_ip}\t#{string}"
70
92
  end
71
93
  end
72
94