poolparty 0.2.84 → 1.2.2

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 (642) hide show
  1. data/History.txt +7 -0
  2. data/License.txt +1 -1
  3. data/PostInstall.txt +1 -1
  4. data/README.txt +13 -22
  5. data/Rakefile +26 -35
  6. data/VERSION.yml +4 -0
  7. data/bin/cloud +24 -3
  8. data/bin/cloud-bootstrap +31 -0
  9. data/bin/cloud-configure +36 -20
  10. data/bin/{pool-console → cloud-console} +0 -0
  11. data/bin/cloud-contract +7 -7
  12. data/bin/cloud-describe +28 -0
  13. data/bin/cloud-expand +13 -6
  14. data/bin/cloud-handle-load +3 -3
  15. data/bin/cloud-list +9 -14
  16. data/bin/cloud-osxcopy +6 -5
  17. data/bin/cloud-provision +17 -22
  18. data/bin/cloud-setup-dev +11 -11
  19. data/bin/cloud-show +28 -0
  20. data/bin/cloud-spec +2 -2
  21. data/bin/cloud-ssh +10 -3
  22. data/bin/cloud-start +21 -23
  23. data/bin/cloud-terminate +15 -7
  24. data/bin/cloud-verify +32 -0
  25. data/bin/install-poolparty +216 -0
  26. data/bin/server-butterfly +25 -0
  27. data/bin/server-cloud-elections +37 -0
  28. data/bin/server-ensure-provisioning +33 -0
  29. data/bin/server-get-load +9 -12
  30. data/bin/server-list-active +25 -12
  31. data/bin/server-manage-election +67 -0
  32. data/bin/server-monitor.ru +42 -0
  33. data/bin/server-query-agent +15 -0
  34. data/bin/server-rerun +1 -1
  35. data/bin/server-write-new-nodes +2 -2
  36. data/config/jeweler.rb +52 -0
  37. data/config/requirements.rb +1 -9
  38. data/examples/basic.rb +10 -10
  39. data/examples/deploy.rb +5 -0
  40. data/examples/fairchild.rb +28 -0
  41. data/examples/fairchild_chef.rb +19 -0
  42. data/examples/maize.rb +37 -0
  43. data/examples/paparazzi.conf.erb +21 -0
  44. data/generators/poolspec/poolspec_generator.rb +1 -9
  45. data/generators/poolspec/templates/pool_spec_template.erb +0 -1
  46. data/lib/poolparty/{aska/aska.rb → aska.rb} +19 -28
  47. data/lib/poolparty/base_packages/haproxy.rb +48 -31
  48. data/lib/poolparty/base_packages/heartbeat.rb +6 -62
  49. data/lib/poolparty/base_packages/poolparty.rb +5 -105
  50. data/lib/poolparty/base_packages/ruby.rb +4 -4
  51. data/lib/poolparty/base_packages/runit.rb +1 -1
  52. data/lib/poolparty/core/array.rb +21 -3
  53. data/lib/poolparty/core/hash.rb +45 -10
  54. data/lib/poolparty/core/kernel.rb +30 -8
  55. data/lib/poolparty/core/nil.rb +8 -0
  56. data/lib/poolparty/core/object.rb +34 -25
  57. data/lib/poolparty/core/ordered_hash.rb +99 -0
  58. data/lib/poolparty/core/string.rb +112 -15
  59. data/lib/poolparty/core/symbol.rb +10 -0
  60. data/lib/poolparty/dependencies.rb +49 -0
  61. data/lib/poolparty/dependency_resolver/chef_resolver.rb +237 -0
  62. data/lib/poolparty/dependency_resolver/dependency_resolver.rb +42 -0
  63. data/lib/poolparty/dependency_resolver/dependency_resolver_cloud_extensions.rb +29 -0
  64. data/lib/poolparty/{dependency_resolutions → dependency_resolver}/puppet.rb +34 -29
  65. data/lib/poolparty/dependency_resolver/puppet_resolver.rb +188 -0
  66. data/lib/poolparty/exceptions/MasterException.rb +2 -2
  67. data/lib/poolparty/exceptions/RemoteException.rb +1 -1
  68. data/lib/poolparty/exceptions/dependency_resolver_exception.rb +5 -0
  69. data/lib/poolparty/exceptions/package_exception.rb +7 -0
  70. data/lib/poolparty/extra/deployments.rb +7 -7
  71. data/lib/poolparty/helpers/binary.rb +26 -32
  72. data/lib/poolparty/helpers/console.rb +1 -1
  73. data/lib/poolparty/helpers/display.rb +1 -5
  74. data/lib/poolparty/helpers/hash_printer.rb +44 -0
  75. data/lib/poolparty/helpers/loading.rb +4 -0
  76. data/lib/poolparty/helpers/optioner.rb +39 -25
  77. data/lib/poolparty/lite.rb +30 -0
  78. data/lib/poolparty/modules/callbacks.rb +44 -0
  79. data/lib/poolparty/modules/cloud_dsl.rb +38 -8
  80. data/lib/poolparty/modules/cloud_resourcer.rb +67 -97
  81. data/lib/poolparty/modules/daemonizable.rb +141 -0
  82. data/lib/poolparty/modules/definable_resource.rb +8 -14
  83. data/lib/poolparty/modules/file_writer.rb +25 -17
  84. data/lib/poolparty/modules/pinger.rb +28 -0
  85. data/lib/poolparty/modules/pretty_printer.rb +1 -1
  86. data/lib/poolparty/modules/resourcing_dsl.rb +55 -40
  87. data/lib/poolparty/modules/searchable_paths.rb +91 -0
  88. data/lib/poolparty/modules/thread_pool.rb +107 -106
  89. data/lib/poolparty/modules/user_helpers.rb +20 -0
  90. data/lib/poolparty/monitors/base_monitor.rb +18 -75
  91. data/lib/poolparty/monitors/monitor_rack.rb +123 -0
  92. data/lib/poolparty/monitors/monitors/favicon_monitor.rb +12 -0
  93. data/lib/poolparty/monitors/monitors/load_monitor.rb +9 -0
  94. data/lib/poolparty/monitors/monitors/memory_monitor.rb +9 -9
  95. data/lib/poolparty/monitors/monitors/neighborhood_monitor.rb +77 -0
  96. data/lib/poolparty/monitors/monitors/stats_monitor.rb +187 -0
  97. data/lib/poolparty/monitors/monitors/time_monitor.rb +15 -0
  98. data/lib/poolparty/net/init.rb +10 -0
  99. data/lib/poolparty/net/remote_bases.rb +20 -0
  100. data/lib/poolparty/net/remote_instance.rb +26 -44
  101. data/lib/poolparty/net/remoter/cloud_control.rb +24 -0
  102. data/lib/poolparty/net/remoter/connections.rb +172 -0
  103. data/lib/poolparty/net/remoter/interactive.rb +45 -0
  104. data/lib/poolparty/net/remoter_base.rb +116 -111
  105. data/lib/poolparty/net/remoter_bases/ec2/ec2.rb +245 -0
  106. data/lib/poolparty/net/remoter_bases/ec2/ec2_remote_instance.rb +53 -0
  107. data/lib/poolparty/net/{remote_bases → remoter_bases}/ec2/ec2_response_object.rb +2 -4
  108. data/lib/poolparty/net/remoter_bases/vmrun/utilities/vm_disk.rb +12 -0
  109. data/lib/poolparty/net/remoter_bases/vmrun/utilities/vmx.rb +33 -0
  110. data/lib/poolparty/net/remoter_bases/vmrun/utilities/vmx_file.rb +117 -0
  111. data/lib/poolparty/net/remoter_bases/vmrun/vmrun.rb +158 -0
  112. data/lib/poolparty/net/remoter_bases/vmrun/vmrun_instance.rb +71 -0
  113. data/lib/poolparty/plugins/apache2/apache.rb +340 -0
  114. data/lib/poolparty/plugins/bind.rb +11 -0
  115. data/lib/poolparty/plugins/chef.rb +173 -0
  116. data/lib/poolparty/plugins/chef_deploy.rb +58 -0
  117. data/lib/poolparty/plugins/deploy_directory.rb +49 -0
  118. data/lib/poolparty/plugins/gem_package.rb +61 -0
  119. data/lib/poolparty/plugins/git.rb +41 -24
  120. data/lib/poolparty/plugins/line_in_file.rb +30 -0
  121. data/lib/poolparty/plugins/nanite.rb +41 -0
  122. data/lib/poolparty/plugins/rails_deploy.rb +76 -0
  123. data/lib/poolparty/plugins/svn.rb +56 -39
  124. data/lib/poolparty/poolparty/cloud.rb +137 -167
  125. data/lib/poolparty/poolparty/{base.rb → default.rb} +62 -25
  126. data/lib/poolparty/poolparty/key.rb +78 -0
  127. data/lib/poolparty/poolparty/loggable.rb +28 -27
  128. data/lib/poolparty/poolparty/neighborhoods.rb +102 -0
  129. data/lib/poolparty/poolparty/plugin.rb +53 -18
  130. data/lib/poolparty/poolparty/plugin_model.rb +20 -23
  131. data/lib/poolparty/poolparty/pool.rb +34 -26
  132. data/lib/poolparty/poolparty/poolparty_base_class.rb +190 -0
  133. data/lib/poolparty/poolparty/resource.rb +92 -178
  134. data/lib/poolparty/poolparty/script.rb +32 -20
  135. data/lib/poolparty/poolparty/service.rb +44 -0
  136. data/lib/poolparty/poolparty/template.rb +27 -0
  137. data/lib/poolparty/provision/boot_strapper.rb +164 -0
  138. data/lib/poolparty/provision/configurations/chef.rb +26 -0
  139. data/lib/poolparty/provision/configurations/puppet.rb +28 -0
  140. data/lib/poolparty/provision/dr_configure.rb +142 -0
  141. data/lib/poolparty/resources/cron.rb +51 -0
  142. data/lib/poolparty/resources/directory.rb +36 -0
  143. data/lib/poolparty/resources/exec.rb +47 -0
  144. data/lib/poolparty/resources/file.rb +73 -0
  145. data/lib/poolparty/resources/host.rb +37 -0
  146. data/lib/poolparty/resources/mount.rb +45 -0
  147. data/lib/poolparty/resources/package.rb +41 -0
  148. data/lib/poolparty/resources/remote_file.rb +52 -0
  149. data/lib/poolparty/resources/service.rb +41 -0
  150. data/lib/poolparty/resources/sshkey.rb +49 -0
  151. data/lib/poolparty/resources/symlink.rb +43 -0
  152. data/lib/poolparty/{poolparty/resources/remote_user.rb → resources/user.rb} +1 -5
  153. data/lib/poolparty/resources/variable.rb +34 -0
  154. data/lib/poolparty/resources.rb +42 -0
  155. data/lib/poolparty/schema.rb +79 -0
  156. data/lib/poolparty/templates/apache2/apache2.conf +14 -0
  157. data/lib/poolparty/templates/apache2/base.conf.erb +168 -0
  158. data/lib/poolparty/templates/apache2/browser_fixes.conf.erb +26 -0
  159. data/lib/poolparty/templates/apache2/debian.conf.erb +675 -0
  160. data/lib/poolparty/templates/apache2/default-site.conf.erb +41 -0
  161. data/lib/poolparty/templates/apache2/directory_indexes.conf.erb +101 -0
  162. data/lib/poolparty/templates/apache2/logging-syslog.conf.erb +42 -0
  163. data/lib/poolparty/templates/apache2/mime-extras.conf.erb +211 -0
  164. data/lib/poolparty/templates/apache2/mime-minimal.conf.erb +15 -0
  165. data/lib/poolparty/templates/apache2/mpm-worker.conf.erb +20 -0
  166. data/lib/poolparty/templates/apache2/mpm-worker.erb +20 -0
  167. data/lib/poolparty/templates/apache2/passenger.conf.erb +20 -0
  168. data/lib/poolparty/templates/apache2/php.ini.erb +1253 -0
  169. data/lib/poolparty/templates/apache2/server-status.erb +19 -0
  170. data/lib/poolparty/templates/erlang_cookie_maker +6 -0
  171. data/lib/poolparty/templates/gemrc_template +11 -0
  172. data/lib/poolparty/templates/ha.cf +1 -1
  173. data/lib/poolparty/templates/haproxy.conf +29 -27
  174. data/lib/poolparty/templates/haresources +2 -2
  175. data/lib/poolparty/templates/monitor.ru +16 -0
  176. data/lib/poolparty/templates/php.ini.erb +1253 -0
  177. data/lib/poolparty/templates/puppet/add_puppet_to_hosts +6 -0
  178. data/lib/poolparty/templates/puppet/puppet.conf +2 -0
  179. data/lib/poolparty/templates/puppet/puppetrunner +14 -0
  180. data/lib/poolparty/templates/puppet/site.pp +4 -0
  181. data/lib/poolparty/templates/puppetrunner +11 -5
  182. data/lib/poolparty/verification/verifier_base.rb +17 -0
  183. data/lib/poolparty/verification/verifiers/http_match.rb +43 -0
  184. data/lib/poolparty/verification/verifiers/http_status.rb +59 -0
  185. data/lib/poolparty/verification/verifiers/ping.rb +34 -0
  186. data/lib/poolparty/verification/verify.rb +76 -0
  187. data/lib/poolparty.rb +76 -22
  188. data/lib/poolpartycl.rb +66 -1
  189. data/script/destroy +1 -1
  190. data/script/generate +1 -1
  191. data/spec/bin/bin_spec_helper.rb +7 -0
  192. data/spec/bin/fixtures/bin_cloud_for_test.rb +13 -0
  193. data/spec/bin/server-list-active_spec.rb +24 -0
  194. data/spec/poolparty/aska/aska_spec.rb +5 -5
  195. data/spec/poolparty/base_packages/haproxy_spec.rb +2 -8
  196. data/spec/poolparty/base_packages/heartbeat_spec.rb +3 -26
  197. data/spec/poolparty/bin/console_spec.rb +11 -29
  198. data/spec/poolparty/core/array_spec.rb +20 -3
  199. data/spec/poolparty/core/hash_spec.rb +30 -28
  200. data/spec/poolparty/core/object_spec.rb +2 -3
  201. data/spec/poolparty/core/ordered_hash_spec.rb +48 -0
  202. data/spec/poolparty/core/string_spec.rb +1 -27
  203. data/spec/poolparty/dependencies_spec.rb +11 -0
  204. data/spec/poolparty/dependency_resolver/chef_resolver_spec.rb +107 -0
  205. data/spec/poolparty/dependency_resolver/dependency_resolver_cloud_extensions_spec.rb +122 -0
  206. data/spec/poolparty/dependency_resolver/dependency_resolver_spec.rb +16 -0
  207. data/spec/poolparty/dependency_resolver/puppet_resolver_spec.rb +121 -0
  208. data/spec/poolparty/extra/deployments_spec.rb +9 -5
  209. data/spec/poolparty/fixtures/clouds.json +128 -0
  210. data/spec/poolparty/fixtures/test_template.erb +1 -0
  211. data/spec/poolparty/helpers/binary_spec.rb +1 -1
  212. data/spec/poolparty/helpers/hash_printer_spec.rb +34 -0
  213. data/spec/poolparty/helpers/optioner_spec.rb +1 -1
  214. data/spec/poolparty/id_rsa +27 -0
  215. data/spec/poolparty/modules/cloud_resourcer_spec.rb +26 -111
  216. data/spec/poolparty/modules/definable_resource.rb +1 -1
  217. data/spec/poolparty/modules/file_writer_spec.rb +10 -4
  218. data/spec/poolparty/modules/searchable_paths_spec.rb +76 -0
  219. data/spec/poolparty/monitors/base_monitor_spec.rb +112 -111
  220. data/spec/poolparty/monitors/monitors/cpu_monitor_spec.rb +18 -16
  221. data/spec/poolparty/monitors/monitors/memory_monitor_spec.rb +48 -47
  222. data/spec/poolparty/net/remote_instance_spec.rb +9 -73
  223. data/spec/poolparty/net/remote_spec.rb +287 -310
  224. data/spec/poolparty/net/remoter_base_spec.rb +3 -56
  225. data/spec/poolparty/net/remoter_bases/ec2_mocks_and_stubs.rb +24 -0
  226. data/spec/poolparty/net/remoter_bases/ec2_remote_instance_spec.rb +114 -0
  227. data/spec/poolparty/net/{remote_bases → remoter_bases}/ec2_spec.rb +51 -53
  228. data/spec/poolparty/net/remoter_spec.rb +96 -86
  229. data/spec/poolparty/plugins/chef_spec.rb +7 -0
  230. data/spec/poolparty/plugins/deploydirectory_spec.rb +51 -52
  231. data/spec/poolparty/plugins/git_spec.rb +16 -20
  232. data/spec/poolparty/plugins/line_spec.rb +14 -8
  233. data/spec/poolparty/poolparty/cloud_spec.rb +85 -183
  234. data/spec/poolparty/poolparty/configurers/files/ruby_basic.rb +3 -4
  235. data/spec/poolparty/poolparty/configurers/ruby_spec.rb +7 -23
  236. data/spec/poolparty/poolparty/{base_spec.rb → default_spec.rb} +44 -41
  237. data/spec/poolparty/poolparty/example_spec.rb +43 -11
  238. data/spec/poolparty/poolparty/key_spec.rb +42 -0
  239. data/spec/poolparty/poolparty/neighborhoods_spec.rb +65 -0
  240. data/spec/poolparty/poolparty/plugin_model_spec.rb +14 -24
  241. data/spec/poolparty/poolparty/plugin_spec.rb +25 -96
  242. data/spec/poolparty/poolparty/pool_spec.rb +3 -1
  243. data/spec/poolparty/poolparty/resource_spec.rb +70 -270
  244. data/spec/poolparty/poolparty/script_spec.rb +30 -53
  245. data/spec/poolparty/poolparty/service_spec.rb +5 -0
  246. data/spec/poolparty/poolparty/template_spec.rb +26 -0
  247. data/spec/poolparty/poolparty/test_plugins/webserver.rb +8 -25
  248. data/spec/poolparty/poolparty_base_class_spec.rb +84 -0
  249. data/spec/poolparty/poolparty_spec.rb +7 -4
  250. data/spec/poolparty/resources/cron_spec.rb +44 -0
  251. data/spec/poolparty/resources/directory_spec.rb +40 -0
  252. data/spec/poolparty/resources/exec_spec.rb +37 -0
  253. data/spec/poolparty/resources/file_spec.rb +64 -0
  254. data/spec/poolparty/resources/gem_spec.rb +7 -0
  255. data/spec/poolparty/resources/host_spec.rb +35 -0
  256. data/spec/poolparty/resources/package_spec.rb +26 -0
  257. data/spec/poolparty/resources/service_spec.rb +29 -0
  258. data/spec/poolparty/resources/sshkey_spec.rb +40 -0
  259. data/spec/poolparty/resources/symlink_spec.rb +29 -0
  260. data/spec/poolparty/resources/user_spec.rb +48 -0
  261. data/spec/poolparty/resources/variable_spec.rb +26 -0
  262. data/spec/poolparty/schema_spec.rb +53 -0
  263. data/spec/poolparty/spec_helper.rb +107 -23
  264. data/spec/poolparty/test_spec_helper.rb +13 -0
  265. data/tasks/development.rake +85 -69
  266. data/tasks/poolparty.rake +54 -0
  267. data/tasks/server.rake +41 -39
  268. data/tasks/spec.rake +35 -1
  269. data/test/fixtures/test_template.erb +1 -0
  270. data/test/poolparty/core/array_test.rb +21 -0
  271. data/test/poolparty/core/hash_test.rb +34 -0
  272. data/test/poolparty/core/string_test.rb +29 -0
  273. data/test/poolparty/dependency_resolver/puppet_resolver_test.rb +90 -0
  274. data/test/poolparty/modules/callbacks_test.rb +40 -0
  275. data/test/poolparty/modules/cloud_dsl_test.rb +60 -0
  276. data/test/poolparty/net/remoter_bases/vmrun/vmrun_test.rb +54 -0
  277. data/test/poolparty/net/remoter_test.rb +14 -0
  278. data/test/poolparty/poolparty/neighborhood_test.rb +23 -0
  279. data/test/poolparty/poolparty/poolparty_base_class_test.rb +84 -0
  280. data/test/poolparty/poolparty/template_test.rb +31 -0
  281. data/test/poolparty/provision/boot_strapper_test.rb +6 -0
  282. data/test/poolparty/provision/dr_configure_test.rb +6 -0
  283. data/test/poolparty/verification/verify_test.rb +49 -0
  284. data/test/test_helper.rb +8 -2
  285. data/test/test_poolparty.rb +6 -5
  286. data/vendor/chef/apache2/README.rdoc +59 -0
  287. data/vendor/chef/apache2/attributes/apache.rb +72 -0
  288. data/vendor/chef/apache2/definitions/apache_module.rb +36 -0
  289. data/vendor/chef/apache2/definitions/apache_site.rb +36 -0
  290. data/vendor/chef/apache2/definitions/web_app.rb +45 -0
  291. data/vendor/chef/apache2/files/default/apache2_module_conf_generate.pl +41 -0
  292. data/vendor/chef/apache2/recipes/default.rb +132 -0
  293. data/vendor/chef/apache2/recipes/mod_alias.rb +20 -0
  294. data/vendor/chef/apache2/recipes/mod_auth_basic.rb +20 -0
  295. data/vendor/chef/apache2/recipes/mod_auth_digest.rb +20 -0
  296. data/vendor/chef/apache2/recipes/mod_authn_file.rb +20 -0
  297. data/vendor/chef/apache2/recipes/mod_authnz_ldap.rb +20 -0
  298. data/vendor/chef/apache2/recipes/mod_authz_default.rb +20 -0
  299. data/vendor/chef/apache2/recipes/mod_authz_groupfile.rb +20 -0
  300. data/vendor/chef/apache2/recipes/mod_authz_host.rb +20 -0
  301. data/vendor/chef/apache2/recipes/mod_authz_user.rb +20 -0
  302. data/vendor/chef/apache2/recipes/mod_autoindex.rb +20 -0
  303. data/vendor/chef/apache2/recipes/mod_cgi.rb +20 -0
  304. data/vendor/chef/apache2/recipes/mod_dav.rb +20 -0
  305. data/vendor/chef/apache2/recipes/mod_dav_svn.rb +20 -0
  306. data/vendor/chef/apache2/recipes/mod_deflate.rb +20 -0
  307. data/vendor/chef/apache2/recipes/mod_dir.rb +20 -0
  308. data/vendor/chef/apache2/recipes/mod_env.rb +20 -0
  309. data/vendor/chef/apache2/recipes/mod_expires.rb +20 -0
  310. data/vendor/chef/apache2/recipes/mod_fcgid.rb +35 -0
  311. data/vendor/chef/apache2/recipes/mod_headers.rb +20 -0
  312. data/vendor/chef/apache2/recipes/mod_ldap.rb +20 -0
  313. data/vendor/chef/apache2/recipes/mod_log_config.rb +20 -0
  314. data/vendor/chef/apache2/recipes/mod_mime.rb +20 -0
  315. data/vendor/chef/apache2/recipes/mod_negotiation.rb +20 -0
  316. data/vendor/chef/apache2/recipes/mod_php5.rb +27 -0
  317. data/vendor/chef/apache2/recipes/mod_proxy.rb +20 -0
  318. data/vendor/chef/apache2/recipes/mod_proxy_http.rb +20 -0
  319. data/vendor/chef/apache2/recipes/mod_python.rb +22 -0
  320. data/vendor/chef/apache2/recipes/mod_rewrite.rb +20 -0
  321. data/vendor/chef/apache2/recipes/mod_setenvif.rb +20 -0
  322. data/vendor/chef/apache2/recipes/mod_ssl.rb +20 -0
  323. data/vendor/chef/apache2/recipes/mod_status.rb +20 -0
  324. data/vendor/chef/apache2/templates/default/a2dismod.erb +22 -0
  325. data/vendor/chef/apache2/templates/default/a2dissite.erb +29 -0
  326. data/vendor/chef/apache2/templates/default/a2enmod.erb +37 -0
  327. data/vendor/chef/apache2/templates/default/a2ensite.erb +38 -0
  328. data/vendor/chef/apache2/templates/default/apache2.conf.erb +630 -0
  329. data/vendor/chef/apache2/templates/default/default-site.erb +45 -0
  330. data/vendor/chef/apache2/templates/default/port_apache.erb +2 -0
  331. data/vendor/chef/apache2/templates/default/ports.conf.erb +6 -0
  332. data/vendor/chef/apache2/templates/default/web_app.conf.erb +43 -0
  333. data/vendor/chef/chef-deploy/LICENSE +201 -0
  334. data/vendor/chef/chef-deploy/README.rdoc +24 -0
  335. data/vendor/chef/chef-deploy/Rakefile +57 -0
  336. data/vendor/chef/chef-deploy/TODO +4 -0
  337. data/vendor/chef/chef-deploy/lib/chef-deploy/cached_deploy.rb +230 -0
  338. data/vendor/chef/chef-deploy/lib/chef-deploy/git.rb +132 -0
  339. data/vendor/chef/chef-deploy/lib/chef-deploy/subversion.rb +98 -0
  340. data/vendor/chef/chef-deploy/lib/chef-deploy.rb +183 -0
  341. data/vendor/gems/butterfly/History.txt +4 -0
  342. data/vendor/gems/butterfly/PostInstall.txt +2 -0
  343. data/vendor/gems/butterfly/README.rdoc +48 -0
  344. data/vendor/gems/butterfly/Rakefile +62 -0
  345. data/vendor/gems/butterfly/VERSION.yml +4 -0
  346. data/vendor/gems/butterfly/bin/flutter +4 -0
  347. data/vendor/gems/butterfly/butterfly.gemspec +37 -0
  348. data/vendor/gems/butterfly/examples/config.ru +15 -0
  349. data/vendor/gems/butterfly/examples/my_app.rb +12 -0
  350. data/vendor/gems/butterfly/lib/butterfly.rb +14 -0
  351. data/vendor/gems/butterfly/lib/handler.rb +48 -0
  352. data/vendor/gems/butterfly/lib/request.rb +29 -0
  353. data/vendor/gems/butterfly/lib/response.rb +49 -0
  354. data/vendor/gems/butterfly/script/console +10 -0
  355. data/vendor/gems/butterfly/script/destroy +14 -0
  356. data/vendor/gems/butterfly/script/generate +14 -0
  357. data/vendor/gems/butterfly/test/test_adapter_base.rb +23 -0
  358. data/vendor/gems/butterfly/test/test_butterfly_request.rb +46 -0
  359. data/vendor/gems/butterfly/test/test_butterfly_response.rb +43 -0
  360. data/vendor/gems/butterfly/test/test_butterfly_server.rb +16 -0
  361. data/vendor/gems/butterfly/test/test_default.rb +12 -0
  362. data/vendor/gems/butterfly/test/test_helper.rb +6 -0
  363. data/vendor/gems/dslify/History.txt +4 -0
  364. data/vendor/gems/dslify/Manifest.txt +25 -0
  365. data/vendor/gems/dslify/PostInstall.txt +5 -0
  366. data/vendor/gems/dslify/README.txt +60 -0
  367. data/vendor/gems/dslify/Rakefile +56 -0
  368. data/{config → vendor/gems/dslify/config}/hoe.rb +12 -55
  369. data/vendor/gems/dslify/config/requirements.rb +15 -0
  370. data/vendor/gems/dslify/dslify.gemspec +40 -0
  371. data/vendor/gems/dslify/lib/dslify/dslify.rb +76 -0
  372. data/vendor/gems/dslify/lib/dslify/version.rb +10 -0
  373. data/vendor/gems/dslify/lib/dslify.rb +7 -0
  374. data/vendor/gems/dslify/script/console +10 -0
  375. data/vendor/gems/dslify/script/destroy +14 -0
  376. data/vendor/gems/dslify/script/generate +14 -0
  377. data/{script → vendor/gems/dslify/script}/txt2html +4 -4
  378. data/{setup.rb → vendor/gems/dslify/setup.rb} +3 -3
  379. data/{tasks → vendor/gems/dslify/tasks}/deployment.rake +4 -18
  380. data/vendor/gems/dslify/tasks/environment.rake +7 -0
  381. data/{tasks → vendor/gems/dslify/tasks}/website.rake +0 -0
  382. data/vendor/gems/dslify/test/test_dslify.rb +138 -0
  383. data/vendor/gems/dslify/website/index.html +86 -0
  384. data/vendor/gems/dslify/website/index.txt +83 -0
  385. data/{website → vendor/gems/dslify/website}/javascripts/rounded_corners_lite.inc.js +0 -0
  386. data/{website → vendor/gems/dslify/website}/stylesheets/screen.css +18 -27
  387. data/{website → vendor/gems/dslify/website}/template.html.erb +1 -2
  388. data/vendor/gems/parenting/History.txt +4 -0
  389. data/vendor/gems/parenting/Manifest.txt +14 -0
  390. data/vendor/gems/parenting/PostInstall.txt +2 -0
  391. data/vendor/gems/parenting/README.rdoc +47 -0
  392. data/vendor/gems/parenting/Rakefile +28 -0
  393. data/vendor/gems/parenting/lib/parenting/parenting.rb +61 -0
  394. data/vendor/gems/parenting/lib/parenting.rb +10 -0
  395. data/vendor/gems/parenting/parenting.gemspec +39 -0
  396. data/vendor/gems/parenting/script/console +10 -0
  397. data/vendor/gems/parenting/script/destroy +14 -0
  398. data/vendor/gems/parenting/script/generate +14 -0
  399. data/vendor/gems/parenting/test/file_to_eval.rb +9 -0
  400. data/vendor/gems/parenting/test/test_helper.rb +5 -0
  401. data/vendor/gems/parenting/test/test_parenting.rb +117 -0
  402. data/vendor/gems/suitcase/LICENSE +20 -0
  403. data/vendor/gems/suitcase/README.rdoc +31 -0
  404. data/vendor/gems/suitcase/Rakefile +57 -0
  405. data/vendor/gems/suitcase/VERSION.yml +4 -0
  406. data/vendor/gems/suitcase/lib/suitcase/unzipper.rb +15 -0
  407. data/vendor/gems/suitcase/lib/suitcase/zipper.rb +119 -0
  408. data/vendor/gems/suitcase/lib/suitcase.rb +5 -0
  409. data/vendor/gems/suitcase/suitcase.gemspec +32 -0
  410. data/vendor/gems/suitcase/test/suitcase_test.rb +102 -0
  411. data/vendor/gems/suitcase/test/test_dir/box.rb +1 -0
  412. data/vendor/gems/suitcase/test/test_dir/test.txt +1 -0
  413. data/vendor/gems/suitcase/test/test_helper.rb +12 -0
  414. metadata +370 -343
  415. data/Capfile +0 -1
  416. data/Manifest.txt +0 -414
  417. data/bin/cloud-add-keypair +0 -28
  418. data/bin/cloud-ensure-provisioning +0 -39
  419. data/bin/cloud-maintain +0 -30
  420. data/bin/cloud-refresh +0 -17
  421. data/bin/cloud-run +0 -18
  422. data/bin/cloud-stats +0 -17
  423. data/bin/messenger-get-current-nodes +0 -14
  424. data/bin/pool +0 -31
  425. data/bin/pool-describe +0 -8
  426. data/bin/pool-generate +0 -18
  427. data/bin/pool-init +0 -28
  428. data/bin/pool-list +0 -30
  429. data/bin/pool-start +0 -26
  430. data/bin/server-build-messenger +0 -27
  431. data/bin/server-clean-cert-for +0 -15
  432. data/bin/server-list-responding +0 -24
  433. data/bin/server-start-client +0 -29
  434. data/bin/server-start-master +0 -26
  435. data/bin/server-start-node +0 -32
  436. data/bin/server-stop-client +0 -3
  437. data/bin/server-stop-master +0 -3
  438. data/bin/server-stop-node +0 -3
  439. data/bin/server-update-hosts +0 -49
  440. data/lib/erlang/messenger/Emakefile +0 -1
  441. data/lib/erlang/messenger/Makefile +0 -15
  442. data/lib/erlang/messenger/README +0 -5
  443. data/lib/erlang/messenger/Rakefile +0 -72
  444. data/lib/erlang/messenger/control +0 -11
  445. data/lib/erlang/messenger/ebin/client.app +0 -19
  446. data/lib/erlang/messenger/ebin/client_app.beam +0 -0
  447. data/lib/erlang/messenger/ebin/client_server.beam +0 -0
  448. data/lib/erlang/messenger/ebin/erl_crash.dump +0 -10326
  449. data/lib/erlang/messenger/ebin/master.app +0 -19
  450. data/lib/erlang/messenger/ebin/master_app.beam +0 -0
  451. data/lib/erlang/messenger/ebin/node.app +0 -19
  452. data/lib/erlang/messenger/ebin/node_app.beam +0 -0
  453. data/lib/erlang/messenger/ebin/packager.app +0 -19
  454. data/lib/erlang/messenger/ebin/pm_client.beam +0 -0
  455. data/lib/erlang/messenger/ebin/pm_client_old.beam +0 -0
  456. data/lib/erlang/messenger/ebin/pm_client_rel-0.1.rel +0 -1
  457. data/lib/erlang/messenger/ebin/pm_client_supervisor.beam +0 -0
  458. data/lib/erlang/messenger/ebin/pm_cluster.beam +0 -0
  459. data/lib/erlang/messenger/ebin/pm_event_manager.beam +0 -0
  460. data/lib/erlang/messenger/ebin/pm_master.beam +0 -0
  461. data/lib/erlang/messenger/ebin/pm_master_event_handler.beam +0 -0
  462. data/lib/erlang/messenger/ebin/pm_master_rel-0.1.rel +0 -1
  463. data/lib/erlang/messenger/ebin/pm_master_supervisor.beam +0 -0
  464. data/lib/erlang/messenger/ebin/pm_node.beam +0 -0
  465. data/lib/erlang/messenger/ebin/pm_node_rel-0.1.rel +0 -1
  466. data/lib/erlang/messenger/ebin/pm_node_supervisor.beam +0 -0
  467. data/lib/erlang/messenger/ebin/pm_packager.beam +0 -0
  468. data/lib/erlang/messenger/ebin/pm_spawner.beam +0 -0
  469. data/lib/erlang/messenger/ebin/pm_strings.beam +0 -0
  470. data/lib/erlang/messenger/ebin/utils.beam +0 -0
  471. data/lib/erlang/messenger/include/defines.hrl +0 -27
  472. data/lib/erlang/messenger/lib/eunit/AUTHORS +0 -2
  473. data/lib/erlang/messenger/lib/eunit/CHANGELOG +0 -14
  474. data/lib/erlang/messenger/lib/eunit/COPYING +0 -504
  475. data/lib/erlang/messenger/lib/eunit/Makefile +0 -28
  476. data/lib/erlang/messenger/lib/eunit/NOTES +0 -276
  477. data/lib/erlang/messenger/lib/eunit/README +0 -3
  478. data/lib/erlang/messenger/lib/eunit/doc/edoc-info +0 -3
  479. data/lib/erlang/messenger/lib/eunit/doc/erlang.png +0 -0
  480. data/lib/erlang/messenger/lib/eunit/doc/eunit.html +0 -172
  481. data/lib/erlang/messenger/lib/eunit/doc/index.html +0 -17
  482. data/lib/erlang/messenger/lib/eunit/doc/modules-frame.html +0 -12
  483. data/lib/erlang/messenger/lib/eunit/doc/overview-summary.html +0 -984
  484. data/lib/erlang/messenger/lib/eunit/doc/overview.edoc +0 -980
  485. data/lib/erlang/messenger/lib/eunit/doc/packages-frame.html +0 -11
  486. data/lib/erlang/messenger/lib/eunit/doc/stylesheet.css +0 -55
  487. data/lib/erlang/messenger/lib/eunit/ebin/autoload.beam +0 -0
  488. data/lib/erlang/messenger/lib/eunit/ebin/code_monitor.beam +0 -0
  489. data/lib/erlang/messenger/lib/eunit/ebin/eunit.app +0 -21
  490. data/lib/erlang/messenger/lib/eunit/ebin/eunit.appup +0 -1
  491. data/lib/erlang/messenger/lib/eunit/ebin/eunit.beam +0 -0
  492. data/lib/erlang/messenger/lib/eunit/ebin/eunit_autoexport.beam +0 -0
  493. data/lib/erlang/messenger/lib/eunit/ebin/eunit_data.beam +0 -0
  494. data/lib/erlang/messenger/lib/eunit/ebin/eunit_lib.beam +0 -0
  495. data/lib/erlang/messenger/lib/eunit/ebin/eunit_proc.beam +0 -0
  496. data/lib/erlang/messenger/lib/eunit/ebin/eunit_serial.beam +0 -0
  497. data/lib/erlang/messenger/lib/eunit/ebin/eunit_server.beam +0 -0
  498. data/lib/erlang/messenger/lib/eunit/ebin/eunit_striptests.beam +0 -0
  499. data/lib/erlang/messenger/lib/eunit/ebin/eunit_test.beam +0 -0
  500. data/lib/erlang/messenger/lib/eunit/ebin/eunit_tests.beam +0 -0
  501. data/lib/erlang/messenger/lib/eunit/ebin/eunit_tty.beam +0 -0
  502. data/lib/erlang/messenger/lib/eunit/ebin/file_monitor.beam +0 -0
  503. data/lib/erlang/messenger/lib/eunit/examples/eunit_examples.erl +0 -339
  504. data/lib/erlang/messenger/lib/eunit/examples/fib.erl +0 -19
  505. data/lib/erlang/messenger/lib/eunit/examples/tests.txt +0 -1
  506. data/lib/erlang/messenger/lib/eunit/include/eunit.hrl +0 -313
  507. data/lib/erlang/messenger/lib/eunit/src/Makefile +0 -46
  508. data/lib/erlang/messenger/lib/eunit/src/autoload.erl +0 -388
  509. data/lib/erlang/messenger/lib/eunit/src/code_monitor.erl +0 -243
  510. data/lib/erlang/messenger/lib/eunit/src/eunit.app.src +0 -21
  511. data/lib/erlang/messenger/lib/eunit/src/eunit.appup.src +0 -1
  512. data/lib/erlang/messenger/lib/eunit/src/eunit.erl +0 -196
  513. data/lib/erlang/messenger/lib/eunit/src/eunit_autoexport.erl +0 -102
  514. data/lib/erlang/messenger/lib/eunit/src/eunit_data.erl +0 -798
  515. data/lib/erlang/messenger/lib/eunit/src/eunit_internal.hrl +0 -48
  516. data/lib/erlang/messenger/lib/eunit/src/eunit_lib.erl +0 -682
  517. data/lib/erlang/messenger/lib/eunit/src/eunit_proc.erl +0 -552
  518. data/lib/erlang/messenger/lib/eunit/src/eunit_serial.erl +0 -157
  519. data/lib/erlang/messenger/lib/eunit/src/eunit_server.erl +0 -340
  520. data/lib/erlang/messenger/lib/eunit/src/eunit_striptests.erl +0 -64
  521. data/lib/erlang/messenger/lib/eunit/src/eunit_test.erl +0 -334
  522. data/lib/erlang/messenger/lib/eunit/src/eunit_tests.erl +0 -45
  523. data/lib/erlang/messenger/lib/eunit/src/eunit_tty.erl +0 -272
  524. data/lib/erlang/messenger/lib/eunit/src/file_monitor.erl +0 -409
  525. data/lib/erlang/messenger/lib/eunit/sys.config +0 -9
  526. data/lib/erlang/messenger/lib/eunit/vsn.mk +0 -1
  527. data/lib/erlang/messenger/pm_client_rel-0.1.boot +0 -0
  528. data/lib/erlang/messenger/pm_client_rel-0.1.script +0 -238
  529. data/lib/erlang/messenger/pm_master_rel-0.1.boot +0 -0
  530. data/lib/erlang/messenger/pm_master_rel-0.1.script +0 -239
  531. data/lib/erlang/messenger/pm_node_rel-0.1.boot +0 -0
  532. data/lib/erlang/messenger/pm_node_rel-0.1.script +0 -237
  533. data/lib/erlang/messenger/src/client_app.erl +0 -39
  534. data/lib/erlang/messenger/src/client_server.erl +0 -60
  535. data/lib/erlang/messenger/src/master_app.erl +0 -39
  536. data/lib/erlang/messenger/src/node_app.erl +0 -39
  537. data/lib/erlang/messenger/src/pm_client.erl +0 -49
  538. data/lib/erlang/messenger/src/pm_client_supervisor.erl +0 -38
  539. data/lib/erlang/messenger/src/pm_cluster.erl +0 -61
  540. data/lib/erlang/messenger/src/pm_event_manager.erl +0 -27
  541. data/lib/erlang/messenger/src/pm_master.erl +0 -215
  542. data/lib/erlang/messenger/src/pm_master_event_handler.erl +0 -72
  543. data/lib/erlang/messenger/src/pm_master_supervisor.erl +0 -39
  544. data/lib/erlang/messenger/src/pm_node.erl +0 -200
  545. data/lib/erlang/messenger/src/pm_node_supervisor.erl +0 -38
  546. data/lib/erlang/messenger/src/pm_packager.erl +0 -76
  547. data/lib/erlang/messenger/src/pm_spawner.erl +0 -213
  548. data/lib/erlang/messenger/src/pm_strings.erl +0 -11
  549. data/lib/erlang/messenger/src/utils.erl +0 -73
  550. data/lib/erlang/messenger/useful_snippets +0 -17
  551. data/lib/poolparty/capistrano.rb +0 -18
  552. data/lib/poolparty/config/postlaunchmessage.txt +0 -5
  553. data/lib/poolparty/dependency_resolutions/base.rb +0 -12
  554. data/lib/poolparty/modules/configurable.rb +0 -36
  555. data/lib/poolparty/modules/method_missing_sugar.rb +0 -58
  556. data/lib/poolparty/monitors/monitors/cpu_monitor.rb +0 -15
  557. data/lib/poolparty/monitors/monitors/web_monitor.rb +0 -18
  558. data/lib/poolparty/net/messenger.rb +0 -72
  559. data/lib/poolparty/net/remote.rb +0 -38
  560. data/lib/poolparty/net/remote_bases/ec2.rb +0 -190
  561. data/lib/poolparty/net/remoter.rb +0 -343
  562. data/lib/poolparty/plugins/deploydirectory.rb +0 -71
  563. data/lib/poolparty/plugins/line.rb +0 -77
  564. data/lib/poolparty/plugins/rsyncmirror.rb +0 -26
  565. data/lib/poolparty/poolparty/custom_resource.rb +0 -45
  566. data/lib/poolparty/poolparty/resources/class_package.rb +0 -105
  567. data/lib/poolparty/poolparty/resources/conditional.rb +0 -67
  568. data/lib/poolparty/poolparty/resources/cron.rb +0 -14
  569. data/lib/poolparty/poolparty/resources/custom_service.rb +0 -30
  570. data/lib/poolparty/poolparty/resources/directory.rb +0 -26
  571. data/lib/poolparty/poolparty/resources/exec.rb +0 -28
  572. data/lib/poolparty/poolparty/resources/file.rb +0 -23
  573. data/lib/poolparty/poolparty/resources/gem_package.rb +0 -52
  574. data/lib/poolparty/poolparty/resources/host.rb +0 -14
  575. data/lib/poolparty/poolparty/resources/mount.rb +0 -22
  576. data/lib/poolparty/poolparty/resources/package.rb +0 -24
  577. data/lib/poolparty/poolparty/resources/remote_file.rb +0 -26
  578. data/lib/poolparty/poolparty/resources/service.rb +0 -21
  579. data/lib/poolparty/poolparty/resources/sshkey.rb +0 -23
  580. data/lib/poolparty/poolparty/resources/symlink.rb +0 -25
  581. data/lib/poolparty/poolparty/resources/variable.rb +0 -32
  582. data/lib/poolparty/provisioners/capistrano/capistrano.rb +0 -127
  583. data/lib/poolparty/provisioners/capistrano/capistrano_configurer.rb +0 -58
  584. data/lib/poolparty/provisioners/capistrano/recipies/base.rb +0 -104
  585. data/lib/poolparty/provisioners/capistrano/recipies/master.rb +0 -121
  586. data/lib/poolparty/provisioners/capistrano/recipies/slave.rb +0 -12
  587. data/lib/poolparty/provisioners/provisioner_base.rb +0 -204
  588. data/lib/poolparty/spec/core/string.rb +0 -16
  589. data/lib/poolparty/spec/matchers/a_spec_extensions_base.rb +0 -26
  590. data/lib/poolparty/spec/matchers/have_cron.rb +0 -28
  591. data/lib/poolparty/spec/matchers/have_deploydirectory.rb +0 -15
  592. data/lib/poolparty/spec/matchers/have_directory.rb +0 -31
  593. data/lib/poolparty/spec/matchers/have_exec.rb +0 -28
  594. data/lib/poolparty/spec/matchers/have_file.rb +0 -28
  595. data/lib/poolparty/spec/matchers/have_gempackage.rb +0 -28
  596. data/lib/poolparty/spec/matchers/have_git.rb +0 -28
  597. data/lib/poolparty/spec/matchers/have_host.rb +0 -28
  598. data/lib/poolparty/spec/matchers/have_mount.rb +0 -28
  599. data/lib/poolparty/spec/matchers/have_package.rb +0 -28
  600. data/lib/poolparty/spec/matchers/have_remotefile.rb +0 -28
  601. data/lib/poolparty/spec/matchers/have_rsyncmirror.rb +0 -28
  602. data/lib/poolparty/spec/matchers/have_service.rb +0 -28
  603. data/lib/poolparty/spec/matchers/have_sshkey.rb +0 -28
  604. data/lib/poolparty/spec/matchers/have_symlink.rb +0 -28
  605. data/lib/poolparty/spec/matchers/have_variable.rb +0 -32
  606. data/lib/poolparty/spec/spec/dynamic_matchers.rb +0 -63
  607. data/lib/poolparty/spec/spec/ensure_matchers_exist.rb +0 -7
  608. data/lib/poolparty/spec/templates/have_base.rb +0 -28
  609. data/lib/poolparty/templates/puppet.conf +0 -26
  610. data/lib/poolparty/templates/puppetcleaner +0 -12
  611. data/lib/poolparty/templates/puppetrerun +0 -22
  612. data/lib/poolparty/version.rb +0 -9
  613. data/lib/poolpartyspec.rb +0 -34
  614. data/log/pool.log +0 -0
  615. data/poolparty.gemspec +0 -580
  616. data/spec/poolparty/dependency_resolutions/base_spec.rb +0 -11
  617. data/spec/poolparty/modules/configurable_spec.rb +0 -29
  618. data/spec/poolparty/net/log/pool.log +0 -0
  619. data/spec/poolparty/net/messenger_spec.rb +0 -16
  620. data/spec/poolparty/plugins/svn_spec.rb +0 -16
  621. data/spec/poolparty/poolparty/custom_resource_spec.rb +0 -120
  622. data/spec/poolparty/poolparty/resources/class_package_spec.rb +0 -120
  623. data/spec/poolparty/poolparty/resources/conditional_spec.rb +0 -77
  624. data/spec/poolparty/poolparty/resources/cron_spec.rb +0 -50
  625. data/spec/poolparty/poolparty/resources/directory_spec.rb +0 -40
  626. data/spec/poolparty/poolparty/resources/exec_spec.rb +0 -37
  627. data/spec/poolparty/poolparty/resources/file_spec.rb +0 -40
  628. data/spec/poolparty/poolparty/resources/gem_spec.rb +0 -46
  629. data/spec/poolparty/poolparty/resources/host_spec.rb +0 -28
  630. data/spec/poolparty/poolparty/resources/package_spec.rb +0 -44
  631. data/spec/poolparty/poolparty/resources/remote_file_spec.rb +0 -40
  632. data/spec/poolparty/poolparty/resources/service_spec.rb +0 -45
  633. data/spec/poolparty/poolparty/resources/sshkey_spec.rb +0 -48
  634. data/spec/poolparty/poolparty/resources/symlink_spec.rb +0 -22
  635. data/spec/poolparty/poolparty/resources/user_spec.rb +0 -38
  636. data/spec/poolparty/poolparty/resources/variable_spec.rb +0 -24
  637. data/spec/poolparty/provisioners/capistrano/capistrano_spec.rb +0 -27
  638. data/spec/poolparty/provisioners/provisioner_base_spec.rb +0 -120
  639. data/spec/poolparty/spec/core/string_spec.rb +0 -57
  640. data/website/index.html +0 -107
  641. data/website/index.txt +0 -95
  642. data/website/stylesheets/code.css +0 -29
