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
@@ -4,41 +4,57 @@ module PoolParty
4
4
 
5
5
  def install_tasks
6
6
  [
7
- setup_puppet
7
+ setup_poolparty,
8
+ setup_puppet,
9
+ setup_configs,
8
10
  ] << configure_tasks
9
11
  end
10
12
 
11
13
  def configure_tasks
12
- [
13
- setup_configs,
14
+ [
14
15
  start_puppet
15
16
  ]
16
17
  end
18
+
19
+ def setup_poolparty
20
+ <<-EOE
21
+ echo "Running first time run"
22
+ cp #{Base.remote_storage_path}/#{Base.template_directory}/puppetrunner /usr/bin/puppetrunner
23
+ chmod +x /usr/bin/puppetrunner
24
+ EOE
25
+ end
17
26
 
18
27
  def setup_puppet
19
28
  <<-EOE
20
29
  if [ -z "$(grep -v '#' /etc/hosts | grep 'master')" ]; then echo "#{master_ip} puppet master" >> /etc/hosts; else echo "host already set"; fi
21
30
  cp #{Base.remote_storage_path}/namespaceauth.conf /etc/puppet/namespaceauth.conf
22
- echo 'DAEMON_OPTS="-w 120 –fqdn #{@instance.name} –server master"' > /etc/default/puppet
23
31
  EOE
24
32
  end
25
33
 
26
34
  def setup_configs
27
35
  <<-EOS
28
- echo "#{open(File.join(template_directory, "puppet.conf")).read}" > /etc/puppet/puppet.conf
36
+ echo "#{open(File.join(template_directory, "puppet.conf")).read}" > /etc/puppet/puppet.conf
37
+ /etc/init.d/puppetmaster stop #{unix_hide_string}
38
+ rm -rf /etc/puppet/ssl
39
+ # /usr/bin/puppetrerun
29
40
  EOS
30
41
  end
31
-
42
+
32
43
  # /etc/init.d/puppetmasterd stop
33
44
  # puppetd --listen --fqdn #{@instance.name}
34
45
  def start_puppet
35
46
  <<-EOS
36
- ps aux | grep "puppetmasterd" | awk '{print $2}' | xargs kill
37
- rm -rf /etc/puppet/ssl*
38
- puppetd --test 2>&1 &
47
+ /bin/sh /usr/bin/puppetrunner
39
48
  EOS
40
49
  end
41
50
 
51
+ def last_install_tasks
52
+ [
53
+ "rm -rf /etc/puppet/ssl",
54
+ "/usr/bin/puppetrerun"
55
+ ]
56
+ end
57
+
42
58
  def master_ip
43
59
  @cloud.master.ip
44
60
  end
@@ -0,0 +1,13 @@
1
+ module PoolParty
2
+ module CloudDsl
3
+
4
+ def mount_ebs_volume_at(id="", loc="/data")
5
+ ebs_volume_id id
6
+ ebs_volume_mount_point loc
7
+ ebs_volume_device "/dev/#{id.sanitize}"
8
+ has_directory(:name => loc)
9
+ has_mount(:name => loc, :device => ebs_volume_device)
10
+ end
11
+
12
+ end
13
+ end
@@ -3,10 +3,26 @@ require "ftools"
3
3
  module PoolParty
4
4
  module CloudResourcer
5
5
 
6
+ def plugin_directory(*args)
7
+ args = ["/plugins"] if args.empty?
8
+ args.each {|arg| Dir["#{arg}/*/*.rb"].each {|f| require f rescue "" }}
9
+ end
10
+
6
11
  # Store block
7
12
  def store_block(&block)
8
- @store_block ||= block
13
+ @stored_block ||= block ? block : nil
14
+ end
15
+
16
+ def stored_block
17
+ @stored_block
18
+ end
19
+
20
+ # This will run the blocks after they are stored if there is a block
21
+ # associated
22
+ def run_stored_block
23
+ self.run_in_context @stored_block if @stored_block
9
24
  end
25
+
10
26
  # Set instances with a range
11
27
  def instances(arg)
12
28
  if arg.is_a?(Range)
@@ -65,15 +81,30 @@ module PoolParty
65
81
  ]
66
82
  end
67
83
 
