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
@@ -16,149 +16,152 @@
16
16
  register_remote_base :remote_base_name
17
17
 
18
18
  =end
19
- module PoolParty
20
19
 
21
- def register_remote_base(*args)
22
- args.each do |arg|
23
- (remote_bases << "#{arg}".downcase.to_sym)
24
- end
25
- end
26
-
27
- def remote_bases
28
- $remote_bases ||= []
29
- end
20
+ module PoolParty
30
21
 
31
22
  module Remote
32
- # This class is the base class for all remote types
23
+ # This class is the base class for all remote types, such as ec2
33
24
  # Everything remoting-wise is derived from this class
34
- module RemoterBaseMethods
25
+ class RemoterBase
26
+ include Dslify
27
+ include ::PoolParty::Remote
28
+
29
+ attr_reader :cloud
30
+
31
+ def initialize(prnt, opts={}, &block)
32
+ dsl_options prnt.options.merge(opts) if prnt && prnt.respond_to?(:options)
33
+ instance_eval &block if block
34
+ @cloud = prnt
35
+ end
36
+
37
+ def self.inherited(arg)
38
+ base_name = "#{arg}".downcase.top_level_class.to_sym
39
+ (remote_bases << base_name) unless remote_bases.include?(base_name)
40
+ end
41
+
42
+
43
+ # def method_missing(meth, *args, &block)
44
+ # if @cloud
45
+ # @cloud.send meth, *args, &block rescue super
46
+ # else
47
+ # super
48
+ # end
49
+ # end
50
+
35
51
  # Required methods
36
52
  # The next methods are required on all RemoteInstance types
37
53
  # If your RemoteInstance type does not overwrite the following methods
38
54
  # An exception will be raised and poolparty will explode into tiny little
39
55
  # pieces. Don't forget to overwrite these methods
40
56
  # Launch a new instance
41
- def launch_new_instance!
42
- raise RemoteException.new(:method_not_defined, "launch_new_instance!")
57
+ def self.launch_new_instance!(cld, o={})
58
+ new(cld, o).launch_new_instance!(o)
43
59
  end
60
+ def launch_new_instance!(o={})
61
+ raise RemoteException.new(:method_not_defined, "launch_new_instance!")
62
+ end
63
+
44
64
  # Terminate an instance by id
45
- def terminate_instance!(id=nil)
65
+ def self.terminate_instance!(cld, o={})
66
+ new(cld, o).terminate_instance!(o)
67
+ end
68
+ def terminate_instance!(o={})
46
69
  raise RemoteException.new(:method_not_defined, "terminate_instance!")
47
70
  end
71
+
48
72
  # Describe an instance's status
49
- def describe_instance(id=nil)
73
+ def self.describe_instance(cld, o={})
74
+ new(cld, o).describe_instance(o)
75
+ end
76
+ def describe_instance(o={})
50
77
  raise RemoteException.new(:method_not_defined, "describe_instance")
51
78
  end
79
+
52
80
  # Get instances
53
81
  # The instances must have a status associated with them on the hash
54
- def describe_instances
82
+ def self.describe_instances(cld, o={})
83
+ new(cld, o).describe_instances(o)
84
+ end
85
+ def describe_instances(o={})
55
86
  raise RemoteException.new(:method_not_defined, "describe_instances")
56
87
  end
57
88
 