@@ -1,47 +1,64 @@
1
1
  module PoolParty
2
- class Svn
2
+ class SvnResource
3
3
 
4
- define_resource(:svn) do
4
+ virtual_resource :svn do
5
+ def loaded(*args)
6
+ has_package :name => "subversion"
7
+ end
8
+ end
9
+
10
+ virtual_resource :svn_repos do
11
+
12
+ def loaded(opts={}, &block)
13
+ has_package("subversion")
14
+ has_svn_repository
15
+ end
16
+
17
+ def has_svn_repository
18
+ puts "wd #{working_dir}"
19
+ puts "cd #{creates_dir}"
20
+ has_directory(::File.dirname(working_dir))
21
+ has_directory(:name => "#{working_dir}", :requires => get_directory("#{::File.dirname(working_dir)}"))
22
+
23
+ has_exec(:name => "svn-#{name}", :requires => [get_directory("#{working_dir}"), get_package("subversion")] ) do
24
+ cwd working_dir
25
+ svn_cmd = if parent.requires_user?
26
+ "svn co #{source} --username #{requires_user} --password #{requires_password}"
27
+ else
28
+ "svn co #{source}"
29
+ end
30
+ command svn_cmd
31
+ creates creates_dir
32
+ end
33
+ has_exec(:name => "update-#{name}", :cwd => ::File.dirname( creates_dir )) do
34
+ command "svn up"
35
+ # If the parent has after_update_svn set on it, then run it
36
+ runs parent.after_update_svn if parent.after_update_svn?
37
+ end
38
+ end
39
+
40
+ def svn_repos(src)
41
+ source src
42
+ end
43
+
44
+ def at(dir)
45
+ working_dir dir
46
+ end
47
+
48
+ def to(dir)
49
+ at(dir)
50
+ end
51
+
52
+ def creates_dir
53
+ "#{::File.join( working_dir, ::File.basename(source, ::File.extname(source)) )}/.svn"
54
+ end
5
55
 
