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
@@ -10,22 +10,28 @@ module PoolParty
10
10
  extend MethodMissingSugar
11
11
 
12
12
  default_options({
13
- :environment => "production",
14
13
  :user => "root", # This should change here
15
- :base_keypair_path => "~/.ec2",
14
+ :base_keypair_path => "#{ENV["HOME"]}/.ec2",
16
15
  :tmp_path => "/tmp/poolparty",
17
- :remote_storage_path => "/var/poolparty",
18
- :fileserver_base => "puppet:///files",
16
+ :remote_storage_path => "/var/poolparty",
17
+ :remote_gem_path => "/var/poolparty/gems",
18
+ :fileserver_base => "puppet://master/files",
19
19
  :base_config_directory => "/etc/poolparty",
20
20
  :template_directory => "templates",
21
21
  :template_path => "/var/lib/puppet/templates",
22
22
  :module_path => "/etc/puppet/modules/poolparty",
23
23
  :default_specfile_name => "pool.spec",
24
+ :default_project_specfile_name => "spec/pool.spec",
24
25
  :port => "80",
25
26
  :forwarding_port => "8080",
26
- :proxy_mode => "http",
27
+ :proxy_mode => "http",
28
+ :messenger_client_port => 7050,
27
29
  # EC2 Options
28
- :ami => "ami-1cd73375"
30
+ :ami => "ami-1cd73375",
31
+ :size => 'm1.small', # must be 'm1.small', 'm1.large', 'm1.xlarge', 'c1.medium', or 'c1.xlarge'
32
+ :security_group => ["default"],
33
+ # Options that should not be touched pretty much ever
34
+ :manifest_path => "/etc/puppet/manifests"
29
35
  })
30
36
 
31
37
  # Class methods
@@ -35,13 +41,16 @@ module PoolParty
35
41
  end
36
42
  # Get the access_key
37
43
  def access_key
38
- ENV["AWS_ACCESS_KEY_ID"] ? ENV["AWS_ACCESS_KEY_ID"] : load_keys_from_file[:access_key]
44
+ @access_key ||= ENV["AWS_ACCESS_KEY"] ? ENV["AWS_ACCESS_KEY"] : load_keys_from_file[:access_key]
39
45
  end
40
46
  def secret_access_key
41
- ENV["AWS_SECRET_ACCESS_ID"] ? ENV["AWS_SECRET_ACCESS_ID"] : load_keys_from_file[:secret_access_key]
47
+ @secret_access_key ||= ENV["AWS_SECRET_ACCESS_KEY"] ? ENV["AWS_SECRET_ACCESS_KEY"] : load_keys_from_file[:secret_access_key]
48
+ end
49
+ def read_keyfile
50
+ open(get_working_key_file_locations).read
42
51
  end
43
52
  def load_keys_from_file
44
- @keys ||= get_working_key_file_locations ? YAML::load( open(get_working_key_file_locations).read ) : {}
53
+ @keys ||= get_working_key_file_locations ? YAML::load( read_keyfile ) : {}
45
54
  end
46
55
  # Store the keys in a yaml format to give the master access
47
56
  # So that the master has access to the files
@@ -50,6 +59,13 @@ module PoolParty
50
59
  write_to_file( key_file_locations.first, YAML::dump({:access_key => access_key, :secret_access_key => secret_access_key}))
51
60
  end
52
61
  end
62
+ def store_keys_in_file_for(obj=nil)
63
+ if obj
64
+ @access_key = obj.access_key
65
+ @secret_access_key = obj.secret_access_key
66
+ end
67
+ store_keys_in_file
68
+ end
53
69
  def reset!
54
70
  @keys = nil
55
71
  end
@@ -68,24 +84,37 @@ module PoolParty
68
84
  "ppkeys"
69
85
  ]
70
86
  end
71
-
72
87
  def storage_directory
73
88
  [
74
89
  "/var/poolparty"
75
90
  ].select do |dir|
76
- dir if ::File.directory?(dir) && ::File.readable?(dir)
91
+ dir if viable_directory?(dir)
77
92
  end.first || ::File.join( "/tmp/poolparty")
78
93
  end