68
- # Set the parent on the resource
69
- def set_parent(pare, sink_options=true)
70
- @parent = pare
71
- # Add self as a service on the parent
72
- pare.add_service(self) if pare.respond_to?(:add_service)
73
- # Take the options of the parents
74
- configure(pare.options) if pare.respond_to?(:options) && sink_options
84
+ def context_stack
85
+ @@context_stack ||= []
86
+ end
87
+
88
+ def run_setup(parent, should_set_parent=true, &block)
89
+ context_stack.push parent
90
+
91
+ set_parent if should_set_parent
92
+ run_in_context self, &block if block
93
+
94
+ context_stack.pop
75
95
  end
76
96
 
97
+ # Set the parent on the resource
98
+ def set_parent(sink_options=true)
99
+ unless context_stack.last.nil?
100
+ @parent = context_stack.last
101
+ # Add self as a service on the parent
102
+ parent.add_service(self) if parent.respond_to?(:add_service)
103
+ # Take the options of the parents
104
+ configure(parent.options) if parent && parent.respond_to?(:options) && sink_options
105
+ end
106
+ end
107
+
77
108
  def number_of_resources
78
109
  arr = resources.map do |n, r|
79
110
  r.size
@@ -85,5 +116,17 @@ module PoolParty
85
116
  @parent ||= nil
86
117
  end
87
118
 
119
+ def plugin_store
120
+ @plugin_store ||= []
121
+ end
122
+
123
+ def realize_plugins!
124
+ plugin_store.each {|plugin| plugin.realize! if plugin }
125
+ end
126
+
127
+ def plugin_store
128
+ @plugins ||= []
129
+ end
130
+
88
131
  end
89
132
  end
@@ -21,7 +21,7 @@ module PoolParty
21
21
  end
22
22
 
23
23
  def set_vars_from_options(opts={})
24
- opts.each {|k,v| self.send k.to_sym, v } unless opts.empty?
24
+ opts.each {|k,v| self.send k.to_sym, send_if_method(v) } unless opts.empty?
25
25
  end
26
26
  end
27
27
 
@@ -16,7 +16,7 @@ module PoolParty
16
16
  #
17
17
  # For example usage, see lib/poolparty/plugins/line.rb
18
18
  def define_resource(name, &block)
19
- symc = "#{name}".classify
19
+ symc = "#{name}".camelcase
20
20
  klass = symc.class_constant(PoolParty::Resources::CustomResource, {:preserve => true}, &block)
21
21
  PoolParty::Resources.module_eval &block
22
22
  klass
@@ -44,7 +44,7 @@ module PoolParty
44
44
  #
45
45
  # An example is included in the poolparty-apache-plugin
46
46
  def virtual_resource(name=:virtual_resource, opts={}, &block)
47
- symc = "#{name}".classify
47
+ symc = "#{name}".camelcase
48
48
  eval <<-EOE
49
49
  class PoolParty::Resources::#{symc} < PoolParty::Resources::Resource
50
50
  end
@@ -5,11 +5,27 @@ module PoolParty
5
5
  path = ::File.join( Base.storage_directory, preceded, ::File.basename(file) )
6
6
  FileUtils.cp file, path unless file == path || ::File.exists?(path)
7
7
  end
8
+ def cleanup_storage_directory
9
+ Dir["#{Base.storage_directory}/**/*"].each do |f|
10
+ ::FileUtils.rm f if ::File.file?(f)
11
+ end
12
+ end
8
13
  def copy_template_to_storage_directory(file)
9
14
  make_template_directory
10
15
  path = ::File.join( Base.tmp_path, Base.template_directory, ::File.basename(file) )
11
16
  FileUtils.cp file, path unless file == path || ::File.exists?(path)
12
17
  end
18
+ def copy_directory_into_template_storage_directory(dir)
19
+ path = make_template_directory(dir)
20
+ Dir["#{dir}/*"].each do |file|
21
+ FileUtils.cp file, path unless ::File.exists?(::File.join(path, ::File.basename(file)))
22
+ end
23
+ ::File.basename(path)
24
+ end
25
+ def make_directory_in_storage_directory(dirname="newdir")
26
+ path = ::File.join( Base.storage_directory, dirname )
27
+ make_base_path path
28
+ end
13
29
  def write_to_file_in_storage_directory(file, str, preceded="", &block)
14
30
  path = ::File.join( Base.storage_directory, preceded, ::File.basename(file) )