6
- def has_svnpath(opts={})
7
- call_custom_function <<-EOE
8
- svnserve { #{opts[:name]}:
9
- source => "#{opts[:source]}",
10
- path => "#{opts[:path]}",
11
- user => "#{opts[:user] || false}",
12
- password => "#{opts[:password] || ""}"
13
- }
14
- EOE
56
+ # Since svn is not a native type, we have to say which core resource
57
+ # it is using to be able to require it
58
+ def class_type_name
59
+ "exec"
15
60
  end
16
61
 
17
- custom_function <<-EOF
18
- # Serve subversion-based code from a local location. The job of this
19
- # module is to check the data out from subversion and keep it up to
20
- # date, especially useful for providing data to your Puppet server.
21
- define svnserve($source, $path, $user = false, $password = false) {
22
- file { $path:
23
- ensure => directory,
24
- owner => root,
25
- group => root
26
- }
27
- $svncmd = $user ? {
28
- false => "/usr/bin/svn co --non-interactive $source/$name .",
29
- default => "/usr/bin/svn co --non-interactive --username $user --password '$password' $source/$name ."
30
- }
31
- exec { "svnco-$name":
32
- command => $svncmd,
33
- cwd => $path,
34
- require => File[$path],
35
- creates => "$path/.svn"
36
- }
37
- exec { "svnupdate-$name":
38
- command => "/usr/bin/svn update",
39
- require => Exec["svnco-$name"],
40
- onlyif => '/usr/bin/svn status -u --non-interactive | /bin/grep "\*"',
41
- cwd => $path
42
- }
43
- }
44
- EOF
45
62
  end