79
-
94
+ def logger_location
95
+ [
96
+ "/var/log/poolparty"
97
+ ].select do |dir|
98
+ dir if viable_directory?(dir)
99
+ end.first || ::File.join(Dir.pwd, "log")
100
+ end
101
+ # Assume the logs will be at the pool.log location within the
102
+ # logger_location set above
80
103
  def pool_logger_location
81
- File.join(Dir.pwd, "logs")
104
+ ::File.join(logger_location, "pool.log")
105
+ end
106
+ def custom_monitor_directories
107
+ [
108
+ "/var/poolparty/monitors",
109
+ "/etc/poolparty/monitors",
110
+ "#{Dir.pwd}/monitors"
111
+ ].select {|d| d if viable_directory?(d) }
82
112
  end
83
-
84
- # Array of allowed_commands that you can run on the remote nodes
85
- def allowed_commands
86
- @allowed_commands ||= open(::File.join( ::File.dirname(__FILE__), "..", "config", "allowed_commands.yml")).read.split(/\n/).map {|a| a.chomp }
113
+ # Only return true if the directory we are reading is both readable
114
+ # and exists
115
+ def viable_directory?(dir)
116
+ ::File.directory?(dir) && ::File.readable?(dir)
87
117
  end
88
-
89
118
  end
90
119
  end
91
120
  end
@@ -3,8 +3,8 @@ require File.dirname(__FILE__) + "/resource"
3
3
 
4
4
  module PoolParty
5
5
  module Cloud
6
- def cloud(name=:main, &block)
7
- clouds.has_key?(name) ? clouds[name] : (clouds[name] = Cloud.new(name, self, &block))
6
+ def cloud(name=:app, parent=self, &block)
7
+ clouds.has_key?(name) ? clouds[name] : (clouds[name] = Cloud.new(name, parent, &block))
8
8
  end
9
9
 
10
10
  def clouds
@@ -12,56 +12,69 @@ module PoolParty
12
12
  end
13
13
 
14
14
  def with_cloud(cl, opts={}, &block)
15
- cl.options.merge!(opts)
16
- cl.instance_eval &block if block
15
+ raise CloudNotFoundException.new("Cloud not found") unless cl
16
+ cl.options.merge!(opts) if opts
17
+ cl.run_in_context &block if block
17
18
  end
18
19
 
19
20
  class Cloud
20
- attr_reader :name, :templates
21
+ attr_reader :templates
21
22
  include PoolParty::PluginModel
22
23
  include PoolParty::Resources
23
24
  include PrettyPrinter
24
25
  include Configurable
25
26
  include CloudResourcer
26
27
  # extend CloudResourcer
27
- # Net methods
28
- include PoolParty::Remote::RemoterBase
28
+ # Net methods
29
29
  include Remote
30
+ include PoolParty::CloudDsl
30
31
 
31
32
  default_options({
32
33
  :minimum_instances => 2,
33
- :maximum_instances => 4,
34
+ :maximum_instances => 5,
35
+ :contract_when => "cpu < 0.65",
36
+ :expand_when => "cpu > 1.9",
34
37
  :access_key => Base.access_key,
35
38
  :secret_access_key => Base.secret_access_key,
36
39
  :ec2_dir => ENV["EC2_HOME"],
37
40
  :keypair => (ENV["KEYPAIR_NAME"].nil? || ENV["KEYPAIR_NAME"].empty?) ? nil : ENV["KEYPAIR_NAME"],
38
- :ami => 'ami-44bd592d',
39
- :polling_time => "30.seconds"
41
+ :ami => 'ami-44bd592d'
40
42
  })
41
43
 
42
- def initialize(name, parent, &block)
43
- @name = name
44
- # store_block(&block)
45
- set_parent(parent) if parent
46
- self.instance_eval &block if block
44
+ def initialize(name, pare=self, &block)
45
+ @cloud_name = name
46
+ @cloud_name.freeze
47
+
48
+ plugin_directory "#{::Dir.pwd}/plugins"
49
+
50
+ p = pare.is_a?(PoolParty::Pool::Pool) ? pare : nil
51
+ run_setup(p, &block)
52
+
53
+ # set_parent(parent) if parent && !@parent
54
+ # self.run_in_context parent, &block if block
55
+ setup_defaults
56
+ reset_remoter_base!
57
+ end
58
+
59
+ def setup_defaults
47
60
  # this can be overridden in the spec, but ec2 is the default