58
- end
59
- module RemoterBase
60
- # The following methods are inherent on the RemoterBase
61
- # If you need to overwrite these methods, do so with caution
62
- # Listing methods
63
- def list_of_running_instances(list = list_of_nonterminated_instances)
64
- list.select {|a| a.running? }
65
- end
66
- # Get a list of the pending instances
67
- def list_of_pending_instances(list = list_of_nonterminated_instances)
68
- list.select {|a| a.pending? }
69
- end
70
- # list of shutting down instances
71
- def list_of_terminating_instances(list = remote_instances_list)
72
- list.reject {|i| true if !i.terminating? }
73
- end
74
- # Get the instances that are non-master instances
75
- def nonmaster_nonterminated_instances(list = list_of_nonterminated_instances)
76
- list_of_nonterminated_instances.reject {|i| i.master? }
77
- end
78
- # list all the nonterminated instances
79
- def list_of_nonterminated_instances(list = remote_instances_list)
80
- list.reject {|i| i.terminating? || i.terminated? }
81
- end
82
- # get the master instance
83
- def master
84
- get_instance_by_number(0)
85
- end
86
- # Get instance by number
87
- def get_instance_by_number(i=0, list = remote_instances_list)
88
- name = (i.zero? ? "master" : "node#{i}")
89
- list.select {|i| i.name == name }.first
90
- end
91
- # A callback before the configuration task takes place
92
- def before_configuration_tasks
93
- end
94
- def remote_instances_list
95
- @containing_cloud = self
96
- # puts "> #{@containing_cloud} #{@describe_instances.nil?}"
97
- list_of_instances(keypair).collect {|h| PoolParty::Remote::RemoteInstance.new(h, @containing_cloud) }
98
- end
99
- # List the instances for the current key pair, regardless of their states
100
- # If no keypair is passed, select them all
101
- def list_of_instances(keyp=nil)
102
- tmp_key = (keyp ? keyp : keypair).to_s
103
- unless @describe_instances
104
- tmpInstanceList = describe_instances.select {|a| a if tmp_key ? a[:keypair] == tmp_key : true }
105
- has_master = !tmpInstanceList.select {|a| a[:name] == "master" }.empty?
106
- if has_master
107
- @describe_instances = tmpInstanceList
108
- else
109
- @id = 0
110
- running = select_from_instances_on_status(/running/, tmpInstanceList)
111
- pending = select_from_instances_on_status(/pending/, tmpInstanceList)
112
- terminated = select_from_instances_on_status(/shutting/, tmpInstanceList)
89
+ # TODO: Rename and modularize the @inst.status =~ /pending/ so that it works on all
90
+ # remoter_bases
91
+ def launch_instance!(o={}, &block)
92
+ @inst = launch_new_instance!( o )
93
+ sleep(2)
94
+
95
+ cloud.dputs "#{cloud.name} launched instance checking for ip..."
96
+
97
+ # Wait for 10 minutes for the instance to gain an ip if it doesn't already have one
98
+ 500.times do |i|
99
+ break if @inst[:ip] =~ /\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}/
100
+ sleep(2)
101
+ @inst = describe_instance(@inst)
102
+ cloud.dprint "."
103
+ end
104
+ cloud.dputs "Found an ip"
105
+ cloud.dputs "#{@cloud.name} Launched instance #{@inst[:ip]}"
106
+ cloud.dputs " waiting for it to respond"
107
+
108
+ # Try for 10 minutes to pint port 22
109
+ 500.times do |i|
110
+ cloud.dprint "."
111
+ if ping_port(@inst[:ip], 22)
112
+ cloud.dputs ""
113
+ cloud.started_instance = @inst
113
114
 
114
- running = running.map do |inst|
115
- inst[:name] = (@id == 0 ? "master" : "node#{@id}")
116
- @id += 1
117
- inst
118
- end.sort_by {|a| a[:index] }
115
+ cloud.call_after_launch_instance_callbacks(@inst)
116
+ block.call(@inst) if block
119
117
 
120
- @describe_instances = [running, pending, terminated].flatten
118
+ return @inst
121
119
  end
120
+ sleep(2)
122
121
  end
123
- @describe_instances
124
- end
125
- # Select the instances based on their status
126
- def select_from_instances_on_status(status=/running/, list=[])
127
- list.select {|a| a[:status] =~ status}
128
- end
129
- # Helpers
130
- def create_keypair
122
+ raise "Instance not responding at #{inst.ip}"
131
123
  end
132
- # Reset the cache of descriptions
133
- def reset_remoter_base!
134
- @describe_instances = nil
124
+
125
+ def self.launch_instance!(cld, o={}, &block)
126
+ new(cld, o, &block).launch_instance!
135
127
  end
136
- def self.included(other)
137
- PoolParty.register_remote_base(self.class.to_s.downcase.to_sym)
128
+
129
+ # Called after an instance is launched
130
+ def after_launch_instance(instance=nil)
131
+ puts "after_launch_instance in remoter_base"
138
132
  end
133
+
134
+ #TODO: Remove
135
+ # def self.when_instance_is_responding(inst, &block)
136
+ # if ping_port(inst.ip, 22)
137
+ # block.call if block
138
+ # else
139
+ # raise "Instance not responding at #{inst.ip}"
140
+ # end
141
+ # end
142
+ # def when_instance_is_responding(inst, &block);self.class.when_instance_is_responding;end
139
143
 