46
63
 
47
64
  end
@@ -3,133 +3,143 @@ require File.dirname(__FILE__) + "/resource"
3
3
 
4
4
  module PoolParty
5
5
  module Cloud
6
- def cloud(name=:app, parent=self, &block)
7
- clouds.has_key?(name) ? clouds[name] : (clouds[name] = Cloud.new(name, parent, &block))
6
+ # Instantiate a new cloud
7
+ def cloud(name, &block)
8
+ clouds[name] ||= Cloud.new(name, &block)
8
9
  end
9
10
 
11
+ # Global hash of clouds
10
12
  def clouds
11
13
  $clouds ||= {}
12
14
  end
13
15
 
16
+ # TODO: Deprecate
14
17
  def with_cloud(cl, opts={}, &block)
15
18
  raise CloudNotFoundException.new("Cloud not found") unless cl
16
19
  cl.options.merge!(opts) if opts
17
20
  cl.run_in_context &block if block
18
21
  end
19
22
 
20
- class Cloud
21
- attr_reader :templates
23
+ class Cloud < PoolParty::PoolPartyBaseClass
24
+ attr_reader :templates, :cloud_name, :remote_base
25
+
26
+ include CloudResourcer
22
27
  include PoolParty::PluginModel
23
- include PoolParty::Resources
28
+ include PoolParty::Resources
29
+ include PoolParty::Callbacks
30
+ include PoolParty::DependencyResolverCloudExtensions
24
31
  include PrettyPrinter
