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
@@ -7,13 +7,12 @@ require File.dirname(__FILE__) + "/../helpers/provisioner_base"
7
7
  module PoolParty
8
8
  module Remote
9
9
  module Remoter
10
- def rsync_storage_files_to_command(remote_instance)
11
- if remote_instance
12
- "#{rsync_command} #{Base.storage_directory}/ #{remote_instance.ip}:#{Base.remote_storage_path}"
13
- end
10
+ def rsync_storage_files_to_command(remote_instance)
11
+ "#{rsync_command} #{Base.storage_directory}/ #{remote_instance.ip}:#{Base.remote_storage_path}" if remote_instance
14
12
  end
15
13
  def run_command_on_command(cmd="ls -l", remote_instance=nil)
16
- "#{ssh_command(remote_instance)} '#{cmd}'"
14
+ vputs "Running #{cmd} on #{remote_instance.name == %x[hostname].chomp ? "self (master)" : "#{remote_instance.name}"}"
15
+ remote_instance.name == %x[hostname].chomp ? %x[#{cmd}] : "#{ssh_command(remote_instance)} '#{cmd}'"
17
16
  end
18
17
  def ssh_command(remote_instance)
19
18
  "#{ssh_string} #{remote_instance.ip}"
@@ -30,31 +29,16 @@ module PoolParty
30
29
  ["-o StrictHostKeyChecking=no", "-l '#{Base.user}'", '-i "'+full_keypair_path+'"']
31
30
  end
32
31
  def rsync_command
33
- "rsync --delete -azP --exclude cache -e '#{ssh_string}'"
34
- end
35
- # Open the cached local copy of the instances list and
36
- # create a new RemoteInstance from each line
37
- def list_from_local
38
- list_file = get_working_listing_file
39
- if list_file
40
- out = returning Array.new do |instances|
41
- open(list_file).read.split("\n").each do |line|
42
- instances << RemoteInstance.new(line)
43
- end
44
- end
45
- else
46
- out = list_from_remote(:cache => true)
47
- end
48
- return out
49
- end
50
- # List the instances that are known from the remoter_base
51
- # Create a RemoteInstance for each of the instances from the hash
52
- # returned by the list of instances, write them to the cached file
53
- # and then return the array of instances
54
- def list_from_remote(options={})
55
- out_array = get_remote_nodes
56
- write_to_file( local_instances_list_file_locations.first, out_array.map{|a| a.to_s }.join("\n")) if options[:cache]
57
- out_array
32
+ "rsync -azP --exclude cache -e '#{ssh_string}'"
33
+ end
34
+ def remote_ssh_array
35
+ ["-o StrictHostKeyChecking=no", "-l '#{Base.user}'", '-i "'+remote_keypair_path+'"']
36
+ end
37
+ def remote_ssh_string
38
+ (["ssh"] << remote_ssh_array).join(" ")
39
+ end
40
+ def remote_rsync_command
41
+ "rsync -azP --exclude cache -e '#{remote_ssh_string}'"
58
42
  end
59
43
  # Get the names of the nodes. Mainly used for puppet templating
60
44
  def list_of_node_names(options={})
@@ -64,13 +48,7 @@ module PoolParty
64
48
  def list_of_node_ips(options={})
65
49
  list_of_running_instances.collect {|ri| ri.ip }
66
50
  end
67
- def get_remote_nodes
68
- returning Array.new do |instances|
69
- list_of_instances(respond_to?(:keypair) ? keypair : nil).each do |h|
70
- instances << PoolParty::Remote::RemoteInstance.new(h)
71
- end
72
- end
73
- end
51
+
74
52
  # Get the instance first instance file that exists on the system from the expected places
75
53
  # denoted in the local_instances_list_file_locations
76
54
  def get_working_listing_file
@@ -103,6 +81,14 @@ module PoolParty
103
81
  num.times {out << launch_new_instance!}
104
82
  out
105
83
  end
84
+ def request_launch_master_instance
85
+ inst = launch_new_instance!
86
+ wait "5.seconds"
87
+ when_no_pending_instances {after_launch_master(inst)}
88
+ end
89
+ def after_launch_master(h={})
90
+ vputs "After launch master in remoter"
91
+ end
106
92
  # Let's terminate an instance that is not the master instance
107
93
  def request_termination_of_non_master_instance
108
94
  inst = nonmaster_nonterminated_instances.last
@@ -110,12 +96,16 @@ module PoolParty
110
96
  end
111
97
  # Can we start a new instance?
112
98
  def can_start_a_new_instance?
113
- maximum_number_of_instances_are_not_running?
99
+ maximum_number_of_instances_are_not_running? && list_of_pending_instances.size == 0
114
100
  end
115
- # Are the maximum number of instances running?
101
+ # Are the maximum number of instances not running?
116
102
  def maximum_number_of_instances_are_not_running?
117
103
  list_of_running_instances.size < maximum_instances.to_i
118
104
  end
105
+ # Are the maximum number of instances running?
106
+ def maximum_number_of_instances_are_running?
107
+ list_of_running_instances.size >= maximum_instances.to_i
108
+ end
119
109
  # Launch new instance while waiting for the number of pending instances
120
110
  # to be zero before actually launching. This ensures that we only
121
111
  # launch one instance at a time
@@ -125,14 +115,28 @@ module PoolParty
125
115
  # A convenience method for waiting until there are no more
126
116
  # pending instances and then running the block
127
117
  def when_no_pending_instances(&block)
128
- reset!
118
+ reset!
129
119
  if list_of_pending_instances.size == 0
130
120
  block.call if block
131
121
  else
122
+ vprint "."
132
123
  wait "5.seconds"
133
124
  when_no_pending_instances(&block)
134
125
  end
135
126
  end
127
+ # A convenience method for waiting until all the instances have an ip
128
+ # assigned to them. This is useful when shifting the ip addresses
129
+ # around on the instances
130
+ def when_all_assigned_ips(&block)
131
+ reset!
132
+ if list_of_nonterminated_instances.select {|a| a.ip == "not.assigned" }.empty?
133
+ block.call if block
134
+ else
135
+ vprint "."
136
+ wait "5.seconds"
137
+ when_all_assigned_ips(&block)
138
+ end
139
+ end
136
140
 
137
141
  # This will launch the minimum_instances if the minimum number of instances are not running
138
142
  # If the minimum number of instances are not running and if we can start a new instance
@@ -140,7 +144,30 @@ module PoolParty
140
144
  if can_start_a_new_instance? && !minimum_number_of_instances_are_running?
141
145
  list_of_pending_instances.size == 0 ? request_launch_one_instance_at_a_time : wait("5.seconds")
142
146
  reset!
143
- launch_minimum_number_of_instances unless minimum_number_of_instances_are_running?
147
+ launch_minimum_number_of_instances
148
+ provision_slaves_from_n(minimum_instances.to_i)
149
+ after_launched
150
+ end
151
+ end
152
+
153
+ def provision_slaves_from_n(num=1)
154
+ vputs "In provision_slaves_from_n: #{num}"
155
+ reset!
156
+ when_no_pending_instances do
157
+ vputs "Waiting for 10 seconds"
158
+ wait "10.seconds" # Give some time for ssh to startup
159
+ @num_instances = list_of_running_instances.size
160
+ vputs "(@num_instances - (num))..(@num_instances): #{(@num_instances - (num))..(@num_instances)}"
161
+ last_instances = nonmaster_nonterminated_instances[(@num_instances - (num))..(@num_instances)]
162
+ last_instances.each do |inst|
163
+ vputs "Provision slave: #{inst}"
164
+ hide_output {PoolParty::Provisioner.process_clean_reconfigure_for!(inst, self)}
165
+ PoolParty::Provisioner.provision_slave(inst, self, false) unless inst.master? rescue vputs "Error"
166
+ hide_output {PoolParty::Provisioner.process_clean_reconfigure_for!(inst, self)}
167
+ # cmd = ". /etc/profile && cloud-provision -i #{inst.name.gsub(/node/, '')} &"
168
+ # vputs "Provision slave with command #{cmd}"
169
+ end
170
+ PoolParty::Provisioner.reconfigure_master(self)
144
171
  end
145
172
  end
146
173
  # Launch the master and let the master handle the starting of the cloud
@@ -149,24 +176,35 @@ module PoolParty
149
176
  # and if the master is not running AND we can start a new instance
150
177
  # Then wait for the master to launch
151
178
  def launch_and_configure_master!(testing=false)
152
- request_launch_new_instances(1) if list_of_pending_instances.size.zero? && can_start_a_new_instance? && !is_master_running?
153
-
154
- when_no_pending_instances do
155
- wait "20.seconds"
156
- hide_output { Provisioner.provision_master(self, testing) }
179
+ vputs "Requesting to launch new instance"
180
+ logger.debug "Launching master"
181
+ request_launch_master_instance if list_of_pending_instances.size.zero? && can_start_a_new_instance? && !is_master_running? && !testing
182
+ reset!
183
+ unless testing
184
+ vputs ""
185
+ vputs "Waiting for there to be no pending instances..."
186
+ when_no_pending_instances do
187
+ when_all_assigned_ips {wait "20.seconds"}
188
+ vputs ""
189
+ vputs "Provisioning master..."
190
+ # cleanup_storage_directory
191
+ verbose ? Provisioner.provision_master(self, testing) : hide_output { Provisioner.provision_master(self, testing) }
192
+ verbose ? Provisioner.clear_master_ssl_certs(self, testing) : hide_output { Provisioner.clear_master_ssl_certs(self, testing) }
193
+
194
+ after_launched
195
+ end
157
196
  end
158
-
159
197
  end
160
198
  def is_master_running?
161
199
  !list_of_running_instances.select {|a| a.name == "master"}.first.nil?
162
200
  end
163
201
  # Stub method for the time being to handle expansion of the cloud
164
202
  def should_expand_cloud?(force=false)
165
- force || false
203
+ valid_rules?(:expand_when) || force || false
166
204
  end
167
205
  # Stub method for the time being to handle the contraction of the cloud
168
206
  def should_contract_cloud?(force=false)
169
- force || false
207
+ valid_rules?(:contract_when) || force || false
170
208
  end
171
209
  # Expand the cloud
172
210
  # If we can start a new instance and the load requires us to expand
@@ -176,14 +214,14 @@ module PoolParty
176
214
  # get go
177
215
  def expand_cloud_if_necessary(force=false)
178
216
  if can_start_a_new_instance? && should_expand_cloud?(force)
179
- @out = request_launch_new_instances(1)
180
-
181
- reset!
182
- when_no_pending_instances do
183
- wait "20.seconds" # Give some time for ssh to startup
184
- PoolParty::Provisioner.provision_slaves(self)
185
- PoolParty::Provisioner.configure_master(self, testing)
186
- # prepare_reconfiguration
217
+ vputs "Expanding the cloud based on load"
218
+ @num = 1
219
+ @num.times do |i|
220
+ list_of_pending_instances.size == 0 ? request_launch_one_instance_at_a_time : wait("5.seconds")
221
+ reset!
222
+ vputs "request_launch_new_instances: #{@num}"
223
+ provision_slaves_from_n(@num)
224
+ after_launched
187
225
  end
188
226
  end
189
227
  end
@@ -192,15 +230,29 @@ module PoolParty
192
230
  # the cloud, then we should request_termination_of_non_master_instance
193
231
  def contract_cloud_if_necessary(force=false)
194
232
  if can_shutdown_an_instance?
195
- request_termination_of_non_master_instance if should_contract_cloud?(force)
233
+ if should_contract_cloud?(force)
234
+ vputs "Shrinking the cloud by 1"
235
+ before_shutdown
236
+ request_termination_of_non_master_instance
237
+ end
196
238
  end
197
239
  end
198
240
 
241
+ # Callbacks
242
+
243
+ # After launch callback
244
+ # This is called after a new instance is launched
245
+ def after_launched(force=false)
246
+ end
247
+
248
+ # Before shutdown callback
249
+ # This is called before the cloud is contracted
250
+ def before_shutdown
251
+ end
252
+
199
253
  # Rsync command to the instance
200
254
  def rsync_storage_files_to(instance=nil)
201
- hide_output do
202
- Kernel.system "#{rsync_storage_files_to_command(instance)}" if instance
203
- end
255
+ hide_output {Kernel.system "#{rsync_storage_files_to_command(instance)}" if instance}
204
256
  end
205
257
  # Take the rsync command and execute it on the system
206
258
  # if there is an instance given
@@ -224,12 +276,13 @@ module PoolParty
224
276
  end
225
277
 
226
278
  # Prepare reconfiguration on the master
227
- # TODO: Fix the killall
228
279
  # TODO: Curious about the puppet/ssl problems...
280
+ # puppetd --test --no-daemonize 2>&1 &
281
+ # rm -rf /etc/puppet/ssl/*;
229
282
  def prepare_reconfiguration
230
283
  unless @prepared
231
- cmd = "killall ruby && rm -rf /etc/puppet/ssl/*; puppetmasterd --verbose; puppetd --test --no-daemonize 2>&1 &"
232
- run_command_on(cmd, master)
284
+ # cmd = "/etc/init.d/puppetmaster restart"
285
+ # run_command_on(cmd, master)
233
286
  @prepared = true
234
287
  end
235
288
  end
@@ -1,3 +1,21 @@
1
+ =begin rdoc
2
+ The base for Remote Bases
3
+
4
+ By extending this class, you can easily add remoters to
5
+ PoolParty. There are 4 methods that the remote base needs to implement
6
+ in order to be compatible.
7
+
8
+ The four methods are:
9
+ launch_new_instance!
10
+ terminate_instance(id)
11
+ describe_instance(id)
12
+ describe_instances
13
+
14
+ After your remote base is written, make sure to register the base outside the context
15
+ of the remote base, like so:
16
+ register_remote_base :remote_base_name
17
+
18
+ =end
1
19
  module PoolParty
2
20
 
3
21
  def register_remote_base(*args)
@@ -70,27 +88,47 @@ module PoolParty
70
88
  name = (i.zero? ? "master" : "node#{i}")
71
89
  list.select {|i| i.name == name }.first
72
90
  end
73
- def remote_instances_list
74
- list_of_instances.map {|i| PoolParty::Remote::RemoteInstance.new(i, self) }
91
+ def remote_instances_list
92
+ @containing_cloud = self
93
+ # puts "> #{@containing_cloud} #{@describe_instances.nil?}"
94
+ list_of_instances(keypair).collect {|h| PoolParty::Remote::RemoteInstance.new(h, @containing_cloud) }
75
95
  end
76
96
  # List the instances for the current key pair, regardless of their states
77
97
  # If no keypair is passed, select them all
78
98
  def list_of_instances(keyp=nil)
79
- key = keyp ? keyp : keypair
80
- describe_instances.select {|a| key ? a[:keypair] == key : true } if describe_instances
99
+ tmp_key = (keyp ? keyp : keypair).to_s
100
+ unless @describe_instances
101
+ tmpInstanceList = describe_instances.select {|a| a if tmp_key ? a[:keypair] == tmp_key : true }
102
+ has_master = !tmpInstanceList.select {|a| a[:name] == "master" }.empty?
103
+ if has_master
104
+ @describe_instances = tmpInstanceList
105
+ else
106
+ @id = 0
107
+ running = select_from_instances_on_status(/running/, tmpInstanceList)
108
+ pending = select_from_instances_on_status(/pending/, tmpInstanceList)
109
+ terminated = select_from_instances_on_status(/shutting/, tmpInstanceList)
110
+
111
+ running = running.map do |inst|
112
+ inst[:name] = (@id == 0 ? "master" : "node#{@id}")
113
+ @id += 1
114
+ inst
115
+ end.sort_by {|a| a[:index] }
116
+
117
+ @describe_instances = [running, pending, terminated].flatten
118
+ end
119
+ end
120
+ @describe_instances
81
121
  end
82
- # Instances
83
- # Get the master from the cloud
84
- def master
85
- # remote_instances_list.select {|a| a.master }.first
86
- @list = list_from_remote
87
- @list.reject {|a| a unless a.name =~ /master/ }.first if @list.class != String
122
+ # Select the instances based on their status
123
+ def select_from_instances_on_status(status=/running/, list=[])
124
+ list.select {|a| a[:status] =~ status}
88
125
  end
89
126
  # Helpers
90
127
  def create_keypair
91
128
  end
92
129
  # Reset the cache of descriptions
93
- def reset!
130
+ def reset_remoter_base!
131
+ @describe_instances = nil
94
132
  end
95
133
  def self.included(other)
96
134
  PoolParty.register_remote_base(self.class.to_s.downcase.to_sym)
@@ -0,0 +1,66 @@
1
+ =begin rdoc
2
+ DeployDirectory
3
+
4
+ Deploy directory will tar.gz a local directory and sync it up to
5
+ the master instance of the cloud. This enables you to send a directory
6
+ up to the cloud and let the master host it for the remote slaves
7
+ =end
8
+ module PoolParty
9
+ class Deploydirectory
10
+
11
+ virtual_resource(:deploydirectory) do
12
+
13
+ def loaded(opts={}, parent=self)
14
+ package_directory
15
+ unpack_directory
16
+ sync_directories
17
+ end
18
+
19
+ def package_directory
20
+ path = ::File.join( Base.tmp_path, "#{::File.basename(from_dir)}.tar.gz" )
21
+ archive_name = "#{name.dir_safe}.tar.gz"
22
+ cmd = "cd #{::File.expand_path(from_dir)} && tar -czf #{archive_name} . && mv #{archive_name} #{Base.tmp_path}"
23
+ `#{cmd}` unless testing
24
+ end
25
+
26
+ def unpack_directory
27
+ execute_on_master do
28
+ has_exec({:name => "deploy-directory-#{name}", :requires => get_directory("#{cwd}"), :cwd => cwd}) do
29
+ # && rm #{Base.tmp_path}/#{parent.name.dir_safe}.tar.gz
30
+ command "cd #{cwd}; tar -zxf #{Base.remote_storage_path}/#{name.dir_safe}.tar.gz; rm #{Base.remote_storage_path}/#{name.dir_safe}.tar.gz"
31
+ onlyif "test -f #{Base.remote_storage_path}/#{name.dir_safe}.tar.gz"
32
+ end
33
+ end
34
+ end
35
+
36
+ def sync_directories
37
+ execute_on_node do
38
+ has_rsyncmirror(:dir => cwd, :name => "deploydirectory-#{name}")
39
+ end
40
+ end
41
+
42
+ def from(dir)
43
+ from_dir (dir.include?(" ") ? dir.gsub(/[ ]/, '') : dir)
44
+ end
45
+
46
+ def to(dir)
47
+ cwd dir
48
+ has_directory(:name => "#{dir}", :requires => get_directory("#{::File.dirname(dir)}"))
49
+ end
50
+
51
+ # Since git is not a native type, we have to say which core resource
52
+ # it is using to be able to require it
53
+ def class_type_name
54
+ "exec"
55
+ end
56
+
57
+ # Because we are requiring an exec, instead of a built-in package of the git, we have to overload
58
+ # the to_s method and prepend it with the same name as above
59
+ def key
60
+ "deploy-directory-#{name}"
61
+ end
62
+
63
+ end
64
+
65
+ end
66
+ end
@@ -4,7 +4,7 @@ module PoolParty
4
4
  define_resource(:line_in_file) do
5
5
  # Should refactor
6
6
  def has_line_in_file(line="line_in_file", file="file", opts={})
7
- call_function <<-EOE
7
+ call_custom_function <<-EOE
8
8
  line {
9
9
  '#{file}_line' :
10
10
  file => '#{file}',
@@ -16,7 +16,7 @@ module PoolParty
16
16
  end
17
17
 
18
18
  def append_if_no_such_line(line="line", file="", refreshonly='false')
19
- call_function <<-EOE
19
+ call_custom_function <<-EOE
20
20
  append_if_no_such_line {
21
21
  '#{file}' :
22
22
  file => '#{file}',
@@ -26,11 +26,12 @@ module PoolParty
26
26
  EOE
27
27
  end
28
28
 
29
- def delete_lines_from(file="", pattern=//)
30
- call_function <<-EOE
29
+ def delete_lines_from(file="", pattern=//, opts={})
30
+ call_custom_function <<-EOE
31
31
  delete_lines {
32
32
  '#{file}' :
33
33
  file => '#{file}',
34
+ #{opts.flush_out("\t", ",")}
34
35
  pattern => '#{pattern}'
35
36
  }
36
37
  EOE
@@ -0,0 +1,26 @@
1
+ module PoolParty
2
+ class Rsyncmirror
3
+
4
+ virtual_resource(:rsyncmirror) do
5
+
6
+ def loaded(opts={}, parent=self)
7
+ @parent = parent
8
+ has_exec(opts.merge({:command => "#{cloud.remote_rsync_command} --no-implied-dirs --delete-excluded #{Base.user}@master:#{dir}/ #{dir}/".safe_quote, :name => "rsync-#{name}"}))
9
+ end
10
+
11
+ # Since git is not a native type, we have to say which core resource
12
+ # it is using to be able to require it
13
+ def class_type_name
14
+ "exec"
15
+ end
16
+
17
+ # Because we are requiring an exec, instead of a built-in package of the git, we have to overload
18
+ # the to_s method and prepend it with the same name as above
19
+ def key
20
+ "rsync-#{name}"
21
+ end
22
+
23
+ end
24
+
25
+ end
26
+ end
@@ -0,0 +1,96 @@
1
+ module PoolParty
2
+ class Runit
3
+ define_resource(:runitservice) do
4
+ def has_runit_service(name="runitservice", downif="", templatedir="")
5
+ path = copy_templates_from_templatedir(templatedir)
6
+ call_custom_function <<-EOC
7
+ runit_service {
8
+ "#{name}":
9
+ directory => "/etc/sv",
10
+ downif => "/bin/ps aux | grep -v grep | grep -q #{downif}",
11
+ templatedir => "#{path}";
12
+ }
13
+ EOC
14
+ end
15
+
16
+ def copy_templates_from_templatedir(dir=nil)
17
+ raise TemplateNotFound.new("template directory given") unless dir
18
+ raise TemplateNotFound.new("template directory cannot be found #{dir}") unless ::File.readable?(dir)
19
+ copy_directory_into_template_storage_directory(dir)
20
+ end
21
+
22
+ custom_function <<-EOF
23
+ define runit_service ($directory = "/etc/sv", $downif = "/bin/false", $templatedir) {
24
+
25
+ file { "$directory-$name":
26
+ path => "$directory/$name",
27
+ ensure => directory,
28
+ owner => root,
29
+ group => root,
30
+ mode => 0755,
31
+ require => Class["runit"]
32
+ }
33
+
34
+ file { "$directory/$name/log":
35
+ ensure => directory,
36
+ owner => root,
37
+ group => root,
38
+ mode => 0755,
39
+ require => File["$directory-$name"]
40
+ }
41
+
42
+ file { "$directory/$name/log/main":
43
+ ensure => directory,
44
+ owner => root,
45
+ group => root,
46
+ mode => 0755,
47
+ require => File["$directory/$name/log"]
48
+ }
49
+
50
+ file { "/etc/init.d/$name":
51
+ ensure => $lsbdistid ? {
52
+ 'CentOS' => "/usr/local/bin/sv",
53
+ default => "/usr/bin/sv",
54
+ },
55
+ require => [ File["$directory/$name/run"], File["$directory/$name/log/run"] ]
56
+ }
57
+
58
+ file { "/var/service/$name":
59
+ ensure => "$directory/$name",
60
+ require => [ File["$directory-$name"], File["$directory/$name/run"], File["$directory/$name/log/run"] ]
61
+ }
62
+
63
+ file { "$directory/$name/log/run":
64
+ content => template("$templatedir/log-run.erb"),
65
+ owner => root,
66
+ group => root,
67
+ mode => 755,
68
+ require => File["$directory/$name/log"],
69
+ notify => Service[$name]
70
+ }
71
+
72
+ file { "$directory/$name/run":
73
+ content => template("$templatedir/run.erb"),
74
+ owner => root,
75
+ group => root,
76
+ mode => 755,
77
+ require => File["$directory-$name"],
78
+ notify => Service[$name]
79
+ }
80
+
81
+ service { "$name":
82
+ hasrestart => true,
83
+ hasstatus => true,
84
+ require => File["/etc/init.d/$name"]
85
+ }
86
+
87
+ exec { "$name-down":
88
+ command => "/etc/init.d/$name down",
89
+ onlyif => $downif,
90
+ require => File["/etc/init.d/$name"]
91
+ }
92
+ }
93
+ EOF
94
+ end
95
+ end
96
+ end
@@ -4,7 +4,7 @@ module PoolParty
4
4
  define_resource(:svn) do
5
5
 
6
6
  def has_svnpath(opts={})
7
- call_function <<-EOE
7
+ call_custom_function <<-EOE
8
8
  svnserve { #{opts[:name]}:
9
9
  source => "#{opts[:source]}",
10
10
  path => "#{opts[:path]}",