15
31
  write_to_file(path, str, &block)
@@ -34,7 +50,8 @@ module PoolParty
34
50
  end
35
51
  def make_base_path(path)
36
52
  unless FileTest.directory?(path)
37
- begin
53
+ begin
54
+ ::FileUtils.rm path if ::File.file?(path)
38
55
  ::FileUtils.mkdir_p path
39
56
  rescue Errno::ENOTDIR
40
57
  rescue Errno::EEXIST
@@ -43,14 +60,28 @@ module PoolParty
43
60
  end
44
61
  end
45
62
  def make_base_directory
46
- FileUtils.mkdir_p Base.storage_directory unless ::File.directory?(Base.storage_directory)
63
+ begin
64
+ FileUtils.mkdir_p Base.storage_directory unless ::File.directory?(Base.storage_directory)
65
+ rescue Errno::EEXIST
66
+ FileUtils.rm Base.storage_directory
67
+ make_base_directory
68
+ end
47
69
  end
48
- def make_template_directory
49
- path = ::File.join(Base.tmp_path, Base.template_directory)
50
- FileUtils.mkdir_p path unless ::File.directory?(path)
70
+ def make_template_directory(dir=nil)
71
+ path = dir ? ::File.join(Base.tmp_path, Base.template_directory, ::File.basename(dir)) : ::File.join(Base.tmp_path, Base.template_directory)
72
+ begin
73
+ make_base_directory
74
+ FileUtils.mkdir path unless ::File.directory?(path)
75
+ rescue Errno::EEXIST
76
+ FileUtils.rm path if ::File.exists?(path)
77
+ make_template_directory(dir)
78
+ end
79
+ path
51
80
  end
52
81
  def clear_base_directory
53
- FileUtils::rm_rf "#{Base.storage_directory}"
82
+ Dir["#{Base.storage_directory}/**/*"].each do |f|
83
+ ::FileUtils.rm f if ::File.file?(f)
84
+ end
54
85
  end
55
86
  end
56
87
  end
@@ -16,7 +16,7 @@ module PoolParty
16
16
  # See get_from_options for more information
17
17
  def method_missing(m, *args, &block)
18
18
  if block_given?
19
- (args[0].class == self.class) ? args[0].instance_eval(&block) : super
19
+ (args[0].class == self.class) ? args[0].run_in_context(&block) : super
20
20
  else
21
21
  get_from_options(m, *args, &block)
22
22
  end
@@ -42,10 +42,15 @@ module PoolParty
42
42
  if options.has_key?(m)
43
43
  options[m]
44
44
  else
45
- (parent.nil? || parent.class == self.class || !parent.respond_to?(:options) || parent.options.has_key?(m)) ? nil : parent.send(m, *args, &block)
45
+ (parent.nil? || parent.class == self.class || !parent.respond_to?(:options) || parent.options.has_key?(m) || !parent.respond_to?(m)) ? nil : parent.send(m, *args, &block)
46
46
  end
47
47
  else
48
- options[m] = (args.is_a?(Array) && args.size > 1) ? args : args[0]
48
+ options[m] =
49
+ if (args.is_a?(Array) && args.size > 1)
50
+ args
51
+ else
52
+ args[0]
53
+ end
49
54
  end
50
55
  end
51
56
 
@@ -2,6 +2,7 @@ module PoolParty
2
2
  module PrettyPrinter
3
3
 
4
4
  def pretty_print(pre="\t")
5
+ pre = "\t" unless pre.is_a?(String)
5
6
  returning Array.new do |out|
6
7
  out << pretty_name(pre, self)
7
8
  out << pretty_options(pre, self)
@@ -6,7 +6,8 @@ module PoolParty
6
6
  str ? options.merge!(:require => str) : options[:require]
7
7
  end
8
8
  def requires(str=nil)
9
- str ? options.append!(:require => str) : options[:require]
9
+ # str ? options.append!(:require => str) : options[:require]
10
+ str ? options.append!(:require => send_if_method(str)) : options[:require]
10
11
  end
11
12
  def ensures(str="running")
12
13
  if %w(absent running).map {|a| self.send a.to_sym}.include?(str)
@@ -49,7 +50,8 @@ module PoolParty
49
50
  def template(file, opts={})