25
- include Configurable
26
- include CloudResourcer
27
- include Provisioner
28
- # extend CloudResourcer
29
- # Net methods
30
- include Remote
32
+
33
+ # Net methods
34
+ include ::PoolParty::Remote
31
35
  include PoolParty::CloudDsl
36
+ include PoolParty::Verification
37
+ # include PoolParty::Monitors
38
+
39
+ def verbose
40
+ true
41
+ end
42
+
43
+ def self.immutable_methods
44
+ [:name]
45
+ end
46
+
47
+ # Redefining methods are not allowed
48
+ def self.method_added sym
49
+ raise "Exception: #{sym.to_s.capitalize} method has been redefined" if immutable_methods.include?(sym) && !respond_to?(sym)
50
+ end
51
+
52
+ alias :name :cloud_name
53
+
54
+ # Call the remoter commands on the cloud if they don't exist on the cloud itself
55
+ # This gives the cloud access to the remote_base's methods
56
+ def method_missing(m, *args, &block)
57
+ remote_base.respond_to?(m) ? remote_base.send(m, *args, &block) : super
58
+ end
32
59
 
33
- default_options({
60
+ # Default set of options. Most take the Default options from the default class
61
+ default_options(
62
+ :expand_when => Default.expand_when,
63
+ :contract_when => Default.contract_when,
34
64
  :minimum_instances => 2,
35
65
  :maximum_instances => 5,
36
- :contract_when => "cpu < 0.65",
37
- :expand_when => "cpu > 1.9",
38
- :access_key => Base.access_key,
39
- :secret_access_key => Base.secret_access_key,
66
+ :access_key => Default.access_key,
67
+ :secret_access_key => Default.secret_access_key,
40
68
  :ec2_dir => ENV["EC2_HOME"],
41
- :keypair => (ENV["KEYPAIR_NAME"].nil? || ENV["KEYPAIR_NAME"].empty?) ? nil : ENV["KEYPAIR_NAME"],
42
- :minimum_runtime => Base.minimum_runtime,
43
- :user => Base.user,
44
- :ami => 'ami-44bd592d'
45
- })
69
+ :minimum_runtime => Default.minimum_runtime,
70
+ :user => Default.user
71
+ )
46
72
 