48
61
  self.using :ec2
62
+ generate_keypair unless has_keypair?
49
63
  end
50
-
51
- # Keypairs
52
- # If the parent (pool) doesn't have a keypair defined on it, then generate one based on the
53
- # pool_name and the cloud_name
54
- def keypair(*args)
55
- has_keypair? ? options[:keypair] : generate_keypair(*args)
64
+
65
+ def name
66
+ @cloud_name
56
67
  end
68
+
69
+ # Keypairs
57
70
  # Let's just make sure that the keypair exists on the options
58
71
  def has_keypair?
59
- options.has_key?(:keypair) && options[:keypair]
72
+ options.has_key?(:keypair) && options[:keypair] && !options[:keypair].empty?
60
73
  end
61
74
  # Generate a keypair based on the parent's name (if there is a parent)
62
75
  # and the cloud's name
63
76
  def generate_keypair(*args)
64
- options[:keypair] = args.length > 0 ? args[0] : "#{@parent && @parent.respond_to?(:name) ? @parent.name : ""}_#{@name}"
77
+ options[:keypair] = "#{parent && parent.is_a?(PoolParty::Pool::Pool) ? parent.name : "poolparty"}_#{name}" unless has_keypair?
65
78
  end
66
79
 
67
80
  # Prepare to send the new configuration to the instances
@@ -72,19 +85,29 @@ module PoolParty
72
85
  # Then, send the saved containing cloud instances to give the
73
86
  # remote master access to the cloud options that are required
74
87
  # for the master to run checks
75
- def prepare_to_configuration
88
+ def prepare_for_configuration
76
89
  # clear_base_directory
77
90
  make_base_directory
78
91
  copy_misc_templates
79
- Base.store_keys_in_file
80
- Script.save!
81
- copy_ssh_key # not my favorite...
92
+ copy_custom_monitors
93
+ store_keys_in_file
94
+ Script.save!(self)
95
+ # not my favorite...
96
+ copy_ssh_key
82
97
  end
83
98
 
99
+ # Copy the ssh keys to the storage directory in preparation for
100
+ # configuration
84
101
  def copy_ssh_key
85
102
  copy_file_to_storage_directory(full_keypair_path)
86
103
  end
87
104
 
105
+ # Store our keys for cloud access in a file
106
+ # that is specific to this cloud
107
+ def store_keys_in_file
108
+ Base.store_keys_in_file_for(self)
109
+ end
110
+
88
111
  # Build the new poolparty manifest
89
112
  # Wrapping all of these requirements into the one
90
113
  # poolparty class.
@@ -92,61 +115,92 @@ module PoolParty
92
115
  # TODO: Consider the benefits of moving all the manifest
93
116
  # classes to separate files and keeping the containing
94
117
  # references in the include
95
- def build_and_store_new_config_file
96
- @manifest = build_manifest
118
+ def build_and_store_new_config_file(force=false)
119
+ vputs "Building new manifest configuration file (forced: #{force})"
120
+ manifest = force ? rebuild_manifest : build_manifest
97
121
  config_file = ::File.join(Base.storage_directory, "poolparty.pp")
98
- ::File.open(config_file, "w+") do |file|
99
- file << "class poolparty {"
100
- file << @manifest
101
- file << "}"
122
+ ::File.open(config_file, "w") do |file|
123
+ file << manifest
102
124
  end
103
125
  end
104
126
 
105
127
  def copy_misc_templates
106
- ["fileserver.conf", "namespaceauth.conf"].each do |f|
128
+ ["namespaceauth.conf"].each do |f|
107
129
  copy_file_to_storage_directory(::File.join(::File.dirname(__FILE__), "..", "templates", f))
108
130
  end
109
131
  end
