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
@@ -8,22 +8,89 @@
8
8
  -module(pm_node).
9
9
  -behaviour(gen_server).
10
10
 
11
+ -include_lib("../include/defines.hrl").
12
+
11
13
  %% API
12
- -export([start_link/0]).
14
+ -export([start_link/1, start_link/0]).
13
15
 
14
16
  %% gen_server callbacks
15
17
  -export([init/1, handle_call/3, handle_cast/2, handle_info/2,
16
18
  terminate/2, code_change/3]).
17
- -record(state, {}).
19
+
20
+ -record(state, {
21
+ monitors = {}, % Tuple of monitors
22
+ stored_loads = ?DICT:new() % Dictionary of latest loads
23
+ }).
18
24
  -define(SERVER, ?MODULE).
19
25
 
20
26
  % Client function definitions
21
27
  -export ([stop/0]).
22
- -export ([get_load_for_type/1, fire_cmd/1, run_reconfig/0]).
23
-
28
+ -export ([get_current_load_for_type/1, run_cmd/1, fire_cmd/1]).
29
+ -export ([run_reconfig/0, local_update/1, still_here/0, print_monitors/0]).
30
+ -export ([server_location/0]).
24
31
  %%====================================================================
25
32
  %% API
26
33
  %%====================================================================
34
+ %%--------------------------------------------------------------------
35
+ %%% Internal functions
36
+ %%--------------------------------------------------------------------
37
+
38
+
39
+ % Get the load for the type sent...
40
+ get_current_load_for_type(Type) ->
41
+ String = string:concat(". /etc/profile && server-get-load -m ",Type),
42
+ LatestLoad = os:cmd(String),
43
+ Load = gen_server:call(server_location(), {update_load, Type, LatestLoad}),
44
+ {Load}.
45
+
46
+ get_load_listing(Type, State) ->
47
+ % Find or create the stored node
48
+ case ?DICT:is_key(Type, State#state.stored_loads) of
49
+ true ->
50
+ LoadStore = ?DICT:fetch(Type, State#state.stored_loads),
51
+ {LoadStore, State};
52
+ false ->
53
+ LoadStore = [],
54
+ NewState = State#state{stored_loads = ?DICT:store(Type, LoadStore, State#state.stored_loads)},
55
+ {LoadStore, NewState}
56
+ end.
57
+
58
+ get_average_load_listing(Type, State) ->
59
+ {LoadListing, _} = get_load_listing(Type, State),
60
+ utils:average_of_list(LoadListing).
61
+ % Get the stored load for the type
62
+ % Only store the latest NUM_LOADS_TO_STORE in the stored_loads array
63
+ store_load_for_type(Type, Load, State) ->
64
+ {LoadStore, LoadListingState} = get_load_listing(Type, State),
65
+ LoadList = lists:reverse(LoadStore),
66
+ case length(LoadList) >= ?NUM_LOADS_TO_STORE of
67
+ true -> [_|T] = LoadList;
68
+ false -> T = LoadList
69
+ end,
70
+ NewStoredLoad = lists:append([Load], lists:reverse(T)),
71
+ NewState = State#state{stored_loads = ?DICT:store(Type, NewStoredLoad, LoadListingState#state.stored_loads)},
72
+ {Type, NewState}.
73
+
74
+ % Rerun the configuration
75
+ run_reconfig() -> gen_server:cast(server_location(), {run_reconfig}).
76
+ print_monitors() -> gen_server:call(server_location(), {print_monitors}).
77
+
78
+ % Allows us to fire off any command (allowed by poolparty on the check)
79
+ run_cmd(Cmd) -> gen_server:call(server_location(), {run_command, Cmd}).
80
+ fire_cmd(Cmd) -> gen_server:cast(server_location(), {fire_command, Cmd}).
81
+
82
+ still_here() -> gen_server:call(server_location(), {still_there}).
83
+
84
+ % Stop the pm_node entirely
85
+ stop() -> gen_server:cast(server_location(), stop).
86
+
87
+ % Run every UPDATE_TIME seconds
88
+ local_update(Types) ->
89
+ ?TRACE("Updating", [?MASTER_LOCATION]),
90
+ net_adm:ping(?MASTER_LOCATION), % check in with the master
91
+ Load = [{Ty, element(1, get_current_load_for_type(Ty))} || Ty <- Types],
92
+ gen_server:cast(?MASTER_SERVER, {update_node_load, node(), Load}).
93
+
27
94
  %%--------------------------------------------------------------------
28
95
  %% Function: start_link() -> {ok,Pid} | ignore | {error,Error}
29
96
  %% Description: Starts the server
@@ -33,9 +100,8 @@
33
100
  %%
34
101
  %% Fires a ping every 10 seconds
35
102
  %%--------------------------------------------------------------------
36
- start_link() ->
37
- utils:start_timer(10000, fun() -> net_adm:ping(master) end),
38
- gen_server:start_link({global, ?SERVER}, ?MODULE, [], []).
103
+ start_link() -> start_link(init:get_plain_arguments()).
104
+ start_link(Args) -> gen_server:start_link({global, node()}, ?MODULE, Args, Args).
39
105
 
40
106
  %%====================================================================
41
107
  %% gen_server callbacks
@@ -48,9 +114,14 @@ start_link() ->
48
114
  %% {stop, Reason}
49
115
  %% Description: Initiates the server
50
116
  %%--------------------------------------------------------------------
51
- init([]) ->
117
+ init(Args) ->
118
+ io:format("Master location ~p~n", [?MASTER_LOCATION]),
52
119
  process_flag(trap_exit, true),
53
- {ok, #state{}}.
120
+ utils:start_timer(?UPDATE_TIME, fun() -> pm_node:local_update(Args) end),
121
+ {ok, #state{
122
+ monitors=Args,
123
+ stored_loads = ?DICT:new()
124
+ }}.
54
125
 
55
126
  %%--------------------------------------------------------------------
56
127
  %% Function: %% handle_call(Request, From, State) -> {reply, Reply, State} |
@@ -61,6 +132,21 @@ init([]) ->
61
132
  %% {stop, Reason, State}
62
133
  %% Description: Handling call messages
63
134
  %%--------------------------------------------------------------------
135
+ handle_call({run_command, Cmd}, _From, State) ->
136
+ Reply = os:cmd(". /etc/profile && server-fire-cmd \""++Cmd++"\""),
137
+ {reply, Reply, State};
138
+ handle_call({update_load, Type, Load}, _From, State) ->
139
+ {Type, NewState} = store_load_for_type(Type, Load, State),
140
+ Reply = get_average_load_listing(Type, NewState),
141
+ ?TRACE("Updated load", [Reply]),
142
+ {reply, Reply, NewState};
143
+ handle_call({still_there}, _From, State) ->
144
+ Reply = still_here,
145
+ {reply, Reply, State};
146
+ handle_call({print_monitors}, _From, State) ->
147
+ [ io:format("Type: ~p ", [Monitor]) || Monitor <- State#state.monitors ],
148
+ io:format("~n"),
149
+ {reply, ok, State};
64
150
  handle_call(_Request, _From, State) ->
65
151
  Reply = ok,
66
152
  {reply, Reply, State}.
@@ -71,8 +157,16 @@ handle_call(_Request, _From, State) ->
71
157
  %% {stop, Reason, State}
72
158
  %% Description: Handling cast messages
73
159
  %%--------------------------------------------------------------------
160
+ handle_cast({fire_command, Cmd}, State) ->
161
+ ?TRACE("Running command: ~p~n", [Cmd]),
162
+ os:cmd(". /etc/profile && server-fire-cmd \""++Cmd++"\" 2>&1 > /dev/null"),
163
+ {noreply, State};
164
+ handle_cast({run_reconfig}, State) ->
165
+ ?TRACE("Running Reconfig", ["server-rerun"]),
166
+ os:cmd(". /etc/profile && server-rerun"),
167
+ {noreply, State};
74
168
  handle_cast(_Msg, State) ->
75
- {noreply, State}.
169
+ {noreply, State}.
76
170
 
77
171
  %%--------------------------------------------------------------------
78
172
  %% Function: handle_info(Info, State) -> {noreply, State} |
@@ -102,23 +196,6 @@ terminate(_Reason, _State) ->
102
196
  code_change(_OldVsn, State, _Extra) ->
103
197
  {ok, State}.
104
198
 
105
- %%--------------------------------------------------------------------
106
- %%% Internal functions
107
- %%--------------------------------------------------------------------
108
-
109
- % Get the load for the type sent...
110
- get_load_for_type(Type) ->
111
- String = string:concat(". /etc/profile && server-get-load -m ",Type),
112
- {os:cmd(String)}.
113
-
114
- % Rerun the configuration
115
- run_reconfig() -> {os:cmd(". /etc/profile && server-rerun")}.
116
-
117
- % Allows us to fire off any command (allowed by poolparty on the check)
118
- fire_cmd(Cmd) ->
119
- String = ". /etc/profile && server-fire-cmd \""++Cmd++"\"",
120
- {os:cmd(String)}.
121
-
122
- % Stop the pm_node entirely
123
- stop() ->
124
- gen_server:cast(?MODULE, stop).
199
+ % Private
200
+ server_location() ->
201
+ global:whereis_name(node()).
@@ -4,16 +4,16 @@
4
4
  -module (pm_node_supervisor).
5
5
  -behaviour(supervisor).
6
6
 
7
- -export([start/0, start_in_shell_for_testing/0, start_link/1, init/1]).
7
+ -export ([start/0, start/1]).
8
+ -export([start_in_shell_for_testing/0, start_link/1, init/1]).
8
9
 
9
10
  -ifdef(EUNIT).
10
11
  -include_lib("eunit/include/eunit.hrl").
11
12
  -endif.
12
13
 
13
- start() ->
14
- spawn(fun() ->
15
- supervisor:start_link({local, ?MODULE}, ?MODULE, _Arg = [])
16
- end).
14
+ start() -> spawn(fun() -> supervisor:start_link({local, ?MODULE}, ?MODULE, _Arg = []) end).
15
+ start(Args) -> spawn(fun() -> supervisor:start_link({local, ?MODULE}, ?MODULE, Args) end).
16
+
17
17
 
18
18
  start_in_shell_for_testing() ->
19
19
  {ok, Pid} = supervisor:start_link({local, ?MODULE}, ?MODULE, _Arg = []),
@@ -22,19 +22,17 @@ start_in_shell_for_testing() ->
22
22
  start_link(Args) ->
23
23
  supervisor:start_link({local, ?MODULE}, ?MODULE, Args).
24
24
 
25
- init([]) ->
25
+ init(Args) ->
26
26
  RestartStrategy = one_for_one,
27
- MaxRestarts = 3, % 1000
28
- MaxTimeBetRestarts = 30, % 3600
27
+ MaxRestarts = 1000,
28
+ MaxTimeBetRestarts = 3600,
29
+ TimeoutTime = 5000,
29
30
 
30
31
  SupFlags = {RestartStrategy, MaxRestarts, MaxTimeBetRestarts},
32
+
33
+ EventManager = {pm_event_manager, {pm_event_manager, start_link, []}, permanent, TimeoutTime, worker, dynamic},
34
+ NodeServer = {pm_node1, {pm_node, start_link, Args}, permanent, TimeoutTime, worker, [pm_node]},
31
35
 
32
- LoadServers = [
33
- {pm_node1,
34
- {pm_node, start_link, []},
35
- permanent, 5000, worker,
36
- [pm_node]
37
- }
38
- ],
36
+ LoadServers = [EventManager, NodeServer],
39
37
 
40
38
  {ok, {SupFlags, LoadServers}}.
@@ -20,7 +20,7 @@ start() ->
20
20
  %% OTP design principles as a supervision tree, this means starting the
21
21
  %% top supervisor of the tree.
22
22
  %%--------------------------------------------------------------------
23
- start(_Type, _) ->
23
+ start(_, _) ->
24
24
  recompile_scripts("0.1").
25
25
 
26
26
  %%--------------------------------------------------------------------
@@ -52,11 +52,14 @@ gen_rel(Name, Vers) ->
52
52
  recompile_scripts(Vers) ->
53
53
  gen_rel("master", Vers),
54
54
  gen_rel("node", Vers),
55
+ gen_rel("client", Vers),
55
56
  systools:make_script("pm_node_rel-"++Vers, [local,{path,["ebin"]}]),
56
- systools:make_script("pm_master_rel-"++Vers, [local,{path,["ebin"]}]).
57
+ systools:make_script("pm_master_rel-"++Vers, [local,{path,["ebin"]}]),
58
+ systools:make_script("pm_client_rel-"++Vers, [local,{path,["ebin"]}]).
57
59
 
58
60
  package_scripts(Vers) ->
59
61
  systools:make_tar("ebin/pm_node_rel-"++Vers),
62
+ systools:make_tar("ebin/pm_client_rel-"++Vers),
60
63
  systools:make_tar("ebin/pm_master_rel-"++Vers).
61
64
 
62
65
  get_vsn(Module) ->
@@ -0,0 +1,11 @@
1
+ -module (pm_strings).
2
+ -include_lib("../include/defines.hrl").
3
+ -compile(export_all).
4
+
5
+ string_join(Items, Sep) ->
6
+ lists:flatten(lists:reverse(string_join1(Items, Sep, []))).
7
+
8
+ string_join1([Head | []], _Sep, Acc) ->
9
+ [Head | Acc];
10
+ string_join1([Head | Tail], Sep, Acc) ->
11
+ string_join1(Tail, Sep, [Sep, Head | Acc]).
@@ -1,4 +1,5 @@
1
1
  -module (utils).
2
+ -include_lib("../include/defines.hrl").
2
3
  -compile(export_all).
3
4
 
4
5
  -ifdef(EUNIT).
@@ -12,27 +13,61 @@ convert_responses_to_int_list(L) ->
12
13
  average_for_list(Sum, L).
13
14
 
14
15
  % Start a timer to fire off Fun after Time number of milliseconds
16
+ start_timer(Name, Time, Fun) ->
17
+ case whereis(Name) of
18
+ undefined -> register(Name, spawn(fun() -> tick_timer(Time, Fun) end));
19
+ _ -> ok
20
+ end.
15
21
  start_timer(Time, Fun) ->
16
- register(?MODULE, spawn(fun() -> tick_timer(Time, Fun) end)).
22
+ start_timer(?MODULE, Time, Fun).
23
+ % register(?MODULE, spawn(fun() -> tick_timer(Time, Fun) end)).
17
24
 
25
+ stop_timer(Name) -> erlang:whereis(Name) ! stop.
18
26
  stop_timer() -> ?MODULE ! stop.
19
27
 
28
+
20
29
  tick_timer(Time, Fun) ->
21
30
  receive
22
- stop ->
23
- void
31
+ stop -> void
24
32
  after Time ->
25
33
  Fun(),
26
- tick_timer(Time, Fun)
27
- end.
34
+ tick_timer(Time, Fun)
35
+ end.
28
36
 
37
+ average_of_list(L) ->
38
+ Sum = lists:foldr( fun(Int, Sum) ->
39
+ case erlang:is_float(Int) of
40
+ true -> Integer = Int;
41
+ false -> Integer = erlang:list_to_float(Int)
42
+ end,
43
+ Integer + Sum
44
+ end, 0, [F || F <- L] ),
45
+ average_for_list(Sum, L).
29
46
 
30
- % Private
31
47
  % Get the average of the list
32
48
  average_for_list(Num, L) ->
33
49
  case length(L) of
34
50
  0 ->
35
- 0;
51
+ -1;
36
52
  _ ->
37
53
  Num / length(L)
38
- end.
54
+ end.
55
+
56
+
57
+
58
+ % Provisioning utils
59
+ distribute_modules_to(Modules, Nodes) ->
60
+ % transfer the modules to all the nodes
61
+ io:format("Sending ~p to ~p~n", [Modules, Nodes]),
62
+ lists:foreach(fun(Node) ->
63
+ transfer_modules(Node, Modules)
64
+ end, Nodes).
65
+
66
+ % Transfer modules of code to this node
67
+ transfer_modules(Node, Modules) ->
68
+ [transfer_module(Node, M) || M <- Modules].
69
+
70
+ % Transfer one module to the Node
71
+ transfer_module(Node, Module) ->
72
+ {_Module, Binary, Filename} = code:get_object_code(Module),
73
+ rpc:call(Node, code, load_binary, [Module, Filename, Binary]).
@@ -0,0 +1,17 @@
1
+ % Snippets
2
+ % lists:map(fun(No) -> net_adm:ping(No) end, pm_cluster:any_new_servers()).
3
+
4
+ % Start test nodes, defining testing
5
+ % erl -pa ./ebin -kernel inet_dist_listen_min 7000 inet_dist_listen_max 7050 -setcookie poolparty -boot pm_node_rel-0.1 -sname node0
6
+ % erl -pa ./ebin -kernel inet_dist_listen_min 7000 inet_dist_listen_max 7050 -setcookie poolparty -boot pm_node_rel-0.1 -sname node1
7
+
8
+ % Starting the client on the master
9
+ % erl -pa /var/lib/gems/1.8/gems/poolparty-0.2.54/lib/erlang/messenger/ebin -kernel inet_dist_listen_min 7000 inet_dist_listen_max 7050 -sname client -setcookie poolparty -run pm_client start
10
+
11
+ % Get the load
12
+ % erl -pa /var/lib/gems/1.8/gems/poolparty-0.2.46/lib/erlang/messenger/ebin -kernel inet_dist_listen_min 7000 inet_dist_listen_max 7050 -sname client -setcookie poolparty -run pm_client start
13
+
14
+ % cd /var/poolparty && gem uninstall poolparty && wget http://github.com/auser/poolparty/tree/master%2Fpkg%2Fpoolparty.gem?raw=true -O poolparty.gem 2>&1 && gem install --no-ri --no-rdoc poolparty.gem
15
+
16
+ % LOAD TESTING
17
+ % ab -n 10000 -c 5 http://75.101.162.232/
@@ -0,0 +1,150 @@
1
+ =begin rdoc
2
+ Aska
3
+ TODO: Extract this into a proper gem
4
+ =end
5
+ module Aska
6
+ module ClassMethods
7
+ def rules(name=:rules, arr=[], create_vars=true)
8
+ returning look_up_rules(name) do |rs|
9
+ arr.each do |line|
10
+ next unless line
11
+ rule = Rule.new(line)
12
+ next unless rule.valid?
13
+ k = rule.key
14
+ v = rule.var
15
+ m = rule.comparison
16
+
17
+ create_instance_variable(k, create_vars)
18
+ rs << {k => [m, v]}
19
+ rs << {k => [">", "0"]} unless rs.reject {|a| a.to_s == "#{k}>0" }
20
+ end
21
+ self.send(:define_method, name) do
22
+ look_up_rules(name)
23
+ end
24
+ end
25
+ end
26
+ def create_instance_variable(k, create_vars=true)
27
+ aska_attr_accessors << k.to_sym unless aska_attr_accessors.include?(k.to_sym)
28
+ if create_vars
29
+ attr_reader k.to_sym unless respond_to?("#{k}".to_sym)
30
+ attr_writer k.to_sym unless respond_to?("#{k}=".to_sym)
31
+ end
32
+ end
33
+ def look_up_rules(name)
34
+ defined_rules[name.to_sym] ||= Rules.new
35
+ end
36
+ def are_rules?(name)
37
+ !look_up_rules(name).empty?
38
+ end
39
+ def aska_attr_accessors
40
+ @aska_attr_accessors ||= Rules.new
41
+ end
42
+ def defined_rules
43
+ @defined_rules ||= {}
44
+ end
45
+ def aska_named(name)
46
+ "#{name}_aska"
47
+ end
48
+ end
49
+
50
+ module InstanceMethods
51
+ def rules
52
+ @rules ||= self.class.defined_rules
53
+ end
54
+ def valid_rules?(name=:rules)
55
+ self.class.look_up_rules(name).reject {|rule| valid_rule?(rule) }.empty?
56
+ end
57
+ def __aska_send_value(m)
58
+ if respond_to?(m.to_sym)
59
+ self.send(m.to_sym)
60
+ else
61
+ m
62
+ end
63
+ end
64
+ def valid_rule?(rule)
65
+ rule.each do |key,value|
66
+ begin
67
+ return __aska_send_value(key).send(value[0].to_sym, __aska_get_var(value[1]))
68
+ rescue Exception => e
69
+ return false
70
+ end
71
+ end
72
+ end
73
+ def rules_values
74
+ returning Array.new do |arr|
75
+ self.class.defined_rules.each do |name,rule_array|
76
+ arr << "#{name} : #{valid_rules?(name.to_sym)}"
77
+ rule_array.each do |rule|
78
+ rule.map do |k,v|
79
+ arr << " #{k} -> #{__aska_send_value(k)} (#{v[0]} #{v[1]})"
80
+ end
81
+ end
82
+ end
83
+ end.join("\n")
84
+ end
85
+ # Get the variable from the class
86
+ # If it's defined as an attr_accessor, we know it has been defined as a rule
87
+ # Otherwise, if we are passing it as a
88
+ def __aska_get_var(name)
89
+ # attr_accessor?(name) ? aska(name) :
90
+ (supported_method?(name) ? name.to_sym : name.to_f)
91
+ end
92
+ def __aska_aska(name)
93
+ self.class.aska_named(name)
94
+ end
95
+ def attr_accessor?(name)
96
+ self.class.aska_attr_accessors.include?(name.to_sym)
97
+ end
98
+ def supported_method?(meth)
99
+ %w(< > == => =<).include?("#{meth}")
100
+ end
101
+
102
+ def look_up_rules(r);self.class.look_up_rules(r);end
103
+ def are_rules?(r);self.class.are_rules?(r);end
104
+
105
+ # def method_missing(m, *args, &block)
106
+ # if self.class.defined_rules.has_key?(m.to_sym)
107
+ # self.class.send(:define_method, m) do
108
+ # self.class.look_up_rules(m)
109
+ # end
110
+ # self.send m
111
+ # else
112
+ # super
113
+ # end
114
+ # end
115
+ end
116
+
117
+ def self.included(receiver)
118
+ receiver.extend ClassMethods
119
+ receiver.send :include, InstanceMethods
120
+ end
121
+
122
+ class Rule < String
123
+ attr_accessor :value
124
+
125
+ def initialize(v)
126
+ @value = v
127
+ end
128
+ def valid?
129
+ value =~ /(.+)[=\\\<\>](.*)/
130
+ end
131
+ def key
132
+ value[/(.+)[=\\\<\>](.*)/, 1].gsub(/\s+/, '')
133
+ end
134
+ def comparison
135
+ value[/[=\\<>]/, 0].gsub(/\s+/, '')
136
+ end
137
+ def var
138
+ value[/(.+)[=\\<>](.*)/, 2].gsub(/\s+/, '')
139
+ end
140
+ def value
141
+ @value ||= ""
142
+ end
143
+ end
144
+
145
+ class Rules < Array
146
+ def to_s
147
+ self.map {|r| v=r.keys.first;"'#{v} #{r[v][0]} #{r[v][1]}'"}.join(", ")
148
+ end
149
+ end
150
+ end
@@ -3,43 +3,36 @@ module PoolParty
3
3
  plugin :haproxy do
4
4
 
5
5
  def enable
6
- execute_if("$hostname", "master") do
7
- package({:name => "haproxy"})
6
+ execute_on_master do
7
+ has_package({:name => "haproxy"})
8
8
 
9
+ # Restart sysklogd after we update the haproxy.log
10
+ has_service(:name => "sysklogd")
11
+
12
+ # Template variables
13
+ has_variable(:name => "name_haproxy", :value => "#{cloud.name}")
14
+ has_variable(:name => "nodenames_haproxy", :value => "generate('/usr/bin/env', '/usr/bin/server-list-active', '-c', 'name', '-n', '#{cloud.name}')")
15
+ has_variable(:name => "node_ips_haproxy", :value => "generate('/usr/bin/env', '/usr/bin/server-list-active', '-c', 'ip', '-n', '#{cloud.name}')")
16
+
17
+ has_variable(:name => "ports_haproxy", :value => ([(self.respond_to?(:port) ? port : Base.port)].flatten))
18
+ has_variable(:name => "forwarding_port", :value => (respond_to?(:forwarding_port) ? forwarding_port : Base.forwarding_port))
19
+ has_variable(:name => "proxy_mode", :value => (respond_to?(:proxy_mode) ? proxy_mode : Base.proxy_mode))
20
+
9
21
  # Startup haproxy and enable it
10
22
  has_line_in_file("ENABLED=1", "/etc/default/haproxy")
11
23
  has_line_in_file("SYSLOGD=\"-r\"", "/etc/default/syslogd")
12
- has_line_in_file("local0.* /var/log/haproxy.log", "/etc/syslog.conf", {:notify => 'Service["sysklogd"]'})
13
-
14
- # Restart sysklogd after we update the haproxy.log
15
- has_service(:name => "sysklogd") do
16
- ensures "running"
17
- end
24
+ has_line_in_file("local0.* /var/log/haproxy.log", "/etc/syslog.conf", {:notify => get_service("sysklogd")})
18
25
 
19
26
  # Service is required
20
- has_service(:name => "haproxy")
21
-
22
- # Tempalte variables
23
- variable(:name => "name_haproxy", :value => "#{@parent.name}")
24
-
25
- if @parent.provisioning?
26
- variable(:name => "nodenames_haproxy", :value => "#{list_of_running_instances.map{|a| "#{a.send :name}" }.join("\t")}")
27
- variable(:name => "node_ips_haproxy", :value => "#{list_of_running_instances.map{|a| "#{a.send :ip}" }.join("\t")}")
28
- else
29
- variable(:name => "nodenames_haproxy", :value => "generate('/usr/bin/env', '/var/lib/gems/1.8/bin/server-list-active', '-c', 'name')")
30
- variable(:name => "node_ips_haproxy", :value => "generate('/usr/bin/env', '/var/lib/gems/1.8/bin/server-list-active', '-c', 'ip')")
31
- end
27
+ has_service(:name => "haproxy", :ensures => "running")
32
28
 
33
- variable(:name => "ports_haproxy", :value => ([(self.respond_to?(:port) ? port : Base.port)].flatten))
34
- variable(:name => "forwarding_port", :value => (respond_to?(:forwarding_port) ? forwarding_port : Base.forwarding_port))
35
- variable(:name => "proxy_mode", :value => (respond_to?(:proxy_mode) ? proxy_mode : Base.proxy_mode))
29
+ # has_exec(:name => "reloadhaproxy", :command => "/etc/init.d/haproxy reload", :requires => get_package("haproxy"))
36
30
 
37
31
  # These can also be passed in via hash
38
32
  has_remotefile(:name => "/etc/haproxy.cfg") do
39
33
  mode 644
40
- # onlyif '$hostname == "master"'
41
- requires 'Package["haproxy"]'
42
- notify 'Service["haproxy"]'
34
+ requires get_package("haproxy")
35
+ notify get_service("haproxy")
43
36
  template File.join(File.dirname(__FILE__), "..", "templates/haproxy.conf")
44
37
  end
45
38
  end