47
- def initialize(name, pare=self, &block)
73
+ additional_callbacks [
74
+ "after_launch_instance"
75
+ ]
76
+
77
+ # Freeze the cloud_name so we can't modify it at all, set the plugin_directory
78
+ # call and run instance_eval on the block and then call the after_create callback
79
+ def initialize(name, &block)
48
80
  @cloud_name = name
49
81
  @cloud_name.freeze
50
-
51
- plugin_directory
52
-
53
- p = pare.is_a?(PoolParty::Pool::Pool) ? pare : nil
54
- store_block(&block)
55
- run_setup(p, &block)
56
82
 
57
- # set_parent(parent) if parent && !@parent
58
- # self.run_in_context parent, &block if block
59
- setup_defaults
60
- # realize_plugins!
61
- # reset! # reset the clouds
62
- # reset_remoter_base!
83
+ plugin_directory "#{pool_specfile ? ::File.dirname(pool_specfile) : Dir.pwd}/plugins"
84
+ before_create
85
+ super
86
+ after_create
63
87
  end
64
88
 
65
- def setup_defaults
66
- # this can be overridden in the spec, but ec2 is the default
67
- self.using :ec2
68
- generate_keypair unless has_keypair?
89
+ # Fetch the name of the cloud
90
+ def name(*args)
91
+ @cloud_name ||= @cloud_name ? @cloud_name : (args.empty? ? :default_cloud : args.first)
69
92
  end