50
51
  raise TemplateNotFound.new("no template given") unless file
51
52
  raise TemplateNotFound.new("template cannot be found #{file}") unless ::File.file?(file)
52
- unless opts[:just_copy]
53
+
54
+ unless opts[:just_copy]
53
55
  options.merge!({:content => "template(\"#{::File.basename(file)}\")"})
54
56
  options.delete(:source) if options.has_key?(:source)
55
57
  copy_template_to_storage_directory(file)
@@ -0,0 +1,106 @@
1
+ require 'thread'
2
+ begin
3
+ require 'fasttread'
4
+ rescue LoadError
5
+ end
6
+
7
+ class ThreadPool
8
+ class Worker
9
+ def initialize(thread_queue)
10
+ @mutex = Mutex.new
11
+ @cv = ConditionVariable.new
12
+ @queue = thread_queue
13
+ @running = true
14
+ @thread = Thread.new do
15
+ @mutex.synchronize do
16
+ while @running
17
+ @cv.wait(@mutex)
18
+ block = get_block
19
+ if block
20
+ @mutex.unlock
21
+ block.call
22
+ @mutex.lock
23
+ reset_block
24
+ end
25
+ @queue << self
26
+ end
27
+ end
28
+ end
29
+ end
30
+
31
+ def name
32
+ @thread.inspect
33
+ end
34
+
35
+ def get_block
36
+ @block
37
+ end
38
+
39
+ def set_block(block)
40
+ @mutex.synchronize do
41
+ raise RuntimeError, "Thread already busy." if @block
42
+ @block = block
43
+ # Signal the thread in this class, that there's a job to be done
44
+ @cv.signal
45
+ end
46
+ end
47
+
48
+ def reset_block
49
+ @block = nil
50
+ end
51
+
52
+ def busy?
53
+ @mutex.synchronize { !@block.nil? }
54
+ end
55
+
56
+ def stop
57
+ @mutex.synchronize do
58
+ @running = false
59
+ @cv.signal
60
+ end
61
+ @thread.join
62
+ end
63
+ end
64
+
65
+ attr_accessor :max_size
66
+
67
+ def initialize(max_size = 10)
68
+ @max_size = max_size
69
+ @queue = Queue.new
70
+ @workers = []
71
+ end
72
+
73
+ def size
74
+ @workers.size
75
+ end
76
+
77
+ def busy?
78
+ @queue.size < @workers.size
79
+ end
80
+
81
+ def shutdown
82
+ @workers.each { |w| w.stop }
83
+ @workers = []
84
+ end
85
+
86
+ alias :join :shutdown
87
+
88
+ def process(block=nil,&blk)
89
+ block = blk if block_given?
90
+ worker = get_worker
91
+ worker.set_block(block)
92
+ end
93
+
94
+ private
95
+
96
+ def get_worker
97
+ if !@queue.empty? or @workers.size == @max_size
98
+ return @queue.pop
99
+ else
100
+ worker = Worker.new(@queue)
101
+ @workers << worker
102
+ worker
103
+ end
104
+ end
105
+
106
+ end
@@ -1,14 +1,58 @@
1
1
  =begin rdoc
2
2
  Monitor class
3
3
 
4
- TODO: Fill this out
4
+ Monitors are the basis for PoolParty scaling. Your cloud will expand and
5
+ contract against these monitors. You can set your cloud to be monitored by these
6
+ monitors simply by using them in the contract_when and the expand_when macros
7
+ on your cloud like so:
8
+
9
+ expand_when "cpu > 1.2", "memory > 0.94"
10
+ contract_when "cpu < 0.4", "memory < 0.3"
11
+
12
+ You can also add your own monitors simply by creating a directory in the same
13
+ directory as the pool spec (the same directory as the plugin directory exists) and
14
+ placing your monitor file (format: [monitorname]_monitor.rb) there.
15
+
16
+ Monitors are simply classes of the name of the monitor. They subclass the BaseMonitor
17
+ class from PoolParty. A sample monitor would look similar to:
18
+
19
+ class SampleMonitor < PoolParty::Monitors::BaseMonitor
20
+ def run
21
+ end
22
+ end
23
+ register_monitor :sample
24
+
25
+ The monitor class must have an instance level method called run. This method is called when
26
+ the cloud is checking the monitor. The output of this method should be the output of
27
+ the monitor.
28
+
29
+ Notice that at the end, you must call register_monitor :monitorname. This will tell your cloud
30
+ that it can monitor it with this monitor.
5
31
  =end