132
+
133
+ # If there is a directory named monitors in the same directory
134
+ # as the pool specification file is in,
135
+ # then create a monitors directory in the storage directory
136
+ # and mirror the two. When PoolParty "boots" up, it scans
137
+ # the monitors directory for any custom monitors
138
+ # that are in known locations, these are included
139
+ def copy_custom_monitors
140
+ unless Base.custom_monitor_directories.empty?
141
+ make_directory_in_storage_directory("monitors")
142
+ Dir["#{Base.custom_monitor_directories}/*.rb"].each do |f|
143
+ copy_file_to_storage_directory(f, "monitors")
144
+ end
145
+ end
146
+ end
110
147
 
111
148
  # Configuration files
112
149
  def build_manifest
150
+ vputs "Building manifest"
113
151
  @build_manifest ||= build_from_existing_file
114
152
  unless @build_manifest
115
- reset_resources!
153
+
116
154
  add_poolparty_base_requirements
117
155
 
118
- @build_manifest = returning Array.new do |str|
119
-
120
- str << resources_string_from_resources(resources)
121
-
122
- # Refactor this into the resources method
123
- # TODO
124
- services.each do |service|
125
- @cp = classpackage_with_self(service)
126
- str << @cp.to_string
127
- str << @cp.include_string
128
- end
129
-
130
- str << "# Custom functions"
131
- str << Resources::CustomResource.custom_functions_to_string
132
- end.join("\n")
156
+ @build_manifest = "class poolparty {\n #{build_short_manifest}\n}"
133
157
  end
134
158
  @build_manifest
135
159
  end
136
160
 
161
+ def rebuild_manifest
162
+ @build_manifest = nil
163
+ build_manifest
164
+ end
165
+
166
+ def build_short_manifest
167
+ returning Array.new do |str|
168
+
169
+ # Refactor this into the resources method
170
+ # TODO
171
+ services.each do |service|
172
+ service.options.merge!(:name => service.name)
173
+ classpackage_with_self(service)
174
+ end
175
+
176
+ options.merge!(:name => "user")
177
+ classpackage_with_self
178
+ # resources.each do |type, res|
179
+ # str << "# #{type.to_s.pluralize}"
180
+ # str << res.to_string
181
+ # end
182
+
183
+ global_classpackages.each do |cls|
184
+ str << cls.to_string
185
+ end
186
+
187
+ str << "# Custom functions"
188
+ str << Resources::CustomResource.custom_functions_to_string
189
+ end.join("\n")
190
+ end
191
+
137
192
  def build_from_existing_file
138
- if ::FileTest.file?("/etc/puppet/manifests/classes/poolparty.pp")
139
- open("/etc/puppet/manifests/classes/poolparty.pp").read
140
- else
141
- nil
142
- end
193
+ ::FileTest.file?("#{Base.manifest_path}/classes/poolparty.pp") ? open("#{Base.manifest_path}/classes/poolparty.pp").read : nil
143
194
  end
144
195
 
145
196
  # To allow the remote instances to do their job,
146
197
  # they need a few options to run, these are the required options
147
198
  # to be saved on the remote "master" machine
148
199
  def minimum_runnable_options
149
- [:keypair, :minimum_instances, :maximum_instances]
200
+ [
201
+ :keypair, :minimum_instances, :maximum_instances, :ami, :security_group,
202
+ :expand_when, :contract_when, :set_master_ip_to
203
+ ]
150
204
  end
151
205
 
152
206
  # Add all the poolparty requirements here
@@ -159,19 +213,21 @@ module PoolParty
159
213
  heartbeat
160
214
  haproxy
161
215
  ruby
162
- poolparty
216
+ poolparty_base_packages
217
+ realize_plugins!
163
218
  end
164
219
 
165
- def provisioning?
166
- @provisioning_in_progress == true
167
- end
168
-
169
- def provisioning_in_progress
170
- @provisioning_in_progress = true
220
+ def other_clouds
221
+ returning Array.new do |arr|
222
+ clouds.each do |name, cl|
223
+ arr << cl if name != self.name
224
+ end
225
+ end
171
226
  end
172
227
 
173
- def provisioning_complete
174
- @provisioning_in_progress = false
228
+ def reset!
229
+ reset_remoter_base!
230
+ @build_manifest = @describe_instances = nil
175
231
  end