70
93
 
71
- def name
72
- @cloud_name
73
- end
74
-
75
- # Keypairs
76
- # Let's just make sure that the keypair exists on the options
77
- def has_keypair?
78
- options.has_key?(:keypair) && options[:keypair] && !options[:keypair].empty?
79
- end
80
- # Generate a keypair based on the parent's name (if there is a parent)
81
- # and the cloud's name
82
- def generate_keypair(*args)
83
- options[:keypair] = "#{parent && parent.is_a?(PoolParty::Pool::Pool) ? parent.name : "poolparty"}_#{name}" unless has_keypair?
84
- end
85
-
86
- # Prepare to send the new configuration to the instances
87
- # First, let's make sure that our base directory is made
88
- # Then copy the templates that have no other reference in
89
- # a spec file. Make sure the keys are stored in a file
90
- # For the master to have access to them
91
- # Then, send the saved containing cloud instances to give the
92
- # remote master access to the cloud options that are required
93
- # for the master to run checks
94
- def prepare_for_configuration
95
- # clear_base_directory
96
- make_base_directory
97
- copy_misc_templates
98
- copy_custom_monitors
99
- store_keys_in_file
100
- Script.save!(self)
101
- # not my favorite...
102
- copy_ssh_key
103
- write_unique_cookie
104
- before_configuration_tasks
94
+ def before_create
95
+ context_stack.push self
96
+ (parent ? parent : self).add_poolparty_base_requirements
97
+ context_stack.pop
105
98
  end
106
99
 
107
- # Copy the ssh keys to the storage directory in preparation for
108
- # configuration
109
- def copy_ssh_key
110
- copy_file_to_storage_directory(full_keypair_path)
100
+ # Callback
101
+ # called after the cloud has been created, everything has run and is set at this point
102
+ # here the base requirements are added as well as an empty chef recipe is called
103
+ # Also, the after_create hook on the plugins used by the cloud are called here
104
+ def after_create
105
+ ::FileUtils.mkdir_p("#{Default.tmp_path}/dr_configure")
106
+
107
+ run_in_context do
108
+ add_optional_enabled_services
109
+ chef do
110
+ end
111
+ end
112
+
113
+ plugin_store.each {|a| a.call_after_create_callbacks }
114
+ setup_defaults
115
+
116
+ setup_callbacks
111
117
  end
112
118
 
113
- # Store our keys for cloud access in a file
114
- # that is specific to this cloud
115
- def store_keys_in_file
116
- Base.store_keys_in_file_for(self)
119
+ # setup defaults for the cloud
120
+ def setup_defaults
121
+ # this can be overridden in the spec, but ec2 is the default
122
+ using :ec2
123
+ options[:keypair] ||= keypair rescue nil
124
+ options[:rules] = {:expand => dsl_options[:expand_when], :contract => dsl_options[:contract_when]}
125
+ dependency_resolver 'chef'
126
+ # enable :haproxy unless dsl_options[:haproxy] == :disabled
117
127
  end
118
128
 
119
- # Let's write the cookie into the tmp path
120
- def write_unique_cookie
121
- write_to_file_in_storage_directory("cookie") do
122
- generate_unique_cookie_string
123
- end
129
+ def after_launch_instance(inst=nil)
130
+ remote_base.send :after_launch_instance, inst
124
131
  end
125
132
 
126
- # Generate a unique cookie string so that our erlang modules can
127
- # talk to each other safely. This is based off the keypair
128
- # and the name of the cloud
129
- def generate_unique_cookie_string
130
- Digest::SHA256.hexdigest("#{full_keypair_name}#{name}")
133
+ # provide list of public ips to get into the cloud
134
+ def ips
135
+ nodes(:status => "running").map {|ri| ri.ip }
131
136
  end
132
137
 
138
+ # TODO: make this be a random ip, since we should not rely on it being the same each time
139
+ def ip
140
+ ips.first
141
+ end
142
+
133
143
  # Build the new poolparty manifest
134
144
  # Wrapping all of these requirements into the one
135
145
  # poolparty class.
@@ -137,19 +147,14 @@ module PoolParty
137
147
  # TODO: Consider the benefits of moving all the manifest
138
148
  # classes to separate files and keeping the containing
139
149
  # references in the include
140
- def build_and_store_new_config_file(force=false)
150
+ def build_and_store_new_config_file(filepath=nil, force=false)
151
+ filepath ||= ::File.join(Default.storage_directory, "poolparty.pp")
152
+ # write_properties_hash if debugging
141
153
  vputs "Building new manifest configuration file (forced: #{force})"
142
154
  manifest = force ? rebuild_manifest : build_manifest
143
- config_file = ::File.join(Base.storage_directory, "poolparty.pp")
144
- ::File.open(config_file, "w") do |file|
155
+ ::File.open(filepath, "w") do |file|
145
156
  file << manifest
146
157
  end
147
- end
148
-
149
- def copy_misc_templates
150
- ["namespaceauth.conf", "puppet.conf", "gem"].each do |f|
151
- copy_file_to_storage_directory(::File.join(::File.dirname(__FILE__), "..", "templates", f))
152
- end
153
158
  end
154
159
 
155
160
  # If there is a directory named monitors in the same directory
@@ -159,70 +164,45 @@ module PoolParty
159
164
  # the monitors directory for any custom monitors
160
165
  # that are in known locations, these are included
161
166
  def copy_custom_monitors
162
- unless Base.custom_monitor_directories.empty?
163
- make_directory_in_storage_directory("monitors")
164
- Dir["#{Base.custom_monitor_directories}/*.rb"].each do |f|
165
- copy_file_to_storage_directory(f, "monitors")
167
+ unless Default.custom_monitor_directories.empty?
168
+ Default.custom_monitor_directories.each do |dir|
169
+ Dir["#{dir}/*.rb"].each {|f| ::Suitcase::Zipper.add(f, "monitors")}
166
170
  end
167
- end
171
+ end
168
172
  end
169
-
173
+
174
+ #FIXME MOVE TO DEPENDECY RESOL
170
175
  # Configuration files
171
176
  def build_manifest
172
177
  vputs "Building manifest"
173
178
  @build_manifest ||= build_from_existing_file
174
- unless @build_manifest
175
-
176
- add_poolparty_base_requirements
179
+ unless @build_manifest
180
+ props = to_properties_hash
177
181
 
178
- @build_manifest = "class poolparty {\n #{build_short_manifest}\n}"
182
+ @build_manifest = options[:dependency_resolver].send(:compile, props, self)
179
183
  end
184
+ dputs "Finished creating manifest"
180
185
  @build_manifest
181
186
  end
182
187
 
188
+ # Force rebuilding of the manifest
183
189
  def rebuild_manifest
184
190
  @build_manifest = nil
185
191
  build_manifest
186
192
  end
187
193
 
188
- def build_short_manifest
189
- returning Array.new do |str|
190
-
191
- # Refactor this into the resources method
192
- # TODO
193
- services.each do |service|
194
- service.options.merge!(:name => service.name)
195
- classpackage_with_self(service)
196
- end
197
-
198
- options.merge!(:name => "user")
199
- classpackage_with_self
200
- # resources.each do |type, res|
201
- # str << "# #{type.to_s.pluralize}"
202
- # str << res.to_string
203
- # end
204
-
205
- global_classpackages.each do |cls|
206
- str << cls.to_string
207
- end
208
-
209
- str << "# Custom functions"
210
- str << Resources::CustomResource.custom_functions_to_string
211
- end.join("\n")
212
- end
213
-
194
+ # If the pp already exists, then let's not recreate it
195
+ # TODO: Abstract
214
196
  def build_from_existing_file
