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
@@ -2,54 +2,55 @@ module PoolParty
2
2
  class Base
3
3
  plugin :heartbeat do
4
4
 
5
+ # TODO: Reimplement heartbeat
5
6
  def enable
6
- execute_if("$hostname", "master") do
7
- has_package(:name => "heartbeat-2", :ensure => "installed") do
8
- # These can also be passed in via hash
9
- has_remotefile(:name => "/etc/ha.d/ha.cf") do
10
- mode 444
11
- notify 'Service["heartbeat"]'
12
- template File.join(File.dirname(__FILE__), "..", "templates/ha.cf")
13
- end
14
-
15
- has_remotefile(:name => "/etc/ha.d/authkeys") do
16
- mode 400
17
- notify 'Service["heartbeat"]'
18
- template File.join(File.dirname(__FILE__), "..", "templates/authkeys")
19
- end
20
-
21
- has_remotefile(:name => "/etc/ha.d/cib.xml") do
22
- mode 444
23
- notify 'Exec["heartbeat-update-cib"]'
24
- template File.join(File.dirname(__FILE__), "..", "templates/cib.xml")
25
- end
26
-
27
- has_service(:name => "heartbeat", :hasstatus => true)
28
- end
29
-
30
- has_exec(:name => "heartbeat-update-cib", :command => "/usr/sbin/cibadmin -R -x /etc/ha.d/cib.xml", :refreshonly => true)
31
-
32
- if @parent.provisioning?
33
- variable(:name => "ha_nodenames", :value => "#{list_of_running_instances.map{|a| "#{a.send :name}" }.join("\t")}")
34
- variable(:name => "ha_node_ips", :value => "#{list_of_running_instances.map{|a| "#{a.send :ip}" }.join("\t")}")
35
- else
36
- # variables for the templates
37
- variable(:name => "ha_nodenames", :value => "generate('/usr/bin/env', '/var/lib/gems/1.8/bin/server-list-active', '-c', 'name')")
38
- variable(:name => "ha_node_ips", :value => "generate('/usr/bin/env', '/var/lib/gems/1.8/bin/server-list-active', '-c', 'ip')")
39
- end
40
-
41
- has_variable({:name => "ha_timeout", :value => (self.respond_to?(:timeout) ? timeout : "5s")})
42
- has_variable({:name => "ha_port", :value => (self.respond_to?(:port) ? port : Base.port)})
43
-
44
- end
45
-
46
- execute_if("$hostname", "master") do
47
- if list_of_node_names.size > 1
48
- has_exec(:name => "update pem for heartbeat", :refreshonly => true) do
49
- command "scp /etc/puppet/ssl/ca/ca_crl.pem #{user || Base.user}@#{list_of_node_ips[1]}:/etc/puppet/ssl/ca"
50
- end
51
- end
52
- end
7
+ # execute_if("$hostname", "master") do
8
+ # has_package(:name => "heartbeat-2", :ensure => "installed") do
9
+ # # These can also be passed in via hash
10
+ # has_service(:name => "heartbeat", :hasstatus => true)
11
+ #
12
+ # has_remotefile(:name => "/etc/ha.d/ha.cf") do
13
+ # mode 444
14
+ # notify service(:name => "heartbeat")
15
+ # template File.join(File.dirname(__FILE__), "..", "templates/ha.cf")
16
+ # end
17
+ #
18
+ # has_exec(:name => "heartbeat-update-cib", :command => "/usr/sbin/cibadmin -R -x /etc/ha.d/cib.xml", :refreshonly => true)
19
+ #
20
+ # has_remotefile(:name => "/etc/ha.d/authkeys") do
21
+ # mode 400
22
+ # notify service(:name => "heartbeat")
23
+ # template File.join(File.dirname(__FILE__), "..", "templates/authkeys")
24
+ # end
25
+ #
26
+ # has_remotefile(:name => "/etc/ha.d/cib.xml") do
27
+ # mode 444
28
+ # notify exec(:name => "heartbeat-update-cib")
29
+ # template File.join(File.dirname(__FILE__), "..", "templates/cib.xml")
30
+ # end
31
+ # end
32
+ #
33
+ # if @parent.provisioning?
34
+ # variable(:name => "ha_nodenames", :value => "#{list_of_running_instances.map{|a| "#{a.send :name}" }.join("\t")}")
35
+ # variable(:name => "ha_node_ips", :value => "#{list_of_running_instances.map{|a| "#{a.send :ip}" }.join("\t")}")
36
+ # else
37
+ # # variables for the templates
38
+ # variable(:name => "ha_nodenames", :value => "generate('/usr/bin/env', '/var/lib/gems/1.8/bin/server-list-active', '-c', 'name')")
39
+ # variable(:name => "ha_node_ips", :value => "generate('/usr/bin/env', '/var/lib/gems/1.8/bin/server-list-active', '-c', 'ip')")
40
+ # end
41
+ #
42
+ # has_variable({:name => "ha_timeout", :value => (self.respond_to?(:timeout) ? timeout : "5s")})
43
+ # has_variable({:name => "ha_port", :value => (self.respond_to?(:port) ? port : Base.port)})
44
+ #
45
+ # end
46
+ #
47
+ # execute_if("$hostname", "master") do
48
+ # if list_of_node_names.size > 1
49
+ # has_exec(:name => "update pem for heartbeat", :refreshonly => true) do
50
+ # command "scp /etc/puppet/ssl/ca/ca_crl.pem #{user || Base.user}@#{list_of_node_ips[1]}:/etc/puppet/ssl/ca"
51
+ # end
52
+ # end
53
+ # end
53
54
 
54
55
  end
55
56
  end
@@ -1,56 +1,108 @@
1
1
  module PoolParty
2
2
  class Base
3
- plugin :poolparty do
3
+ plugin :poolparty_base_packages do
4
4
 
5
- def enable
5
+ def enable
6
+ # Build hostsfile
7
+
6
8
  has_package(:name => "erlang")
7
9
  has_package(:name => "erlang-dev")
8
10
  has_package(:name => "erlang-src")
11
+ # has_package(:name => "yaws")
9
12
 
10
13
  has_package(:name => "rubygems") do
11
14
  # These should be installed automagically by poolparty, but just in case
12
- # TODO: Fix the requires method with a helper
13
- has_gempackage(:name => "logging")
14
- has_gempackage(:name => "xml-simple") do
15
- has_gempackage(:name => "grempe-amazon-ec2", :source => "http://gems.github.com")
16
- end
17
- has_gempackage(:name => "rake")
15
+ # TODO: Fix the requires method with a helper
16
+ has_gempackage(:name => "flexmock", :download_url => "http://rubyforge.org/frs/download.php/42580/flexmock-0.8.3.gem")
17
+ has_gempackage(:name => "lockfile", :download_url => "http://rubyforge.org/frs/download.php/18698/lockfile-1.4.3.gem")
18
+ has_gempackage(:name => "logging", :download_url => "http://rubyforge.org/frs/download.php/44731/logging-0.9.4.gem", :requires => [get_gempackage("flexmock"), get_gempackage("lockfile")])
19
+
20
+ has_gempackage(:name => "rubyforge", :download_url => "http://rubyforge.org/frs/download.php/45546/rubyforge-1.0.1.gem")
21
+ has_gempackage(:name => "hoe", :download_url => "http://rubyforge.org/frs/download.php/45685/hoe-1.8.2.gem", :version => "1.8", :requires => get_gempackage("rubyforge"))
22
+ has_gempackage(:name => "ZenTest", :download_url => "http://rubyforge.org/frs/download.php/45581/ZenTest-3.11.0.gem", :requires => [get_gempackage("hoe"), get_gempackage("rubyforge")])
18
23
 
19
- has_gempackage(:name => "hoe") do
20
- has_gempackage(:name => "open4")
24
+ has_gempackage(:name => "rake", :download_url => "http://rubyforge.org/frs/download.php/43954/rake-0.8.3.gem")
25
+ has_gempackage(:name => "xml-simple", :download_url => "http://rubyforge.org/frs/download.php/18366/xml-simple-1.0.11.gem")
26
+ has_gempackage(:name => "amazon-ec2", :download_url => "http://rubyforge.org/frs/download.php/43666/amazon-ec2-0.3.1.gem", :requires => get_gempackage("xml-simple"))
27
+
28
+ has_gempackage(:name => "sexp_processor", :download_url => "http://rubyforge.org/frs/download.php/45589/sexp_processor-3.0.0.gem")
29
+ has_gempackage(:name => "ParseTree", :download_url => "http://rubyforge.org/frs/download.php/45600/ParseTree-3.0.1.gem", :requires => [get_gempackage("sexp_processor"), get_gempackage("ZenTest")])
21
30
 
22
- has_gempackage(:name => "ParseTree", :version => "2.2.0") do
23
- has_gempackage(:name => "ruby2ruby")
24
- has_gempackage(:name => "activesupport") do
25
- has_gempackage(:name => "auser-poolparty", :source => "http://gems.github.com") do
26
- has_exec(:name => "build_messenger", :command => ". /etc/profile && server-build-messenger")
27
- has_exec(:name => "start_node", :command => ". /etc/profile && server-start-node", :requires => 'Exec["build_messenger"]')
28
- end
29
- end
30
- has_gempackage(:name => "RubyInline")
31
- end
32
- end
31
+ has_gempackage(:name => "ruby2ruby", :download_url => "http://rubyforge.org/frs/download.php/45587/ruby2ruby-1.2.0.gem", :requires => get_gempackage("ParseTree"))
33
32
 
34
- end
35
-
36
- # Build hostsfile
37
- # TODO: COME BACK AND CLEAN THIS UP
38
- (self.respond_to?(:list_of_running_instances) ? self : parent).list_of_running_instances.each do |ri|
39
- has_host({:name => "#{ri.name}", :ip => ri.ip })
33
+ has_gempackage(:name => "activesupport", :download_url => "http://rubyforge.org/frs/download.php/45627/activesupport-2.1.2.gem")
34
+
35
+ has_gempackage(:name => "RubyInline", :download_url => "http://rubyforge.org/frs/download.php/45683/RubyInline-3.8.1.gem")
36
+
37
+ has_gempackage(:name => "poolparty", :download_url => "http://github.com/auser/poolparty/tree/master%2Fpkg%2Fpoolparty.gem?raw=true", :requires => [get_gempackage("ruby2ruby"), get_gempackage("RubyInline"), get_gempackage("ParseTree")])
38
+
39
+ # , :ifnot => "/bin/ps aux | /bin/grep -q pm_node"
40
+ # has_runit_service("pm_node", "pm_node", File.join(File.dirname(__FILE__), "..", "templates/messenger/node/"))
40
41
  end
41
42
 
42
- # Custom run puppet to minimize footprint
43
- # TODO: Update the offsetted times
44
- has_cron(:name => "puppetd runner", :user => Base.user, :minute => [0,15,30,45]) do
45
- command((self.respond_to?(:master) ? self : parent).master.puppet_runner_command)
43
+ has_exec(:name => "build_messenger", :command => ". /etc/profile && server-build-messenger")
44
+ has_exec(:name => "start_node", :command => ". /etc/profile && server-start-node")
45
+
46
+ # execute_on_node do
47
+ has_remotefile(:name => "/usr/bin/puppetrunner") do
48
+ mode 744
49
+ template File.join(File.dirname(__FILE__), "..", "templates/puppetrunner")
46
50
  end
47
51
 
48
- # These are all requirements on the master
49
- execute_if("$hostname", "master") do
50
- has_cron({:command => ". /etc/profile && which cloud-maintain | /bin/sh", :minute => "*/3"})
51
- # TODO: Update this so it only runs when needed
52
- has_exec(:name => ". /etc/profile && server-start-master")
52
+ execute_on_node do
53
+ has_cron(:name => "node puppetd runner", :user => Base.user, :minute => "*/5") do
54
+ requires get_gempackage("poolparty")
55
+ command "/usr/bin/puppetrunner"
56
+ end
53
57
  end
58
+
59
+ # end
60
+
61
+ # Cloud panel setup
62
+
63
+ # has_directory(:name => "/var/www/cloudpanel")
64
+
65
+ # has_file(:name => "/etc/yaws/conf.d/localhost.conf") do
66
+ # template File.join(File.dirname(__FILE__), "..", "templates/yaws.conf")
67
+ # end
68
+
69
+ # Custom run puppet to minimize footprint
70
+ # TODO: Update the offsetted times
71
+ execute_on_master do
72
+ has_exec(:name => "update_hosts", :command => ". /etc/profile && server-update-hosts -n #{cloud.name}")
73
+
74
+ has_cron(:name => "master puppetd runner", :user => Base.user, :minute => "*/15") do
75
+ requires get_gempackage("poolparty")
76
+ command(PoolParty::Remote::RemoteInstance.puppet_runner_command)
77
+ end
78
+ has_cron(:name => "Load handler", :user => Base.user, :minute => "*/4") do
79
+ requires get_gempackage("poolparty")
80
+ command(". /etc/profile && cloud-handle-load -n #{cloud.name}")
81
+ end
82
+ has_cron(:name => "provisioning ensurer", :user => Base.user, :minute => "*/2") do
83
+ requires get_gempackage("poolparty")
84
+ command ". /etc/profile && cloud-ensure-provisioning -n #{cloud.name}"
85
+ end
86
+ # has_runit_service("client_server", "pm_client", File.join(File.dirname(__FILE__), "..", "templates/messenger/client/"))
87
+ # has_runit_service("master_server", "pm_master", File.join(File.dirname(__FILE__), "..", "templates/messenger/master/"))
88
+ # TODO: Update this so it only runs when needed
89
+ # has_customservice(:name => "start master server", :pattern => "/pm_master/", :bin => ". /etc/profile && server-start-master")
90
+ # has_customservice(:name => "start client server", :pattern => "/client_service/", :bin => ". /etc/profile && server-start-client")
91
+ has_exec(:name => "start master messenger", :command => ". /etc/profile && server-start-master") #, :ifnot => "/bin/ps aux | /bin/grep -q pm_master"
92
+ has_exec(:name => "start client server", :command => ". /etc/profile && server-start-client") #, :ifnot => "/bin/ps aux | /bin/grep -q client_server"
93
+
94
+ has_cron({:name => "maintain script", :command => ". /etc/profile && cloud-maintain -n #{cloud.name}", :minute => "*/3", :requires => [get_gempackage("poolparty"), get_cron("puppetd runner"), get_cron("Load handler"), get_service("haproxy")]})
95
+
96
+ has_remotefile(:name => "/usr/bin/puppetcleaner") do
97
+ mode 744
98
+ template File.join(File.dirname(__FILE__), "..", "templates/puppetcleaner")
99
+ end
100
+
101
+ has_remotefile(:name => "/usr/bin/puppetrerun") do
102
+ mode 744
103
+ template File.join(File.dirname(__FILE__), "..", "templates/puppetrerun")
104
+ end
105
+ end
54
106
  # has_host(:name => "puppet", :ip => (self.respond_to?(:master) ? self : parent).master.ip)
55
107
  end
56
108
 
@@ -0,0 +1,21 @@
1
+ =begin rdoc
2
+ Runit beginning
3
+ NOT IMPLEMENTED YET
4
+ =end
5
+ module PoolParty
6
+ class Base
7
+ plugin :runit do
8
+
9
+ def enable
10
+ unless enabled
11
+ has_file(:name => "inittab", :path => "/etc/inittab", :mode => 0644, :owner => "root", :group => "root")
12
+ has_package(:name => "runit", :ensures => "latest", :requires => get_file("inittab"))
13
+ has_exec(:name => "/sbin/start runsvdir", :cwd => "/var/service")
14
+ # has_remotefile(:name => "/etc/event.d/runsvdir", :notify => get_exec("/sbin/start runsvdir"))
15
+ enabled true
16
+ end
17
+ end
18
+
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,5 @@
1
+ Your cloud is launching
2
+ -----------------------
3
+ Your master's ip address is: :master_ip
4
+
5
+ Depending on how your cloud is setup, this process may take a while.
@@ -22,6 +22,9 @@ class Array
22
22
  map {|a| a.name == str ? a : nil }.reject {|a| a.nil? }
23
23
  end
24
24
  def to_option_string(ns=[])
25
- "[ #{map {|e| e.to_option_string }.join(", ")} ]"
25
+ "[ #{map {|e| e.to_option_string }.reject {|a| a.nil? || a.empty? }.join(", ")} ]"
26
+ end
27
+ def respec_string(ns=[])
28
+ "'#{map {|e| e.to_option_string }.join("', '")}'"
26
29
  end
27
30
  end
@@ -0,0 +1,2 @@
1
+ class Class
2
+ end
@@ -2,8 +2,9 @@
2
2
  Exception overloads
3
3
  =end
4
4
  class Exception
5
+ alias nice_message to_str
5
6
  # Gives us a nice_message for exceptions
6
7
  def nice_message(padding="")
7
- "#{padding}#{message}\n#{padding}" + backtrace.join("\n#{padding}")
8
+ "#{padding}#{message}\n#{padding}"# + backtrace.join("\n#{padding}")
8
9
  end
9
10
  end
@@ -16,13 +16,13 @@ class Hash
16
16
  returning Hash.new do |h|
17
17
  h.merge!(self)
18
18
  other_hash.each do |k,v|
19
- h[k] = has_key?(k) ? [self[k], v].flatten : v
19
+ h[k] = has_key?(k) ? [self[k], v].flatten.uniq : v
20
20
  end
21
21
  end
22
22
  end
23
23
  def append!(other_hash)
24
24
  other_hash.each do |k,v|
25
- self[k] = has_key?(k) ? [self[k], v].flatten : v
25
+ self[k] = has_key?(k) ? [self[k], v].flatten.uniq : v
26
26
  end
27
27
  self
28
28
  end
@@ -10,10 +10,10 @@ module Kernel
10
10
  block.in_context(klass_or_obj).call
11
11
  end
12
12
  def load_p(dir)
13
- Dir["#{dir}/*.rb"].each do |file|
13
+ Dir["#{dir}/*.rb"].sort.each do |file|
14
14
  require "#{file}" if ::FileTest.file?(file)
15
15
  end
16
- Dir["#{dir}/*"].each do |dir|
16
+ Dir["#{dir}/*"].sort.each do |dir|
17
17
  load_p(dir) if ::FileTest.directory?(dir)
18
18
  end
19
19
  end
@@ -33,5 +33,5 @@ module Kernel
33
33
  STDOUT.flush
34
34
  STDOUT.reopen(old_stdout)
35
35
  end
36
- end
36
+ end
37
37
  end
@@ -0,0 +1,15 @@
1
+ class Object
2
+ # The hidden singleton lurks behind everyone
3
+ def metaclass; class << self; self; end; end
4
+ def meta_eval &blk; metaclass.instance_eval &blk; end
5
+
6
+ # Adds methods to a metaclass
7
+ def meta_def name, &blk
8
+ meta_eval { define_method name, &blk }
9
+ end
10
+
11
+ # Defines an instance method within a class
12
+ def class_def name, &blk
13
+ class_eval { define_method name, &blk }
14
+ end
15
+ end
@@ -26,6 +26,14 @@ class Object
26
26
  block.in_context(self).call
27
27
  self
28
28
  end
29
+ def send_if_method(v, *args)
30
+ if (v.nil? || v.to_s.empty? || v.is_a?(Array) || v.is_a?(Integer))
31
+ v
32
+ else
33
+ vs = v.to_s.to_sym
34
+ respond_to?(vs) ? self.send(vs, *args) : v rescue v
35
+ end
36
+ end
29
37
  def to_option_string
30
38
  case self.class
31
39
  when String
@@ -36,8 +44,18 @@ class Object
36
44
  "#{self}"
37
45
  end
38
46
  end
47
+ def respec_string
48
+ case self.class
49
+ when String
50
+ self.to_option_string
51
+ when Array
52
+ self.map {|a| "#{a.respec_string}" }.join(" ")
53
+ else
54
+ "'#{self}'"
55
+ end
56
+ end
39
57
  def block_instance_eval(*args, &block)
40
- return instance_eval(*args,&block) unless block_given? && !block.arity.zero?
58
+ return instance_eval(*args,&block) unless block && !block.arity.zero?
41
59
  old_method = (self.class.instance_method(:__) rescue nil)
42
60
  self.class.send(:define_method, :__, &block)
43
61
  block_method = self.class.instance_method(:__)
@@ -49,6 +67,28 @@ class Object
49
67
  block_method.bind(self).call(*args)
50
68
  end
51
69
  def meta_def name, &blk
52
- (class << self; self; end).instance_eval { define_method name, &blk }
70
+ meta_eval { define_method name, &blk }
71
+ end
72
+ def meta_undef name
73
+ meta_eval { remove_method name }
74
+ end
75
+ def run_in_context(context=self, &block)
76
+ name="temp_#{self.class}_#{respond_to?(:parent) ? parent.to_s : Time.now.to_i}".to_sym
77
+ meta_def name, &block
78
+ self.send name, context
79
+ # self.instance_eval &block if block
80
+ meta_undef name rescue ""
81
+ end
82
+ def vputs(m="", o=self)
83
+ puts m if o.verbose
84
+ end
85
+ def dputs(m="", o=self)
86
+ vputs(">#{::File.basename(__FILE__)} (#{__LINE__}) #{m}", o)
87
+ end
88
+ def vprint(m="", o=self)
89
+ print m if o.verbose
90
+ end
91
+ def unix_hide_string
92
+ "2>&1 > /dev/null"
53
93
  end
54
94
  end
@@ -22,10 +22,25 @@ class String
22
22
  self.strip.split(/\n/).join(" && ")
23
23
  end
24
24
  def top_level_class
25
- self.split("::")[-1].downcase rescue self
25
+ self.split("::")[-1].underscore.downcase rescue self
26
26
  end
27
27
  def sanitize
28
- self.gsub(/[\.\/]*/, '')
28
+ self.gsub(/[ \.\/\-]*/, '')
29
+ end
30
+ def keyerize
31
+ signed_short = 0x7FFFFFFF
32
+ len = self.sanitize.length
33
+ hash = 0
34
+ len.times{ |i|
35
+ hash = self[i] + ( hash << 6 ) + ( hash << 16 ) - hash
36
+ }
37
+ hash & signed_short
38
+ end
39
+ def dir_safe
40
+ self.downcase.gsub(/[ ]/, '_')
41
+ end
42
+ def safe_quote
43
+ self.gsub(/[']/, '\\\\\'')
29
44
  end
30
45
  def nice_runnable(quite=true)
31
46
  self.split(/ && /).join("\n")
@@ -45,7 +60,7 @@ class String
45
60
  # Refactor this guy to get the class if the class is defined, and not always create a new one
46
61
  # although, it doesn't really matter as ruby will just reopen the class
47
62
  def class_constant(superclass=nil, opts={}, &block)
48
- symc = ((opts && opts[:preserve]) ? ("#{self.classify}Classs") : "PoolParty#{self.classify}Classs").classify
63
+ symc = ((opts && opts[:preserve]) ? ("#{self.camelcase}Classs") : "PoolParty#{self.camelcase}Classs").classify
49
64
 
50
65
  kla=<<-EOE
51
66
  class #{symc} #{"< #{superclass}" if superclass}
@@ -59,14 +74,14 @@ class String
59
74
  klass
60
75
  end
61
76
 
62
- def module_constant(&block)
63
- symc = "#{self}_Module".classify
77
+ def module_constant(append="", &block)
78
+ symc = "#{self}_Module#{append}".camelcase
64
79
  mod = Object.const_defined?(symc) ? Object.const_get(symc.to_sym) : Module.new(&block)
65
80
  Object.const_set(symc, mod) unless Object.const_defined?(symc)
66
81
  symc.to_s.constantize
67
82
  end
68
83
  def preserved_module_constant(ext="", from="PoolParty::", &block)
69
- symc = "#{self}#{ext}".classify
84
+ symc = "#{self}#{ext}".camelcase
70
85
  mod = Kernel.const_defined?(symc) ? Kernel.const_get(symc.to_sym) : Module.new(&block)
71
86
  Kernel.const_set(symc, mod) unless Kernel.const_defined?(symc)
72
87
  symc.to_s.constantize
@@ -1,8 +1,17 @@
1
1
  class Symbol
2
+ # def >(num);"#{self} > #{num}";end
3
+ # def <(num);"#{self} < #{num}";end
4
+ # def >=(num);"#{self} >= #{num}";end
5
+ # def <=(num);"#{self} <= #{num}";end
6
+ # def ==(num);"#{self} > #{num}";end
7
+
2
8
  def to_string(pre="")
3
9
  "#{pre}#{self.to_s}"
4
10
  end
5
11
  def sanitize
6
12
  self.to_s.sanitize
7
13
  end
14
+ def <=>(b)
15
+ "#{self}" <=> "#{b}"
16
+ end
8
17
  end
@@ -21,18 +21,15 @@ module PoolParty
21
21
  returning Array.new do |output|
22
22
  unless cancelled?
23
23
  output << @prestring || ""
24
-
24
+
25
25
  if resources && !resources.empty?
26
- @cp = classpackage_with_self(self)
27
- output << @cp.to_string
28
- output << "include #{@cp.name.sanitize}"
26
+ output << resources_string_from_resources(resources, pre)
29
27
  end
30
28
 
31
29
  unless virtual_resource?
32
- output << "#{pre}#{class_type_name.downcase} {"
33
- output << "#{pre}\"#{self.key}\":"
30
+ output << "#{pre}#{class_type_name.downcase} { #{pre}\"#{self.key}\":"
34
31
  output << opts.flush_out("#{pre*2}").join(",\n")
35
- output << "#{pre}}"
32
+ output << "#{pre}}"
36
33
  end
37
34
 
38
35
  output << @poststring || ""
@@ -40,6 +37,22 @@ module PoolParty
40
37
  end.join("\n")
41
38
  end
42
39
 
40
+ def resources_string_from_resources(res, pre="\t")
41
+ @variables = res.extract! {|name,resource| name == :variable}
42
+ returning Array.new do |str|
43
+ unless @variables.empty?
44
+ str << "\n# Variables"
45
+ @variables.each do |name, variable|
46
+ str << variable.to_string("#{pre}")
47
+ end
48
+ end
49
+
50
+ res.reject do |type, resource|
51
+ str << resource.to_string("#{pre*2}")
52
+ end
53
+ end.join("\n")
54
+ end
55
+
43
56
  def to_s
44
57
  "#{class_type_name.capitalize}['#{key}']"
45
58
  end
@@ -0,0 +1,7 @@
1
+ class CloudNotFoundException < Exception
2
+ attr_reader :message
3
+
4
+ def initialize(msg="Cloud not found")
5
+ @message = "Cloud not found: #{msg}"
6
+ end
7
+ end
@@ -0,0 +1,7 @@
1
+ class LoadRulesException < Exception
2
+ attr_reader :message
3
+
4
+ def initialize(msg="It looks like your rules are malformed")
5
+ @message = "Load Malformed rule: #{msg}"
6
+ end
7
+ end
@@ -0,0 +1,10 @@
1
+ class MasterException < Exception
2
+ EXCEPTION_MESSAGES = {
3
+ :no_ip => "Master does not have an ip or has not been launched"
4
+ }
5
+ attr_reader :message
6
+
7
+ def initialize(type=:no_ip, note="")
8
+ @message = "Master Exception: #{EXCEPTION_MESSAGES[type]} #{note}"
9
+ end
10
+ end
@@ -1,5 +1,22 @@
1
1
  require "ftools"
2
2
  module PoolParty
3
+
4
+ # Load a file that contains a pool into memory
5
+ def load_pool(filename)
6
+
7
+ unless filename && ::File.readable?(filename)
8
+ puts "Please specify your cloud with -s, move it to ./pool.spec or in your POOL_SPEC environment variable"
9
+ exit(1)
10
+ else
11
+ $pool_specfile = filename
12
+ PoolParty::Script.inflate(open(filename).read, filename)
13
+ end
14
+ end
15
+
16
+ def pool_specfile
17
+ $pool_specfile
18
+ end
19
+
3
20
  module Binary
4
21
 
5
22
  class << self
@@ -13,17 +30,33 @@ module PoolParty
13
30
  def binary_directory
14
31
  "#{::File.dirname(__FILE__)}/../../../bin"
15
32
  end
33
+ # These are the locations the spec file can be before the cloud
34
+ # aborts because it cannot load the cloud
16
35
  def get_existing_spec_location
17
36
  [
18
- "#{Base.base_config_directory}/#{Base.default_specfile_name}",
19
37
  "#{Base.remote_storage_path}/#{Base.default_specfile_name}",
20
- ENV["POOL_SPEC"],
21
38
  "#{Base.default_specfile_name}",
22
- "#{Base.storage_directory}/#{Base.default_specfile_name}",
39
+ ENV["POOL_SPEC"],
40
+ "#{Base.storage_directory}/#{Base.default_specfile_name}",
41
+ "#{Base.default_project_specfile_name}"
23
42
  ].reject {|a| a.nil?}.reject do |f|
24
- f unless ::File.file?(f)
43
+ f unless ::File.readable?(f)
25
44
  end.first
26
45
  end
46
+ # Daemonize the process
47
+ def daemonize(&block)
48
+ vputs "Daemonizing..."
49
+ trap("CHLD") {Process.wait(-1, Process::WNOHANG)}
50
+ fork do
51
+ Signal.trap('HUP', 'IGNORE') # Don't die upon logout
52
+ File.open("/dev/null", "r+") do |devnull|
53
+ $stdout.reopen(devnull)
54
+ $stderr.reopen(devnull)
55
+ $stdin.reopen(devnull) unless @use_stdin
56
+ end
57
+ block.call if block
58
+ end
59
+ end
27
60
 
28
61
  end
29
62