176
232
 
177
233
  # Add to the services pool for the manifest listing
@@ -4,42 +4,26 @@ module PoolParty
4
4
  def available_custom_resources
5
5
  $available_custom_resources ||= []
6
6
  end
7
- module DefinableFact
8
- def define_fact(name, string="")
9
-
10
- end
11
- end
12
7
 
13
8
  module Resources
14
9
 
15
- def call_function(str, opts={}, &block)
16
- returning PoolParty::Resources::CallFunction.new(str, opts, &block) do |o|
17
- resource(:call_function) << o
18
- end
10
+ def call_custom_function(str, opts={}, parent=self, &block)
11
+ add_resource(:call_function, opts.merge({:str => str, :name => str.keyerize}), parent, &block)
19
12
  end
20
13
 
21
14
  # Resources for function call
22
15
  class CallFunction < Resource
23
- def initialize(str="", opts={}, parent=self, &block)
24
- @str = str
25
- # super(opts, parent, &block)
26
- end
27
16
  def to_string(pre="")
28
17
  returning Array.new do |arr|
29
- arr << "#{pre}#{@str}"
18
+ arr << "#{pre}#{str}"
30
19
  end.join("\n")
31
20
  end
32
21
  end
33
22
 
34
23
  class CustomResource < Resource
35
- def initialize(name=:custom_method, opts={}, parent=self, &block)
36
- @name = name
37
- super(opts, parent, &block)
38
- end
39
-
40
24
  def self.inherited(subclass)
41
25
  PoolParty::Resources.available_custom_resources << subclass
42
- super(subclass)
26
+ super
43
27
  end
44
28
 
45
29
  def to_string(pre="")
@@ -2,17 +2,12 @@
2
2
  A logging class to allow us to log to locations
3
3
  =end
4
4
  class Loggable
5
- def initialize
6
- Logging.init :debug, :info, :warn, :error, :fatal
7
-
5
+ def initialize
8
6
  self.class.loggers << file_logger
9
- file_logger.level = :warn
10
-
11
- self.class.loggers << stdout_logger
12
- stdout_logger.level = :info
7
+ file_logger.level = :info
13
8
  end
14
9
  def file_logger
15
- @file_logger ||= Logging.logger( ::File.join(Base.pool_logger_location, "pool_log.log"), logging_opts )
10
+ @file_logger ||= Logging.logger( Base.pool_logger_location, logging_opts )
16
11
  end
17
12
  def stdout_logger
18
13
  @stdout_logger ||= Logging.logger(STDOUT, logging_opts.merge({:pattern => "%m\n"}))
@@ -1,39 +1,34 @@
1
1
  module PoolParty
2
2
 
3
3
  module Plugin
4
-
4
+
5
5
  class Plugin
6
6
  include Configurable
7
7
  include CloudResourcer
8
8
  include Resources
9
9
 
10
- attr_accessor :parent
11
10
  class_inheritable_accessor :name
12
11
 
13
12
  default_options({})
14
13
 
15
- def initialize(parent=self, opts={}, &block)
16
- set_parent(parent)
17
- block ? instance_eval(&block) : enable
14
+ def initialize(p=self, opts={}, &block)
15
+ store_block &block
16
+ run_setup(p)
17
+ realize! unless block
18
+ end
19
+
20
+ def realize!(force=false)
21
+ force ? force_realize! : (@realized ? nil : force_realize!)
22
+ end
23
+
24
+ def force_realize!
25
+ run_setup(parent, false, &stored_block)
26
+ enable unless stored_block
18
27
  end
19
28
 
20
29
  # Overwrite this method
21
30
  def enable
22
31
  end
23
-
24
- # def method_missing(m, *args, &block)
25
- # if block_given?
26
- # (args[0].class == self.class) ? args[0].instance_eval(&block) : super
27
- # elsif parent && parent.respond_to?(m)
28
- # parent.send m, *args, &block
29
- # else
30
- # get_from_options(m, *args)
31
- # end
32
- # end
33
- #
34
- # def get_from_options(m, *args)
35
- # args.empty? ? options[m] : options[m] = args[0]
36
- # end
37
32
 