32
+ require "#{::File.dirname(__FILE__)}/../pool/base"
33
+
6
34
  module PoolParty
7
- module Monitors
35
+ module Monitors
36
+
37
+ module ClassMethods
38
+ end
39
+
40
+ module InstanceMethods
41
+ def expand_when(*arr)
42
+ @expand_when ||= ((arr && arr.empty?) ? options[:expand_when] : configure(:expand_when => self.class.send(:rules,:expand_when,arr,false)))
43
+ end
44
+
45
+ def contract_when(*arr)
46
+ @contract_when ||= ((arr&&arr.empty?) ? options[:contract_when] : configure(:contract_when => self.class.send(:rules,:contract_when,arr,false)))
47
+ end
48
+ end
8
49
 
9
50
  def self.register_monitor(*args)
10
51
  args.each do |arg|
11
- (available_monitors << "#{arg}".downcase.to_sym)
52
+ (available_monitors << "#{arg}".downcase.to_sym unless available_monitors.include?("#{arg}".downcase.to_sym))
53
+
54
+ InstanceMethods.module_eval "def #{arg}; @#{arg} ||= get_live_#{arg}; end"
55
+ InstanceMethods.module_eval "def get_live_#{arg}; messenger_send!(\"get_current_load #{arg}\").to_f rescue -1.0; end"
12
56
  end
13
57
  end
14
58
 
@@ -17,14 +61,29 @@ module PoolParty
17
61
  end
18
62
 
19
63
  class BaseMonitor
20
-
21
64
  def self.run
22
65
  new.run
23
66
  end
24
-
67
+ end
68
+
69
+ def self.included(receiver)
70
+ receiver.extend PoolParty::Monitors::ClassMethods
71
+ receiver.send :include, PoolParty::Monitors::InstanceMethods
72
+ receiver.send :include, Aska
25
73
  end
26
74
 
27
75
  end
28
76
  end
29
77
 
30
- Dir["#{File.dirname(__FILE__)}/monitors/*.rb"].each {|f| require f}
78
+ # Require included monitors
79
+ Dir["#{File.dirname(__FILE__)}/monitors/*.rb"].each {|f| require f}
80
+ # Require custom monitors
81
+ Dir["#{PoolParty::Base.custom_monitor_directories}/*.rb"].each {|f| require f}
82
+
83
+ module PoolParty
84
+ module Cloud
85
+ class Cloud
86
+ include PoolParty::Monitors
87
+ end
88
+ end
89
+ end
@@ -5,7 +5,7 @@ module PoolParty
5
5
 
6
6
  def run
7
7
  str = %x[uptime]
8
- str.split(/\s+/)[-2].to_f rescue 0.0
8
+ str.split(/\s+/)[-1].to_f rescue 0.0
9
9
  end
10
10
 
11
11
  end
@@ -4,6 +4,34 @@ module PoolParty
4
4
  class MemoryMonitor < BaseMonitor
5
5
 
6
6
  def run
7
+ uname = %x[uname]
8
+ case uname.chomp
9
+ when "Darwin"
10
+ darwin_memory_usage
11
+ else
12
+ nix_memory_usage
13
+ end
14
+ end
15
+
16
+ def darwin_memory_usage
17
+ str = %x[vm_stat]
18
+ keep_array = []
19
+ array_of_strings = str
20
+ begin
21
+ free_memory = array_of_strings[/free:(\W*)+([0-9]+)/, 2].to_f
22
+ active_memory = array_of_strings[/active:(\W*)([0-9]+)/, 2].to_f
23
+ inactive_memory = array_of_strings[/inactive:(\W*)([0-9]+)/, 2].to_f
24
+
25
+ used_memory = (active_memory + inactive_memory)
26
+ total_memory = (free_memory + active_memory + inactive_memory)
27
+
28
+ used_memory / total_memory
29
+ rescue Exception => e
30
+ 0.0
31
+ end
32
+ end
33
+
34
+ def nix_memory_usage
7
35
  str = %x[free -m | grep -i mem]
8
36
  begin
9
37
  total_memory = str.split[1].to_f