140
- # Callback after loaded
141
- def loaded_remoter_base
144
+ # TODO: BAD FORM, already defined in connections.rb. Fix this, ASAP
145
+ def self.ping_port(host, port=22, retry_times=400)
146
+ connected = false
147
+ retry_times.times do |i|
148
+ begin
149
+ break if connected = TCPSocket.new(host, port).is_a?(TCPSocket)
150
+ rescue Exception => e
151
+ sleep(2)
152
+ end
153
+ end
154
+ connected
142
155
  end
143
156
 
144
- # Custom minimum runnable options
145
- # Extend the minimum runnable options that are necessary
146
- # for poolparty to run on the remote base
147
- def custom_minimum_runnable_options
148
- []
157
+ # After launch callback
158
+ # This is called after a new instance is launched
159
+ def after_launched(force=false)
149
160
  end
150
-
151
- # Custom installation tasks
152
- # Allow the remoter bases to attach their own tasks on the
153
- # installation process
154
- def custom_install_tasks_for(a=nil)
155
- []
156
- end
157
- # Custom configure tasks
158
- # Allows the remoter bases to attach their own
159
- # custom configuration tasks to the configuration process
160
- def custom_configure_tasks_for(a=nil)
161
- []
161
+
162
+ # Before shutdown callback
163
+ # This is called before the cloud is contracted
164
+ def before_shutdown
162
165
  end
163
166
 
164
167
  end
@@ -166,4 +169,6 @@ module PoolParty
166
169
  end
167
170
  end
168
171
 
