poolparty 0.2.18 → 0.2.69

Sign up to get free protection for your applications and to get access to all the features.
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