@@ -13,7 +41,6 @@ module PoolParty
13
41
  rescue Exception => e
14
42
  0.0
15
43
  end
16
-
17
44
  end
18
45
 
19
46
  end
@@ -0,0 +1,18 @@
1
+ =begin rdoc
2
+ Web monitor.
3
+ =end
4
+ module PoolParty
5
+ module Monitors
6
+
7
+ class WebMonitor < BaseMonitor
8
+
9
+ def run
10
+ str = %x[httperf]
11
+ str.split(/\s+/)[-1].to_f rescue 0.0
12
+ end
13
+
14
+ end
15
+
16
+ register_monitor :cpu
17
+ end
18
+ end
@@ -0,0 +1,72 @@
1
+ =begin rdoc
2
+ The connection to the messenger from poolparty, the client.
3
+
4
+ This class will setup a socket connection to the master's client
5
+ at the messenger_client_port
6
+ =end
7
+ module PoolParty
8
+ module Messenger
9
+ def with_socket(testing=false, &block)
10
+ host = testing ? "localhost" : (master.ip)
11
+ vputs "Pinging #{host} with the messenger"
12
+ socket = TCPSocket.open(host, Base.messenger_client_port)
13
+ out = yield(socket)
14
+ socket.close
15
+ out
16
+ end
17
+ # TODO: Fix cookie setting
18
+ def self.erl_command(hostname, extra="", min_ports=7000, max_ports=7050)
19
+ command_line_opts = "-pa #{append_dir}/ebin -kernel inet_dist_listen_min #{min_ports} inet_dist_listen_max #{max_ports} -sname #{hostname} -setcookie poolparty"
20
+
21
+ "erl #{command_line_opts} #{extra}"
22
+ end
23
+
24
+ def self.append_dir
25
+ ::File.expand_path(::File.join( ::File.dirname(__FILE__), "..", "..", "erlang/messenger" ))
26
+ end
27
+
28
+ def messenger_send!(msg="get_current_load cpu", testing=false)
29
+ with_socket(testing) do |sock|
30
+ sock.send(msg, 0)
31
+ @str = sock.recv(2000)
32
+ end
33
+ vputs "Received #{@str} from #{msg}"
34
+ @str
35
+ end
36
+
37
+ def messenger_cast!(msg="force_reconfig")
38
+ with_socket do |sock|
39
+ sock.send(msg, 0)
40
+ end
41
+ end
42
+
43
+ def self.messenger_send!(cmd="", testing=false)
44
+ command = Messenger.erl_command("client#{Time.now.to_i}", "-s pm_client -run pm_client #{cmd} -s erlang halt -noshell")
45
+ testing ? command : %x[#{command}]
46
+ end
47
+
48
+ # Helper methods
49
+ def self.startup_remote_messenger(hostname, testing=false)
50
+ # messenger_send!("")
51
+ # testing ? command : %x[#{command}]
52
+ end
53
+
54
+ end
55
+ end
56
+
57
+ module PoolParty
58
+ module Cloud
59
+ class Cloud
60
+ include PoolParty::Messenger
61
+
62
+ def get_current_nodes
63
+ nodes = messenger_send!("get_current_nodes")
64
+ nodes.split(" ").map {|a| a.split(/@/)[-1] }
65
+ end
66
+
67
+ def reconfigure_cloud!(msg="force_reconfig")
68
+ messenger_cast!(msg)
69
+ end
70
+ end
71
+ end
72
+ end
@@ -7,16 +7,19 @@ module PoolParty
7
7
  include PoolParty::Remote::Remoter
8
8
 
9
9
  def using(t)
10
+ @cloud = self
10
11
  if available_bases.include?(t.to_sym)
11
12
  unless using_remoter? || t.nil?
12
13
  self.class.send :attr_reader, :remote_base
14
+ self.class.send :attr_reader, :parent_cloud
13
15
  mod = "#{t}".preserved_module_constant
14
16
 
15
- mod.send :include, PoolParty::Remote::RemoterBase
17
+ # mod.send :include, PoolParty::Remote::RemoterBase
16
18
  self.class.send :include, mod
17
19
  self.extend mod
18
-
20
+
19
21
  @remote_base = "#{t}".preserved_module_constant
22
+ @parent_cloud = @cloud
20
23
  end
21
24
  else
22
25
  puts "Unknown remote base"