38
33
  end
39
34
 
@@ -14,30 +14,30 @@ module PoolParty
14
14
 
15
15
  class PluginModel
16
16
  attr_accessor :name, :klass
17
- attr_reader :parent
18
17
  include MethodMissingSugar
19
18
  include Configurable
20
19
  include PrettyPrinter
21
20
 
22
21
  def initialize(name,cld,&block)
23
22
  @name = name
24
- @parent = cld
23
+ # @parent = cld
25
24
  class_string_name = "#{name}"
26
25
 
27
26
  # Create the class to evaluate the plugin on the implemented call
28
27
  klass = class_string_name.class_constant(PoolParty::Plugin::Plugin)
29
- klass.extend PoolParty::Resources
30
- klass.send :include, PoolParty::Resources
28
+ mod = class_string_name.module_constant(&block)
31
29
 
32
- # Create the block inside the instantiated plugin
33
- klass.module_eval &block if block
30
+ klass.send :include, mod
34
31
 
35
32
  # Store the name of the class for pretty printing later
36
33
  klass.name = name
37
34
  # Add the plugin definition to the cloud as an instance method
38
- Cloud::Cloud.module_eval <<-EOE
35
+ PoolParty::Cloud::Cloud.class_eval <<-EOE
39
36
  def #{name}(parent=self, &block)
40
- @#{class_string_name.downcase} ||= #{class_string_name.class_constant}.new(parent, &block)
37
+ @pa = parent
38
+ @#{class_string_name.downcase} ||= returning #{class_string_name.class_constant}.new(parent, &block) do |pl|
39
+ @pa.plugin_store << pl
40
+ end
41
41
  end
42
42
  EOE
43
43
  end
@@ -1,7 +1,7 @@
1
1
  module PoolParty
2
2
  module Pool
3
3
 
4
- def pool(name=:main, &block)
4
+ def pool(name=:app, &block)
5
5
  pools.has_key?(name) ? pools[name] : (pools[name] = Pool.new(name, &block))
6
6
  end
7
7
 
@@ -9,18 +9,18 @@ module PoolParty
9
9
  $pools ||= {}
10
10
  end
11
11
 
12
- def with_pool(pool, opts={}, &block)
13
- pool.options.merge!(opts)
14
- pool.instance_eval &block if block
12
+ def with_pool(pl, opts={}, &block)
13
+ raise CloudNotFoundException.new("Pool not found") unless pl
14
+ pl.options.merge!(opts) if pl.options
15
+ pl.run_in_context &block if block
15
16
  end
16
17
 
17
18
  def reset!
18
- $pools = $clouds = $plugins = nil
19
+ $pools = $clouds = $plugins = @describe_instances = nil
19
20
  end
20
21
 
21
22
  class Pool
22
- attr_accessor :name
23
- include PoolParty::Cloud
23
+ # include PoolParty::Cloud
24
24
  include MethodMissingSugar
25
25
  # include PluginModel
26
26
  include Configurable
@@ -34,17 +34,34 @@ module PoolParty
34
34
  })
35
35
 
36
36
  def initialize(name,&block)
37
- @name = name
38
- instance_eval &block if block
37
+ setup_defaults
38
+
39
+ @pool_name = name
40
+ @pool_name.freeze
41
+ # run_in_context &block if block
42
+ run_setup(self, &block)
43
+ end
44
+
45
+ def name
46
+ @pool_name
39
47
  end
40
48
 
41
- def plugin_directory(*args)
42
- args.each {|arg| Dir["#{arg}/*/*.rb"].each {|f| require f }}
49
+ def setup_defaults
50
+ plugin_directory "#{::File.dirname(pool_specfile ? pool_specfile : Dir.pwd)}/plugins"
43
51
  end
44
52
 
45
53
  # This is where the entire process starts
46
54
  def inflate
47
55
  end
56
+
57
+ def pool_clouds
58
+ returning Array.new do |arr|
59
+ clouds.each do |name, cl|
60
+ arr << cl if cl.parent.name == self.name
61
+ end
62
+ end
63
+ end
64
+
48
65
  end
49
66
 
50
67
  # Helpers