169
- Dir["#{File.dirname(__FILE__)}/remote_bases/*.rb"].each {|base| require base }
172
+ Dir["#{File.dirname(__FILE__)}/remoter/*.rb"].each do |remoter_module|
173
+ require remoter_module
174
+ end
@@ -0,0 +1,245 @@
1
+ =begin rdoc
2
+ EC2 Remoter Base
3
+
4
+ This serves as the basis for running PoolParty on Amazon's ec2 cloud.
5
+ =end
6
+ require "date"
7
+ require "#{::File.dirname(__FILE__)}/ec2_response_object"
8
+
9
+ begin
10
+ require 'EC2'
11
+ rescue LoadError
12
+ puts <<-EOM
13
+ Error: In order to use ec2, you need to install the amazon-ec2 gem
14
+
15
+ Ec2 is the default remoter base for PoolParty. If you intend on using
16
+ a different remoter base, specify it with:
17
+
18
+ using :remoter_name
19
+
20
+ in your config file, otherwise, to continue install grempe-amazon-ec2 with
21
+
22
+ sudo gem install grempe-amazon-ec2 --source http://gems.github.com
23
+ EOM
24
+ end
25
+
26
+ class String
27
+ def convert_from_ec2_to_ip
28
+ self.gsub(/.compute-1.amazonaws.com*/, '').gsub(/ec2-/, '').gsub(/-/, '.')
29
+ end
30
+ def parse_datetime
31
+ DateTime.parse( self.chomp ) rescue self
32
+ end
33
+ end
34
+
35
+ module PoolParty
36
+ module Remote
37
+ class Ec2 < Remote::RemoterBase
38
+
39
+ default_options({
40
+ :image_id => 'ami-bf5eb9d6',
41
+ # :key_name => ::File.basename(keypair.is_a?(String) ? keypair : keypair.full_filepath),
42
+ :instance_type => 'm1.small', # or 'm1.large', 'm1.xlarge', 'c1.medium', or 'c1.xlarge'
43
+ :addressing_type => "public",
44
+ :availabilty_zone => "us-east-1a",
45
+ :security_group => ["default"]
46
+ })
47
+
48
+ # Requires a hash of options
49
+ def self.launch_new_instance!(parent_cloud, o)
50
+ new(parent_cloud, o).launch_new_instance!
51
+ end
52
+
53
+ # TODO: Fix the key_name issue
54
+ # Start a new instance with the given options
55
+ def launch_new_instance!(o={})
56
+ raise "You must pass a keypair to launch an instance, or else you will not be able to login. options = #{o.inspect}" if !cloud.keypair
57
+ o.merge!( options ).merge!(:key_name=>keypair.basename)
58
+ instance = ec2(o).run_instances(o)
59
+ begin
60
+ h = EC2ResponseObject.get_hash_from_response(instance.instancesSet.item.first)
61
+ #h = instance.instancesSet.item.first
62
+ rescue Exception => e
63
+ h = EC2ResponseObject.get_hash_from_response(instance) rescue instance
64
+ # h = instance
65
+ end
66
+ h
67
+ end
68
+ # Terminate an instance by id
69
+ def terminate_instance!(o={})
70
+ ec2(o).terminate_instances(:instance_id => o[:instance_id])
71
+ end
72
+ # Describe an instance's status
73
+ def describe_instance(o={})
74
+ return describe_instances.first if o[:instance_id].nil?
75
+ describe_instances.detect {|a| a[:name] == o[:instance_id] || a[:ip] == o[:instance_id] || a[:instance_id] == o[:instance_id] }
76
+ end
77
+ # TODO: Clean up this method and remove hostnames
78
+ def describe_instances(o={})
79
+ id = 0
80
+ get_instances_description(options.merge(o)).each_with_index do |h,i|
81
+ if h[:status] == "running"
82
+ inst_name = id == 0 ? "master" : "node#{id}"
83
+ id += 1
84
+ else
85
+ inst_name = "#{h[:status]}_node#{i}"
86
+ end
87
+ h.merge!({
88
+ :name => inst_name,
89
+ :hostname => h[:ip],
90
+ :ip => h[:ip].convert_from_ec2_to_ip,
91
+ :index => i, #TODO MF get the instance id from the aws result instead
92
+ :launching_time => (h[:launching_time])
93
+ })
94
+ end.compact.sort {|a,b| a[:index] <=> b[:index] }
95
+ end
96
+
97
+ # ===================================
98
+ # = Ec2 Specific methods below here =
99
+ # ===================================
100
+
101
+ # return or create a new base EC2 connection object that will actually connect to ec2
102
+ def ec2(o={})
103
+ @ec2 ||= EC2::Base.new( :access_key_id => o[:access_key],
104
+ :secret_access_key => o[:secret_access_key]
105
+ )
106
+ end
107
+ def self.ec2(o)
108
+ @ec2 ||= EC2::Base.new( :access_key_id => o[:access_key],
109
+ :secret_access_key => o[:secret_access_key]
110
+ )
111
+ end
112
+
113
+ # Get the ec2 description for the response in a hash format
114
+ def get_instances_description(o={})
115
+ #TODO: only use keypair.full_filepath
116
+ key_hash = {:keypair => ::File.basename(keypair.is_a?(String) ? keypair : keypair.full_filepath)}
117
+ EC2ResponseObject.get_descriptions(ec2(o).describe_instances).select_with_hash(key_hash)
118
+ end
119
+ def get_descriptions(o={})
120
+ self.class.get_descriptions(o)
121
+ end
122
+
123
+ def keypair
124
+ cloud.keypair
125
+ end
126
+
127
+ # Class method helpers
128
+ def aws_keys
129
+ unless @access_key && @secret_access_key
130
+ aws_keys = {}
131
+ aws_keys = YAML::load( File.open('/etc/poolparty/aws_keys.yml') ) rescue 'No aws_keys.yml file. Will try to use enviornment variables'
132
+ @access_key ||= aws_keys[:access_key] || ENV['AMAZON_ACCESS_KEY_ID'] || ENV['AWS_ACCESS_KEY']
133
+ @secret_access_key ||= aws_keys[:secret_access_key] || ENV['AMAZON_SECRET_ACCESS_KEY'] || ENV['AWS_SECRET_ACCESS_KEY']
134
+ end
135
+ [@access_key, @secret_access_key]
136
+ end
137
+
138
+ def after_launch_instance(inst)
139
+ if inst
140
+ associate_address(inst)
141
+ end
142
+ end
143
+
144
+ # Associate an address with the instance using ec2
145
+ # Get the next_unused_elastic_ip
146
+ # and if there is one, associate the instance to the
147
+ # public ip
148
+ def associate_address(instance=nil)
149
+ if ip = next_unused_elastic_ip
150
+ vputs "Associating #{instance.instance_id} with #{ip}"
151
+ ec2.associate_address(:instance_id => instance.instance_id, :public_ip => ip)
152
+ end
153
+ end
154
+
155
+ # Get the next usable elastic ip
156
+ # First, get the list of addresses from ec2 that the client
157
+ # has access to, then select only the ones that are not associated
158
+ # with an instance.
159
+ # If the cloud has set elastic_ips to use, then, using the
160
+ # intersection of the unused ips and those, find the first one available
161
+ # and return that, otherwise, return the first elastic ip available
162
+ def next_unused_elastic_ip
163
+ # [{"instanceId"=>nil, "publicIp"=>"174.129.212.93"}, {"instanceId"=>nil, "publicIp"=>"174.129.212.94"}]
164
+ if addressesSet = ec2(options).describe_addresses["addressesSet"]
165
+ begin
166
+ empty_addresses = addressesSet["item"].select {|i| i["instanceId"].nil? }
167
+ ips = empty_addresses.map {|addr| addr["publicIp"]}
168
+ if cloud.elastic_ips?
169
+ ips_to_use = cloud.elastic_ips & ips
170
+ ips_to_use.first
171
+ else
172
+ ips.first
173
+ end
174
+ rescue Exception => e
175
+ puts "Error: #{e}"
176
+ nil
177
+ end
178
+ end
179
+ end
180
+
181
+ # Help create a keypair for the cloud
182
+ # This is a helper to create the keypair and add them to the cloud for you
183
+ def create_keypair
184
+ return false unless keypair
185
+ unless ::File.exists?( new_keypair_path )
186
+ FileUtils.mkdir_p ::File.dirname( new_keypair_path )
187
+ vputs "Creating keypair: #{keypair} in #{new_keypair_path}"
188
+ Kernel.system "ec2-add-keypair #{keypair} > #{new_keypair_path} && chmod 600 #{new_keypair_path}"
189
+ end
190
+ end
191
+
192
+ # wrapper for remote base to perform a snapshot backup for the ebs volume
193
+ def create_snapshot
194
+ return nil if ebs_volume_id.nil?
195
+ ec2.create_snapshot(:volume_id => ebs_volume_id)
196
+ end
197
+
198
+ def has_cert_and_key?
199
+ pub_key && private_key
200
+ end
201
+ # The keys are used only for puppet certificates
202
+ # and are only used for EC2.
203
+ # Public key
204
+ def pub_key
205
+ @pub_key ||= ENV["EC2_CERT"] ? ENV["EC2_CERT"] : nil
206
+ end
207
+ # Private key
208
+ def private_key
209
+ @private_key ||= ENV["EC2_PRIVATE_KEY"] ? ENV["EC2_PRIVATE_KEY"] : nil
210
+ end
211
+
212
+ def custom_minimum_runnable_options
213
+ [:ami, :availabilty_zone, :security_group]
214
+ end
215
+
216
+ # Hook
217
+ #TODO#: Change this so they match with the cap tasks
218
+ def custom_install_tasks_for(o)
219
+ [
220
+ # "if [ -z $(grep -v '#' /etc/hosts | grep '#{o.name}') ]; then echo \"$(curl http://169.254.169.254/latest/meta-data/public-ipv4) #{o.name}\" >> /etc/hosts; fi",
221
+ "if [ -z \"$(grep -v '#' /etc/hosts | grep '#{o.name}')\" ]; then echo '127.0.0.1 #{o.name}' >> /etc/hosts; fi",
222
+ "hostname #{o.name}",
223
+ "echo #{o.name} > /etc/hostname"
224
+ ]
225
+ end
226
+
227
+ def after_install_tasks_for(o)
228
+ [
229
+ # "cd /var/poolparty && wget http://rubyforge.org/frs/download.php/43666/amazon-ec2-0.3.1.gem -O amazon-ec2.gem 2>&1",
230
+ # "/usr/bin/gem install --no-ri --no-rdoc amazon-ec2.gem 2>&1"
231
+ ]
232
+ end
233
+
234
+ def custom_configure_tasks_for(o)
235
+ [
236
+ ]
237
+ end
238
+
239
+ def reset_base!
240
+ @describe_instances = @cached_descriptions = nil
241
+ end
242
+ end
243
+
244
+ end
245
+ end
@@ -0,0 +1,53 @@
1
+ module PoolParty
2
+ module Remote
3
+ class Ec2RemoteInstance < RemoteInstance
4
+ include Dslify
5
+
6
+ attr_reader :my_cloud, :uniquely_identifiable_by, :found_at
7
+
8
+
9
+ # A new instance will be created from the passed in hash.
10
+ # This hash of passed in values will be converted to methods on this instance.
11
+ # The parent clouds describe_instances list will be searched for the first one matching any of this instance's provided unique identifiers.
12
+ # If an instance is found, this instance's properties will be set to the properties provided
13
+ # If the found instance has properties of the same key as the provided options, the found instance's values will override the passed in options
14
+ def initialize(opts={}, prnt=Ec2.new)
15
+ @uniquely_identifiable_by = [:ip, :name, :dns_name, :instance_id]
16
+ @original_options = opts
17
+ @my_cloud = prnt
18
+ super(opts, prnt)
19
+ find_myself(@uniquely_identifiable_by && opts.keys) if prnt.respond_to?(:describe_instances)
20
+ end
21
+
22
+ # Search the clouds describe_instances list for the first match on one of this nodes unique identifiers
23
+ def find_myself(unique_identifiers = @original_options.keys)
24
+ description_hash = @my_cloud.describe_instances.detect do|node|
25
+ unique_identifiers.detect{|identifier_key| node[identifier_key] == options[identifier_key]
26
+ }
27
+ end
28
+ return nil if description_hash.blank?
29
+ @found_at = Time.now
30
+ self.set_vars_from_options(description_hash)
31
+ self
32
+ end
33
+
34
+ # Is this instance running?
35
+ def running?
36
+ !(status =~ /running/).nil?
37
+ end
38
+ # Is this instance pending?
39
+ def pending?
40
+ !(status =~ /pending/).nil?
41
+ end
42
+ # Is this instance terminating?
43
+ def terminating?
44
+ !(status =~ /shutting/).nil?
45
+ end
46
+ # Has this instance been terminated?
47
+ def terminated?
48
+ !(status =~ /terminated/).nil?
49
+ end
50
+
51
+ end
52
+ end
53
+ end
@@ -1,3 +1,5 @@
1
+ # Convenience class to convert standard amazon-ec2 responses from their camel cased style to a hash using underscore style.
2
+ # For example: instanceId to instance_id
1
3
  class EC2ResponseObject