215
- ::FileTest.file?("#{Base.manifest_path}/classes/poolparty.pp") ? open("#{Base.manifest_path}/classes/poolparty.pp").read : nil
197
+ ::FileTest.file?("#{Default.base_config_directory}/poolparty.pp") ? open("#{Default.base_config_directory}/poolparty.pp").read : nil
216
198
  end
217
199
 
218
- # To allow the remote instances to do their job,
219
- # they need a few options to run, these are the required options
220
- # to be saved on the remote "master" machine
221
- def minimum_runnable_options
222
- ([
223
- :keypair, :minimum_instances, :maximum_instances,
224
- :expand_when, :contract_when, :set_master_ip_to
225
- ]<< custom_minimum_runnable_options).flatten
200
+ def write_properties_hash(filename=::File.join(Default.tmp_path, Default.properties_hash_filename) )
201
+ file_path = ::File.dirname(filename)
202
+ file_name = "#{::File.basename(filename, ::File.extname(filename))}_#{name}#{::File.extname(filename)}"
203
+ output = to_properties_hash.to_json
204
+ ::File.open("#{file_path}/#{file_name}", "w") {|f| f.write output }
205
+ true
226
206
  end
227
207
 
228
208
  # Add all the poolparty requirements here
@@ -232,35 +212,25 @@ module PoolParty
232
212
  # all that is necessary in a method called enable
233
213
  # which is called when there is no block
234
214
  def add_poolparty_base_requirements
235
- heartbeat
236
- haproxy
237
- ruby
238
- poolparty_base_packages
239
- realize_plugins!(true) # Force realizing of the plugins
215
+ # poolparty_base_heartbeat
216
+ poolparty_base_ruby
217
+ poolparty_base_packages
240
218
  end
241
219
 
220
+ # TODO: Deprecate
242
221
  def other_clouds
243
- returning Array.new do |arr|
244
- clouds.each do |name, cl|
245
- arr << cl if name != self.name
246
- end
222
+ arr = []
223
+ clouds.each do |name, cl|
224
+ arr << cl if name != self.name
247
225
  end
226
+ arr
248
227
  end
249
228
 
229
+ # Reset the entire cloud
250
230
  def reset!
251
231
  reset_remoter_base!
252
- @build_manifest = @describe_instances = nil
253
- end
254
-
255
- # Add to the services pool for the manifest listing
256
- def add_service(serv)
257
- services << serv
258
- end
259
- # Container for the services
260
- def services
261
- @services ||= []
262
- end
263
-
232
+ @build_manifest = @describe_instances = @remote_instances_list = nil
233
+ end
264
234
  end
265
- end
266
- end
235
+ end
236
+ end
@@ -5,14 +5,20 @@
5
5
  require "open-uri"
6
6
  require "ftools"
7
7
  module PoolParty
8
- class Base
9
- include Configurable
10
- extend MethodMissingSugar
8
+ class Default
9
+ include Dslify
11
10
 
12
- default_options({
11
+ # def self.options
12
+ default_options(
13
+ :testing => false,
14
+ :debugging => false,
15
+ :minimum_instances => 2,
16
+ :maximum_instances => 5,
13
17
  :user => "root", # This should change here
14
18
  :base_keypair_path => "#{ENV["HOME"]}/.ec2",
19
+ :base_ssh_path => "#{ENV["HOME"]}/.ssh",
15
20
  :tmp_path => "/tmp/poolparty",
21
+ :poolparty_home_path => "#{ENV["HOME"]}/.poolparty",
16
22
  :remote_storage_path => "/var/poolparty",
17
23
  :remote_gem_path => "/var/poolparty/gems",
18
24
  :fileserver_base => "puppet://master/files",
@@ -20,33 +26,44 @@ module PoolParty
20
26
  :template_directory => "templates",
21
27
  :template_path => "/var/lib/puppet/templates",
22
28
  :module_path => "/etc/puppet/modules/poolparty",
23
- :default_specfile_name => "clouds.pool",
24
- :default_project_specfile_name => "spec/clouds.pool",
29
+ :default_specfile_name => "clouds.rb",
30
+ :properties_hash_filename => "clouds.json",
31
+ :vendor_path => "#{::File.dirname(__FILE__)}/../../../vendor",
32
+ :poolparty_src_path => "#{::File.dirname(__FILE__)}/../../..",
25
33
  :port => "80",
26
34
  :forwarding_port => "8080",
35
+ :monitor_port => 8081,
27
36
  :proxy_mode => "http",
28
- :messenger_client_port => 7050,
37
+ :butterfly_port => 8642,
29
38
  :minimum_runtime => 3000, #50.minutes in seconds
30
- # EC2 Options
31
- :ami => "ami-1cd73375",
32
- :size => 'm1.small', # must be 'm1.small', 'm1.large', 'm1.xlarge', 'c1.medium', or 'c1.xlarge'
33
- :availabilty_zone => "us-east-1a",
34
- :security_group => ["default"],
35
- # Options that should not be touched pretty much ever
36
- :manifest_path => "/etc/puppet/manifests"
37
- })
38
-
39
+ :contract_when => "load < 0.25",
40
+ :expand_when => "load > 0.9"
41
+ )
42
+
43
+ def options
44
+ default_options
45
+ end
46
+
39
47
  # Class methods
40
48
  class << self
41
- def options(h={})
42
- @options ||= default_options.merge(h)
49
+ def method_missing(m,*a,&block)
50
+ default_options.include?(m) ? default_options[m] : super
51
+ end
52
+ def options
53
+ default_options
43
54
  end
44
55
  # Get the access_key
45
56
  def access_key
46
- @access_key ||= ENV["AWS_ACCESS_KEY"] ? ENV["AWS_ACCESS_KEY"] : load_keys_from_file[:access_key]
57
+ @access_key ||= load_access_keys_from_environment_var || load_keys_from_file[:access_key]
58
+ end
59
+ def load_access_keys_from_environment_var
60
+ [ ENV["AWS_ACCESS_KEY"], ENV["AWS_ACCESS_KEY_ID"]].reject {|a| a.nil? }.first
47
61
  end
48
62
  def secret_access_key
49
- @secret_access_key ||= ENV["AWS_SECRET_ACCESS_KEY"] ? ENV["AWS_SECRET_ACCESS_KEY"] : load_keys_from_file[:secret_access_key]
63
+ @secret_access_key ||= load_secret_access_keys_from_environment_var || load_keys_from_file[:secret_access_key]
64
+ end
65
+ def load_secret_access_keys_from_environment_var
66
+ [ ENV["AWS_SECRET_ACCESS_KEY"] ].reject {|a| a.nil? }.first
50
67
  end
51
68
  def read_keyfile
52
69
  open(get_working_key_file_locations).read
@@ -71,6 +88,7 @@ module PoolParty
71
88
  def reset!
72
89
  @keys = nil
73
90
  end
91
+
74
92
  # Get the instance first instance file that exists on the system from the expected places
75
93
  # denoted in the local_instances_list_file_locations
76
94
  def get_working_key_file_locations
@@ -80,15 +98,24 @@ module PoolParty
80
98
  def key_file_locations
81
99
  [
82
100
  ".ppkeys",
83
- "#{Base.base_config_directory}/.ppkeys",
84
- "#{Base.storage_directory}/ppkeys",
101
+ "#{Default.base_config_directory}/.ppkeys",
102
+ "#{Default.storage_directory}/ppkeys",
85
103
  "~/.ppkeys",
86
104
  "ppkeys"
87
105
  ]
88
106
  end
107
+ def properties_hash_file
108
+ [
109
+ Default.base_config_directory,
110
+ Dir.pwd
111
+ ].collect do |dir|
112
+ full_dir = ::File.join(dir, Default.properties_hash_filename)
113
+ full_dir if ::File.file?(full_dir)
114
+ end.compact.first || "#{Default.base_config_directory}/#{Default.properties_hash_filename}"
115
+ end
89
116
  def storage_directory
90
117
  [
91
- "/var/poolparty"
118
+ "/var/poolparty"
92
119
  ].select do |dir|
93
120
  dir if viable_directory?(dir)
94
121
  end.first || ::File.join( "/tmp/poolparty")
@@ -98,12 +125,12 @@ module PoolParty
98
125
  "/var/log/poolparty"
99
126
  ].select do |dir|
100
127
  dir if viable_directory?(dir)
101
- end.first || ::File.join(Dir.pwd, "log")
128
+ end.first
102
129
  end
103
130
  # Assume the logs will be at the pool.log location within the
104
131
  # logger_location set above
105
132
  def pool_logger_location
106
- ::File.join(logger_location, "pool.log")
133
+ ::File.join(logger_location, "poolparty.log")
107
134
  end
108
135
  def custom_monitor_directories
109
136
  [
@@ -112,11 +139,21 @@ module PoolParty
112
139
  "#{Dir.pwd}/monitors"
113
140
  ].select {|d| d if viable_directory?(d) }
114
141
  end
142
+
143
+ def custom_modules_directories
144
+ [
145
+ "/var/poolparty/modules",
146
+ "/etc/poolparty/modules",
147
+ "#{Dir.pwd}/modules"
148
+ ].select {|d| d if viable_directory?(d) }
149
+ end
115
150
  # Only return true if the directory we are reading is both readable
116
151
  # and exists
117
152
  def viable_directory?(dir)
118
153
  ::File.directory?(dir) && ::File.readable?(dir)
119
154
  end
120
155
  end
156
+ #end of class methods
157
+
121
158
  end
122
159
  end