2
4
  def self.get_descriptions(resp)
3
5
  rs = get_instance_from_response(resp)
@@ -48,7 +50,6 @@ class EC2ResponseObject
48
50
  group
49
51
  end
50
52
  def self.get_hash_from_response(resp, group = 'default')
51
- begin
52
53
  {
53
54
  :instance_id => resp.instanceId,
54
55
  :name => resp.instanceId,
@@ -59,8 +60,5 @@ class EC2ResponseObject
59
60
  :keypair => resp.keyName,
60
61
  :security_group => group
61
62
  }
62
- rescue Exception => e
63
- nil
64
- end
65
63
  end
66
64
  end
@@ -0,0 +1,12 @@
1
+ class VmxDisk
2
+ include Dslify
3
+
4
+ def initialize(o={})
5
+ dsl_options o
6
+ end
7
+
8
+ def compile
9
+ %x[qemu-img create -f vmdk #{base_directory}/#{name}/#{name}.vmdk #{options[:vmx_disk][:image_size]} ]
10
+ "#{base_directory}/#{name}/#{name}.vmdk"
11
+ end
12
+ end
@@ -0,0 +1,33 @@
1
+ =begin rdoc
2
+ Vmx file creator
3
+
4
+ Usage:
5
+ Vmx.new({
6
+ :name => "MyPP",
7
+ :vmx_disk => {
8
+ :image_size => "2G"
9
+ },
10
+ :base_directory => "/tmp/vmx"
11
+ }).compile
12
+ =end
13
+ class Vmx
14
+ include Dslify
15
+
16
+ default_options(
17
+ :name => "PoolParty",
18
+ :base_directory => "~/Documents/Virtual\ Machines.localized"
19
+ )
20
+
21
+ def initialize(o={})
22
+ dsl_options o
23
+ @vmx_file = VmxFile.new o
24
+ @vmx_disk = VmxDisk.new o
25
+ end
26
+
27
+ def compile
28
+ ::FileUtils.mkdir_p "#{base_directory}/#{options[:name]}"
29
+ vmdk = @vmx_disk.compile
30
+ @vmx_file.set("ide0:0.fileName", vmdk)
31
+ @vmx_file.compile
32
+ end
33
+ end