fairchild-poolparty 1.1.5 → 1.2.12

Sign up to get free protection for your applications and to get access to all the features.
Files changed (385) hide show
  1. data/History.txt +3 -0
  2. data/README.txt +13 -9
  3. data/Rakefile +0 -1
  4. data/VERSION.yml +2 -2
  5. data/bin/cloud +43 -46
  6. data/bin/cloud-bootstrap +33 -23
  7. data/bin/cloud-configure +33 -34
  8. data/bin/cloud-console +31 -9
  9. data/bin/cloud-contract +27 -11
  10. data/bin/cloud-expand +32 -19
  11. data/bin/cloud-list +43 -15
  12. data/bin/cloud-osxcopy +22 -12
  13. data/bin/cloud-provision +39 -24
  14. data/bin/cloud-run +37 -0
  15. data/bin/cloud-setup-dev +31 -20
  16. data/bin/cloud-show +40 -21
  17. data/bin/cloud-ssh +24 -15
  18. data/bin/cloud-start +33 -19
  19. data/bin/cloud-terminate +34 -15
  20. data/bin/cloud-verify +41 -0
  21. data/bin/install-poolparty +22 -0
  22. data/bin/server-cloud-elections +17 -23
  23. data/bin/server-list-active +23 -22
  24. data/bin/server-manage-election +14 -23
  25. data/bin/server-show-stats +1 -1
  26. data/config/jeweler.rb +6 -6
  27. data/examples/basic.rb +13 -14
  28. data/examples/fairchild.rb +25 -20
  29. data/examples/maize.rb +37 -0
  30. data/examples/metavirt_cloud.rb +33 -0
  31. data/examples/simple.rb +13 -0
  32. data/examples/vmrun_cloud.rb +17 -0
  33. data/lib/poolparty/{aska/aska.rb → aska.rb} +3 -0
  34. data/lib/poolparty/core/array.rb +13 -1
  35. data/lib/poolparty/core/exception.rb +1 -1
  36. data/lib/poolparty/core/hash.rb +63 -2
  37. data/lib/poolparty/core/integer.rb +11 -0
  38. data/lib/poolparty/core/object.rb +41 -19
  39. data/lib/poolparty/core/proc.rb +0 -7
  40. data/lib/poolparty/core/string.rb +35 -2
  41. data/lib/poolparty/core/symbol.rb +10 -0
  42. data/lib/poolparty/core/time.rb +6 -0
  43. data/lib/poolparty/dependency_resolver/chef_resolver.rb +40 -41
  44. data/lib/poolparty/dependency_resolver/dependency_resolver.rb +1 -1
  45. data/lib/poolparty/dependency_resolver/dependency_resolver_cloud_extensions.rb +6 -6
  46. data/lib/poolparty/dependency_resolver/puppet.rb +0 -1
  47. data/lib/poolparty/dependency_resolver/puppet_resolver.rb +14 -48
  48. data/lib/poolparty/exceptions/MasterException.rb +2 -2
  49. data/lib/poolparty/extra/duration.rb +96 -0
  50. data/lib/poolparty/helpers/binary.rb +1 -1
  51. data/lib/poolparty/helpers/console.rb +0 -5
  52. data/lib/poolparty/helpers/optioner.rb +18 -13
  53. data/lib/poolparty/installers/base_installer.rb +113 -0
  54. data/lib/poolparty/installers/ec2.rb +141 -0
  55. data/lib/poolparty/installers/vmrun.rb +144 -0
  56. data/lib/poolparty/lite.rb +5 -2
  57. data/lib/poolparty/modules/callbacks.rb +15 -2
  58. data/lib/poolparty/modules/cloud_dsl.rb +10 -8
  59. data/lib/poolparty/modules/cloud_resourcer.rb +39 -59
  60. data/lib/poolparty/modules/daemonizable.rb +4 -5
  61. data/lib/poolparty/modules/definable_resource.rb +6 -7
  62. data/lib/poolparty/modules/file_writer.rb +2 -2
  63. data/lib/poolparty/modules/output.rb +2 -2
  64. data/lib/poolparty/modules/pinger.rb +9 -2
  65. data/lib/poolparty/modules/pretty_printer.rb +1 -1
  66. data/lib/poolparty/modules/resourcing_dsl.rb +1 -29
  67. data/lib/poolparty/modules/searchable_paths.rb +100 -0
  68. data/lib/poolparty/modules/user_helpers.rb +1 -1
  69. data/lib/poolparty/monitors/base_monitor.rb +65 -0
  70. data/lib/poolparty/monitors/monitor_daemon.rb +168 -0
  71. data/lib/poolparty/monitors/monitor_rack.rb +29 -15
  72. data/lib/poolparty/monitors/monitors/{time_monitor.rb → clock_monitor.rb} +7 -2
  73. data/lib/poolparty/monitors/monitors/cloud_monitor.rb +36 -0
  74. data/lib/poolparty/monitors/monitors/elections_monitor.rb +76 -0
  75. data/lib/poolparty/monitors/monitors/neighborhood_monitor.rb +15 -12
  76. data/lib/poolparty/monitors/monitors/stats_monitor.rb +68 -49
  77. data/lib/poolparty/net/init.rb +12 -7
  78. data/lib/poolparty/net/remote_instance.rb +48 -64
  79. data/lib/poolparty/net/remoter/cloud_control.rb +0 -177
  80. data/lib/poolparty/net/remoter/connections.rb +19 -14
  81. data/lib/poolparty/net/remoter/interactive.rb +30 -24
  82. data/lib/poolparty/net/remoter_base.rb +140 -48
  83. data/lib/poolparty/net/remoter_bases/ec2/ec2.rb +119 -71
  84. data/lib/poolparty/net/remoter_bases/ec2/ec2_remote_instance.rb +42 -31
  85. data/lib/poolparty/net/remoter_bases/ec2/ec2_response_object.rb +75 -10
  86. data/lib/poolparty/net/remoter_bases/libvirt/libvirt.rb +73 -0
  87. data/lib/poolparty/net/remoter_bases/libvirt/libvirt_instance.rb +64 -0
  88. data/lib/poolparty/net/remoter_bases/metavirt/metavirt.rb +110 -0
  89. data/lib/poolparty/net/remoter_bases/metavirt/metavirt_instance.rb +37 -0
  90. data/lib/poolparty/net/remoter_bases/vmrun/utilities/vm_disk.rb +1 -1
  91. data/lib/poolparty/net/remoter_bases/vmrun/utilities/vmx.rb +1 -1
  92. data/lib/poolparty/net/remoter_bases/vmrun/utilities/vmx_file.rb +117 -117
  93. data/lib/poolparty/net/remoter_bases/vmrun/vmrun.rb +59 -43
  94. data/lib/poolparty/net/remoter_bases/vmrun/vmrun_instance.rb +37 -21
  95. data/lib/poolparty/plugins/apache2/apache.rb +266 -0
  96. data/lib/poolparty/plugins/apache2/passenger_site.rb +86 -0
  97. data/lib/poolparty/plugins/apache2/php5.rb +40 -0
  98. data/lib/poolparty/plugins/apache2/virtual_host.rb +53 -0
  99. data/lib/poolparty/plugins/authorized_key.rb +29 -0
  100. data/lib/poolparty/plugins/bind.rb +5 -6
  101. data/lib/poolparty/plugins/{chef.rb → chef/chef.rb} +32 -44
  102. data/lib/poolparty/plugins/chef/chef_deploy.rb +55 -0
  103. data/lib/poolparty/plugins/chef/chef_deploy_definition.rb +32 -0
  104. data/lib/poolparty/plugins/chef/chef_library.rb +7 -0
  105. data/lib/poolparty/plugins/chef/chef_recipe.rb +7 -0
  106. data/lib/poolparty/plugins/chef/include_chef_recipe.rb +14 -0
  107. data/lib/poolparty/plugins/deploy_directory.rb +41 -26
  108. data/lib/poolparty/plugins/gem_package.rb +42 -14
  109. data/lib/poolparty/plugins/git.rb +62 -33
  110. data/lib/poolparty/{base_packages → plugins}/haproxy.rb +21 -20
  111. data/lib/poolparty/plugins/heartbeat.rb +16 -0
  112. data/lib/poolparty/plugins/host.rb +39 -0
  113. data/lib/poolparty/plugins/line_in_file.rb +24 -2
  114. data/lib/poolparty/plugins/plugin_template.rb +13 -0
  115. data/lib/poolparty/{base_packages/poolparty.rb → plugins/poolparty_base_packages.rb} +4 -6
  116. data/lib/poolparty/plugins/rails_deploy.rb +128 -0
  117. data/lib/poolparty/{base_packages → plugins}/ruby.rb +3 -3
  118. data/lib/poolparty/plugins/runit.rb +17 -92
  119. data/lib/poolparty/plugins/sshkey.rb +50 -0
  120. data/lib/poolparty/plugins/svn.rb +10 -8
  121. data/lib/poolparty/poolparty/cloud.rb +224 -61
  122. data/lib/poolparty/poolparty/default.rb +22 -15
  123. data/lib/poolparty/poolparty/key.rb +19 -28
  124. data/lib/poolparty/poolparty/neighborhoods.rb +16 -5
  125. data/lib/poolparty/poolparty/plugin.rb +49 -13
  126. data/lib/poolparty/poolparty/pool.rb +32 -9
  127. data/lib/poolparty/poolparty/poolparty_base_class.rb +65 -45
  128. data/lib/poolparty/poolparty/resource.rb +24 -49
  129. data/lib/poolparty/poolparty/service.rb +11 -9
  130. data/lib/poolparty/provision/boot_strapper.rb +48 -37
  131. data/lib/poolparty/provision/configurations/chef.rb +6 -5
  132. data/lib/poolparty/provision/dr_configure.rb +25 -19
  133. data/lib/poolparty/resources/cron.rb +37 -4
  134. data/lib/poolparty/resources/directory.rb +30 -0
  135. data/lib/poolparty/resources/exec.rb +31 -1
  136. data/lib/poolparty/resources/file.rb +54 -12
  137. data/lib/poolparty/resources/group.rb +21 -0
  138. data/lib/poolparty/resources/mount.rb +24 -4
  139. data/lib/poolparty/resources/package.rb +30 -6
  140. data/lib/poolparty/resources/remote_file.rb +33 -1
  141. data/lib/poolparty/resources/service.rb +22 -1
  142. data/lib/poolparty/resources/symlink.rb +37 -2
  143. data/lib/poolparty/resources/user.rb +25 -0
  144. data/lib/poolparty/resources/variable.rb +26 -1
  145. data/lib/poolparty/resources.rb +42 -0
  146. data/lib/poolparty/schema.rb +6 -8
  147. data/lib/poolparty/templates/apache2/apache2.conf +14 -0
  148. data/lib/poolparty/templates/apache2/base.conf.erb +168 -0
  149. data/lib/poolparty/templates/apache2/browser_fixes.conf.erb +26 -0
  150. data/lib/poolparty/templates/apache2/debian.conf.erb +675 -0
  151. data/lib/poolparty/templates/apache2/default-site.conf.erb +41 -0
  152. data/lib/poolparty/templates/apache2/directory_indexes.conf.erb +101 -0
  153. data/lib/poolparty/templates/apache2/logging-syslog.conf.erb +42 -0
  154. data/lib/poolparty/templates/apache2/mime-extras.conf.erb +211 -0
  155. data/lib/poolparty/templates/apache2/mime-minimal.conf.erb +15 -0
  156. data/lib/poolparty/templates/apache2/mpm-worker.conf.erb +20 -0
  157. data/lib/poolparty/templates/apache2/mpm-worker.erb +20 -0
  158. data/lib/poolparty/templates/apache2/passenger.conf.erb +20 -0
  159. data/lib/poolparty/templates/apache2/php.ini.erb +1253 -0
  160. data/lib/poolparty/templates/apache2/server-status.erb +19 -0
  161. data/lib/poolparty/templates/{gemrc → gemrc_template} +0 -0
  162. data/lib/poolparty/templates/haproxy.conf +2 -2
  163. data/lib/poolparty/templates/monitor.ru +13 -0
  164. data/lib/poolparty/templates/php.ini.erb +1253 -0
  165. data/lib/poolparty/verification/verifier_base.rb +10 -0
  166. data/lib/poolparty/verification/verifiers/http_match.rb +43 -0
  167. data/lib/poolparty/verification/verifiers/http_status.rb +59 -0
  168. data/lib/poolparty/verification/verifiers/ping.rb +18 -1
  169. data/lib/poolparty/verification/verify.rb +6 -0
  170. data/lib/poolparty.rb +14 -15
  171. data/lib/poolpartycl.rb +1 -1
  172. data/spec/bin/bin_spec_helper.rb +1 -0
  173. data/spec/bin/fixtures/bin_cloud_for_test.rb +0 -6
  174. data/spec/bin/server-list-active_spec.rb +4 -6
  175. data/spec/poolparty/core/object_spec.rb +1 -62
  176. data/spec/poolparty/core/ordered_hash_spec.rb +7 -7
  177. data/spec/poolparty/core/string_spec.rb +1 -1
  178. data/spec/poolparty/dependency_resolver/chef_resolver_spec.rb +0 -8
  179. data/spec/poolparty/dependency_resolver/dependency_resolver_cloud_extensions_spec.rb +35 -32
  180. data/spec/poolparty/extra/deployments_spec.rb +68 -68
  181. data/spec/poolparty/fixtures/clouds.json +1 -1
  182. data/spec/poolparty/fixtures/fake_key.pub +1 -0
  183. data/spec/poolparty/helpers/optioner_spec.rb +4 -11
  184. data/spec/poolparty/modules/cloud_resourcer_spec.rb +1 -1
  185. data/spec/poolparty/modules/searchable_paths_spec.rb +83 -0
  186. data/spec/poolparty/net/remote_instance_spec.rb +1 -2
  187. data/spec/poolparty/net/remoter_base_spec.rb +7 -11
  188. data/spec/poolparty/net/remoter_bases/ec2_mocks_and_stubs.rb +9 -11
  189. data/spec/poolparty/net/remoter_bases/ec2_remote_instance_spec.rb +6 -56
  190. data/spec/poolparty/net/remoter_bases/ec2_spec.rb +10 -7
  191. data/spec/poolparty/net/remoter_spec.rb +2 -3
  192. data/spec/poolparty/plugins/authorized_key_spec.rb +23 -0
  193. data/spec/poolparty/plugins/deploydirectory_spec.rb +64 -51
  194. data/spec/poolparty/plugins/git_spec.rb +8 -10
  195. data/spec/poolparty/poolparty/cloud_spec.rb +61 -64
  196. data/spec/poolparty/poolparty/configurers/files/ruby_basic.rb +2 -4
  197. data/spec/poolparty/poolparty/configurers/files/ruby_plugins.rb +1 -1
  198. data/spec/poolparty/poolparty/configurers/ruby_spec.rb +1 -6
  199. data/spec/poolparty/poolparty/default_spec.rb +23 -22
  200. data/spec/poolparty/poolparty/example_spec.rb +47 -26
  201. data/spec/poolparty/{base_packages → poolparty}/haproxy_spec.rb +1 -1
  202. data/spec/poolparty/{base_packages → poolparty}/heartbeat_spec.rb +1 -1
  203. data/spec/poolparty/poolparty/key_spec.rb +2 -2
  204. data/spec/poolparty/poolparty/neighborhoods_spec.rb +1 -1
  205. data/spec/poolparty/poolparty/plugin_model_spec.rb +13 -17
  206. data/spec/poolparty/poolparty/plugin_spec.rb +7 -7
  207. data/spec/poolparty/poolparty/pool_spec.rb +4 -10
  208. data/spec/poolparty/poolparty/resource_spec.rb +25 -29
  209. data/spec/poolparty/poolparty/script_spec.rb +1 -4
  210. data/spec/poolparty/poolparty/test_plugins/webserver.rb +27 -25
  211. data/spec/poolparty/resources/file_spec.rb +5 -4
  212. data/spec/poolparty/resources/sshkey_spec.rb +39 -40
  213. data/spec/poolparty/spec_helper.rb +9 -39
  214. data/tasks/poolparty.rake +29 -1
  215. data/tasks/spec.rake +39 -1
  216. data/test/fixtures/fake_clouds.rb +11 -0
  217. data/test/fixtures/metavirt_cloud.json +1 -0
  218. data/test/fixtures/test_key +1 -0
  219. data/test/poolparty/core/array_test.rb +11 -0
  220. data/test/poolparty/core/hash_test.rb +5 -7
  221. data/test/poolparty/core/object_test.rb +29 -0
  222. data/test/poolparty/dependency_resolver/chef_resolver_test.rb +82 -0
  223. data/test/poolparty/dependency_resolver/puppet_resolver_test.rb +5 -26
  224. data/test/poolparty/modules/callbacks_test.rb +1 -1
  225. data/test/poolparty/modules/cloud_dsl_test.rb +10 -8
  226. data/test/poolparty/monitors/test_base_monitor.rb +17 -0
  227. data/test/poolparty/monitors/test_monitor_rack.rb +26 -0
  228. data/test/poolparty/net/remoter_base_test.rb +17 -0
  229. data/test/poolparty/net/remoter_bases/libvirt/libvirt_test.rb +70 -0
  230. data/test/poolparty/net/remoter_bases/metavirt/metavirt_test.rb +81 -0
  231. data/test/poolparty/net/remoter_bases/vmrun/vmrun_test.rb +58 -27
  232. data/test/poolparty/plugins/chef_deploy_test.rb +37 -0
  233. data/test/poolparty/plugins/chef_plugin_test.rb +23 -0
  234. data/test/poolparty/plugins/rails_deploy_test.rb +50 -0
  235. data/test/poolparty/poolparty/cloud_test.rb +65 -0
  236. data/test/poolparty/poolparty/isolated_cloud_test.rb +25 -0
  237. data/test/poolparty/poolparty/neighborhood_test.rb +1 -1
  238. data/test/poolparty/poolparty/plugin_test.rb +19 -0
  239. data/test/poolparty/poolparty/pool_test.rb +22 -0
  240. data/test/poolparty/poolparty/poolparty_base_class_test.rb +53 -15
  241. data/test/poolparty/poolparty/schema_test.rb +13 -0
  242. data/test/poolparty/poolparty/template_test.rb +6 -6
  243. data/test/poolparty/verification/verify_test.rb +7 -3
  244. data/test/test_helper.rb +15 -4
  245. data/test/test_methods.rb +11 -0
  246. data/vendor/chef/apache2/attributes/apache.rb +1 -1
  247. data/vendor/gems/dslify/LICENSE +20 -0
  248. data/vendor/gems/dslify/README.rdoc +33 -0
  249. data/vendor/gems/dslify/Rakefile +56 -0
  250. data/vendor/gems/dslify/VERSION.yml +4 -0
  251. data/vendor/gems/dslify/dslify.gemspec +29 -0
  252. data/vendor/gems/dslify/lib/dslify.rb +81 -0
  253. data/vendor/gems/dslify/test/dslify_test.rb +283 -0
  254. data/vendor/gems/dslify/test/test_helper.rb +7 -0
  255. data/vendor/gems/git-style-binaries/README.markdown +280 -0
  256. data/vendor/gems/git-style-binaries/Rakefile +64 -0
  257. data/vendor/gems/git-style-binaries/VERSION.yml +4 -0
  258. data/vendor/gems/git-style-binaries/doc/EXAMPLES +1 -0
  259. data/vendor/gems/git-style-binaries/doc/gsb-screencast.png +0 -0
  260. data/vendor/gems/git-style-binaries/doc/poolparty-binaries.screenplay +412 -0
  261. data/vendor/gems/git-style-binaries/git-style-binaries.gemspec +78 -0
  262. data/vendor/gems/git-style-binaries/lib/ext/colorize.rb +198 -0
  263. data/vendor/gems/git-style-binaries/lib/ext/core.rb +16 -0
  264. data/vendor/gems/git-style-binaries/lib/git-style-binary/autorunner.rb +21 -0
  265. data/vendor/gems/git-style-binaries/lib/git-style-binary/command.rb +204 -0
  266. data/vendor/gems/git-style-binaries/lib/git-style-binary/commands/help.rb +32 -0
  267. data/vendor/gems/git-style-binaries/lib/git-style-binary/helpers/name_resolver.rb +78 -0
  268. data/vendor/gems/git-style-binaries/lib/git-style-binary/helpers/pager.rb +37 -0
  269. data/vendor/gems/git-style-binaries/lib/git-style-binary/parser.rb +223 -0
  270. data/vendor/gems/git-style-binaries/lib/git-style-binary.rb +88 -0
  271. data/vendor/gems/git-style-binaries/test/fixtures/flickr +4 -0
  272. data/vendor/gems/git-style-binaries/test/fixtures/flickr-download +17 -0
  273. data/vendor/gems/git-style-binaries/test/fixtures/wordpress +42 -0
  274. data/vendor/gems/git-style-binaries/test/fixtures/wordpress-categories +18 -0
  275. data/vendor/gems/git-style-binaries/test/fixtures/wordpress-list +18 -0
  276. data/vendor/gems/git-style-binaries/test/fixtures/wordpress-post +26 -0
  277. data/vendor/gems/git-style-binaries/test/git-style-binary/command_test.rb +17 -0
  278. data/vendor/gems/git-style-binaries/test/git_style_binary_test.rb +21 -0
  279. data/vendor/gems/git-style-binaries/test/running_binaries_test.rb +224 -0
  280. data/vendor/gems/git-style-binaries/test/shoulda_macros/matching_stdio.rb +13 -0
  281. data/vendor/gems/git-style-binaries/test/test_helper.rb +28 -0
  282. data/vendor/gems/parenting/History.txt +4 -0
  283. data/vendor/gems/parenting/Manifest.txt +14 -0
  284. data/vendor/gems/parenting/PostInstall.txt +2 -0
  285. data/vendor/gems/parenting/README.rdoc +47 -0
  286. data/vendor/gems/parenting/Rakefile +28 -0
  287. data/vendor/gems/parenting/lib/parenting/parenting.rb +70 -0
  288. data/vendor/gems/parenting/lib/parenting.rb +10 -0
  289. data/vendor/gems/parenting/parenting.gemspec +39 -0
  290. data/vendor/gems/parenting/script/console +10 -0
  291. data/vendor/gems/parenting/script/destroy +14 -0
  292. data/vendor/gems/parenting/script/generate +14 -0
  293. data/vendor/gems/parenting/test/file_to_eval.rb +9 -0
  294. data/vendor/gems/parenting/test/test_helper.rb +5 -0
  295. data/vendor/gems/parenting/test/test_parenting.rb +117 -0
  296. data/vendor/gems/suitcase/LICENSE +20 -0
  297. data/vendor/gems/suitcase/README.rdoc +31 -0
  298. data/vendor/gems/suitcase/Rakefile +57 -0
  299. data/vendor/gems/suitcase/VERSION.yml +4 -0
  300. data/vendor/gems/suitcase/lib/suitcase/unzipper.rb +15 -0
  301. data/vendor/gems/suitcase/lib/suitcase/zipper.rb +167 -0
  302. data/vendor/gems/suitcase/lib/suitcase.rb +5 -0
  303. data/vendor/gems/suitcase/suitcase.gemspec +32 -0
  304. data/vendor/gems/suitcase/test/suitcase_test.rb +108 -0
  305. data/vendor/gems/suitcase/test/test_dir/box.rb +1 -0
  306. data/vendor/gems/suitcase/test/test_dir/gems/famoseagle-carrot-0.6.0.gem +0 -0
  307. data/vendor/gems/suitcase/test/test_dir/test.txt +1 -0
  308. data/vendor/gems/suitcase/test/test_helper.rb +12 -0
  309. data/vendor/gems/trollop/FAQ.txt +35 -0
  310. data/vendor/gems/trollop/History.txt +97 -0
  311. data/vendor/gems/trollop/Manifest.txt +7 -0
  312. data/vendor/gems/trollop/README.txt +40 -0
  313. data/vendor/gems/trollop/Rakefile +36 -0
  314. data/vendor/gems/trollop/lib/trollop.rb +735 -0
  315. data/vendor/gems/trollop/release-script.txt +13 -0
  316. data/vendor/gems/trollop/test/test_trollop.rb +1042 -0
  317. data/vendor/gems/trollop/www/index.html +167 -0
  318. metadata +205 -150
  319. data/bin/cloud-describe +0 -28
  320. data/bin/cloud-handle-load +0 -27
  321. data/bin/cloud-rsync +0 -28
  322. data/bin/cloud-spec +0 -41
  323. data/bin/messenger-get-current-nodes +0 -14
  324. data/bin/server-become-master +0 -24
  325. data/bin/server-build-messenger +0 -28
  326. data/bin/server-clean-cert-for +0 -15
  327. data/bin/server-provision +0 -32
  328. data/bin/server-start-agent +0 -15
  329. data/bin/server-start-client +0 -29
  330. data/bin/server-start-master +0 -26
  331. data/bin/server-start-node +0 -32
  332. data/bin/server-stop-client +0 -3
  333. data/bin/server-stop-master +0 -3
  334. data/bin/server-stop-node +0 -3
  335. data/bin/server-update-hosts +0 -49
  336. data/examples/poolparty.rb +0 -12
  337. data/lib/poolparty/base_packages/heartbeat.rb +0 -58
  338. data/lib/poolparty/base_packages/runit.rb +0 -21
  339. data/lib/poolparty/capistrano/cloud_tasks.rb +0 -10
  340. data/lib/poolparty/capistrano.rb +0 -54
  341. data/lib/poolparty/config/postlaunchmessage.txt +0 -5
  342. data/lib/poolparty/core/metaid.rb +0 -15
  343. data/lib/poolparty/core/module.rb +0 -40
  344. data/lib/poolparty/extra/deployments.rb +0 -31
  345. data/lib/poolparty/helpers/display.rb +0 -30
  346. data/lib/poolparty/net/messenger.rb +0 -57
  347. data/lib/poolparty/net/remote_bases.rb +0 -21
  348. data/lib/poolparty/plugins/chef_deploy.rb +0 -58
  349. data/lib/poolparty/plugins/dynomite.rb +0 -14
  350. data/lib/poolparty/plugins/nanite.rb +0 -41
  351. data/lib/poolparty/plugins/rsyncmirror.rb +0 -28
  352. data/lib/poolparty/plugins/tokyo_tyrant.rb +0 -23
  353. data/lib/poolparty/poolparty/plugin_model.rb +0 -45
  354. data/lib/poolparty/resources/host.rb +0 -16
  355. data/lib/poolparty/resources/sshkey.rb +0 -27
  356. data/lib/poolparty/services/conditional.rb +0 -46
  357. data/lib/poolparty/spec/core/string.rb +0 -18
  358. data/lib/poolparty/spec/matchers/a_spec_extensions_base.rb +0 -26
  359. data/lib/poolparty/spec/matchers/have_cron.rb +0 -28
  360. data/lib/poolparty/spec/matchers/have_deploydirectory.rb +0 -15
  361. data/lib/poolparty/spec/matchers/have_directory.rb +0 -31
  362. data/lib/poolparty/spec/matchers/have_exec.rb +0 -28
  363. data/lib/poolparty/spec/matchers/have_file.rb +0 -28
  364. data/lib/poolparty/spec/matchers/have_gempackage.rb +0 -28
  365. data/lib/poolparty/spec/matchers/have_git.rb +0 -28
  366. data/lib/poolparty/spec/matchers/have_host.rb +0 -28
  367. data/lib/poolparty/spec/matchers/have_mount.rb +0 -28
  368. data/lib/poolparty/spec/matchers/have_package.rb +0 -28
  369. data/lib/poolparty/spec/matchers/have_remotefile.rb +0 -28
  370. data/lib/poolparty/spec/matchers/have_rsyncmirror.rb +0 -28
  371. data/lib/poolparty/spec/matchers/have_service.rb +0 -28
  372. data/lib/poolparty/spec/matchers/have_sshkey.rb +0 -28
  373. data/lib/poolparty/spec/matchers/have_symlink.rb +0 -28
  374. data/lib/poolparty/spec/matchers/have_variable.rb +0 -32
  375. data/lib/poolparty/spec/spec/dynamic_matchers.rb +0 -63
  376. data/lib/poolparty/spec/spec/ensure_matchers_exist.rb +0 -7
  377. data/lib/poolparty/spec/templates/have_base.rb +0 -28
  378. data/lib/poolparty/spec.rb +0 -31
  379. data/spec/poolparty/core/module_spec.rb +0 -15
  380. data/spec/poolparty/helpers/display_spec.rb +0 -13
  381. data/spec/poolparty/id_rsa +0 -27
  382. data/spec/poolparty/net/messenger_spec.rb +0 -16
  383. data/spec/poolparty/resources/host_spec.rb +0 -35
  384. data/spec/poolparty/services/conditional_spec.rb +0 -52
  385. data/spec/poolparty/spec/core/string_spec.rb +0 -57
@@ -20,13 +20,12 @@
20
20
  =end
21
21
  module PoolParty
22
22
 
23
- class ChefResolver< DependencyResolver
23
+ class ChefResolver < DependencyResolver
24
24
 
25
25
  # Compile and add to the zipper
26
26
  def compile(props=@properties_hash, tabs=0, default_namespace="poolparty")
27
27
  base_dir(default_namespace)
28
28
  build_base_recipe_directory( default_namespace )
29
-
30
29
  # ::Suitcase::Zipper.add( base_dir, "chef/cookbooks")
31
30
 
32
31
  _compile(props, tabs, default_namespace)
@@ -39,18 +38,13 @@ module PoolParty
39
38
 
40
39
  def comp(cld_name, props, tabs)
41
40
 
42
- default_recipe = [
43
- resources_to_string(props[:resources],tabs),
44
- services_to_string(props[:services],tabs)
45
- ].join("\n")
46
-
41
+ default_recipe = resources_to_string(props[:resources],tabs)
47
42
  ::File.open("#{base_dir}/recipes/default.rb", "w+") {|f| f << default_recipe }
48
43
 
49
44
  default_recipe
50
45
  end
51
46
 
52
47
  def build_base_recipe_directory(nm)
53
- dputs "Making new #{base_dir}"
54
48
  ::FileUtils.mkdir_p "#{base_dir}"
55
49
 
56
50
  [ "recipes", "templates", "attributes" ].each do |bdir|
@@ -65,7 +59,11 @@ module PoolParty
65
59
  end
66
60
 
67
61
  def base_dir(nm="poolparty")
68
- @base_dir ||= "#{Default.tmp_path}/dr_configure/chef/cookbooks/#{nm}"
62
+ @base_dir ||= "#{tmp_path}/dr_configure/chef/cookbooks/#{nm}"
63
+ end
64
+
65
+ def tmp_path
66
+ the_cloud ? the_cloud.tmp_path : "#{Default.tmp_path}/pool/cloud"
69
67
  end
70
68
 
71
69
  def options_to_string(opts,tabs=0)
@@ -73,7 +71,7 @@ module PoolParty
73
71
  end
74
72
 
75
73
  def resources_to_string(opts,tabs=0)
76
- out = []
74
+ out = []
77
75
  out << opts.map do |resource|
78
76
  case ty = resource.delete(:pp_type)
79
77
  when "variable"
@@ -82,6 +80,8 @@ module PoolParty
82
80
  "#{tf(tabs)}include_recipe #{to_option_string(resource.name)}"
83
81
  when "chef_library"
84
82
  "#{tf(tabs)}require #{to_option_string("/etc/chef/lib/#{resource.name}")}"
83
+ when "plugin"
84
+ handle_print_service(resource, tabs)
85
85
  else
86
86
  real_type = handle_chef_types(ty)
87
87
  real_name = resource[:name]
@@ -89,22 +89,22 @@ module PoolParty
89
89
  "#{tf(tabs)}#{real_type} \"#{real_name}\" do\n#{tf(tabs+1)}#{hash_flush_out(res).compact.join("\n#{tf(tabs+1)}")}\n#{tf(tabs)}end"
90
90
  end
91
91
  end
92
- out.join("\n")
92
+ out.compact.join("\n")
93
93
  end
94
94
 
95
95
  def handle_print_variable(varhash)
96
96
  o = []
97
97
  if varhash[:namespace]
98
98
  o << ["\n#{varhash[:namespace]} Mash.new unless attribute?('#{varhash[:namespace]}')"]
99
- o << "#{varhash[:namespace]}[:#{varhash[:name]}] = #{to_option_string(varhash[:value])}\n"
99
+ o << "#{varhash[:namespace]}['#{varhash[:name]}'] = #{to_option_string(varhash[:value])}\n"
100
100
  else
101
- o << "poolparty[:#{varhash[:name]}] = #{to_option_string(varhash[:value])}"
101
+ o << "poolparty['#{varhash[:name]}'] = #{to_option_string(varhash[:value])}"
102
102
  end
103
103
  ::File.open("#{base_dir}/attributes/poolparty.rb", "a+") do |f|
104
104
  f << o.join("\n")
105
105
  f << "\n"
106
106
  end
107
- ""
107
+ nil
108
108
  end
109
109
 
110
110
  def handle_chef_types(ty)
@@ -137,19 +137,15 @@ module PoolParty
137
137
  end
138
138
  end
139
139
 
140
- def handle_print_service(klassname, klassarray, tabs)
141
- case klassname
142
- when nil
143
- nil
144
- else
145
- kname = klassname.to_s.gsub(/pool_party_/, '').gsub(/_class/, '')
140
+ def handle_print_service(plugin, tabs)
141
+ if plugin && plugin.has_key?(:resources) && !plugin[:resources].empty?
142
+ kname = plugin.delete(:name).to_s.gsub(/pool_party_/, '').gsub(/_class/, '')
146
143
  str = "\n#{tf(tabs)}# #{kname}\n"
147
144
  str << "#{tf(tabs)}"
148
- klassarray.each do |hsh|
149
- str << _compile(hsh,tabs+1, klassname)
150
- end
145
+ str << _compile(plugin,tabs+1, kname)
151
146
  str << "#{tf(tabs)}"
152
147
  end
148
+ str
153
149
  end
154
150
 
155
151
  # Check if the hash has content and that the content exists here. This is used
@@ -165,26 +161,12 @@ module PoolParty
165
161
  hsh.merge!({:source => "#{nm}.erb"})
166
162
  end
167
163
  #
168
- hsh.delete(:require) if hsh.has_key?(:require)
164
+ hsh.delete(:require)
165
+ hsh.delete(:requires)
169
166
  hsh.delete(:name) # we don't need the names in the methods
170
167
  hsh
171
168
  end
172
169
 
173
- # Turn the services into strings using the handle_print_service method
174
- # Here we can strip out non-meaningful chef services
175
- def services_to_string(opts,tabs=0)
176
- if opts
177
- str = ""
178
- [:control_statements, :conditional].each do |k|
179
- opts.delete(k)
180
- end
181
- opts.map do |klassname, klasshash|
182
- str << handle_print_service(klassname, klasshash, tabs)
183
- end
184
- str
185
- end
186
- end
187
-
188
170
  # Handle ensures
189
171
  def handle_actions(key,value)
190
172
  case key
@@ -197,6 +179,8 @@ module PoolParty
197
179
 
198
180
  # Take the keys from the resource hash and turn them into chef-like
199
181
  # meaningful keys. This is how helpers are created for chef
182
+ #
183
+ # * <tt>reloads</tt> - todo
200
184
  def to_chef_key(key)
201
185
  case key
202
186
  when :ensures
@@ -224,14 +208,29 @@ module PoolParty
224
208
 
225
209
  # Resolve the value of the resource hash into a meaningful chef
226
210
  # value. Resources are turned into resource strings here
211
+ #
227
212
  def to_option_string(obj)
228
213
  case obj
229
214
  when PoolParty::Resources::Resource
230
215
  "resources(:#{handle_chef_types(obj.class.to_s.top_level_class.downcase.to_sym)} => \"#{obj.name}\")"
231
216
  when Fixnum
232
- "#{obj.to_i}"
217
+ case obj
218
+ when /^\d{3}$/
219
+ "0#{obj.to_i}"
220
+ else
221
+ "#{obj.to_i}"
222
+ end
233
223
  when String
234
- "\"#{obj}\""
224
+ case obj
225
+ when /^\d{4}$/
226
+ "#{obj}"
227
+ when /^\d{3}$/
228
+ "0#{obj}"
229
+ else
230
+ "\"#{obj}\""
231
+ end
232
+ when Proc
233
+ obj.call # eh
235
234
  when Array
236
235
  # If we are sending a notifies with a second argument
237
236
  if obj[1] && [:immediately, :delayed].include?(obj[1])
@@ -10,7 +10,7 @@ module PoolParty
10
10
 
11
11
  attr_reader :properties_hash, :the_cloud
12
12
 
13
- def initialize(hsh, contxt=nil)
13
+ def initialize(hsh, contxt={:tmp_path => "/tmp/poolparty/testpool/testcloud"})
14
14
  raise DependencyResolverException.new('must pass a hash') if hsh.nil? || !(hsh.instance_of?(OrderedHash) || hsh.instance_of?(Hash))
15
15
  @properties_hash = hsh
16
16
  @the_cloud = contxt
@@ -6,15 +6,15 @@ module PoolParty
6
6
  # Take the cloud dependency tree
7
7
  module DependencyResolverCloudExtensions
8
8
  def to_properties_hash
9
- oh = OrderedHash.new
10
- oh[:options] = options.merge(:cloud_name => name)
9
+ oh = {}
10
+ oh[:options] = dsl_options.merge(:cloud_name => name)
11
11
  oh[:resources] = ordered_resources.map {|a| a.to_properties_hash }
12
12
  # oh[:resources] = resources.keys.inject(OrderedHash.new) do |sum,k|
13
13
  # sum.merge(k.to_sym => resources[k].map {|a| a.to_properties_hash } )
14
14
  # end
15
- oh[:services] = services.keys.inject(OrderedHash.new) do |sum,k|
16
- sum.merge(k.to_sym => services[k].map {|a| a.to_properties_hash } )
17
- end
15
+ # oh[:services] = services.keys.inject(OrderedHash.new) do |sum,k|
16
+ # sum.merge(k.to_sym => services[k].map {|a| a.to_properties_hash } )
17
+ # end
18
18
  oh
19
19
  end
20
20
 
@@ -23,7 +23,7 @@ module PoolParty
23
23
  # Adds the to_properties_hash method on top of resources, the lowest level
24
24
  module DependencyResolverResourceExtensions
25
25
  def to_properties_hash
26
- {:pp_type => self.class.to_s.top_level_class}.merge!(options)
26
+ {:pp_type => self.class.to_s.top_level_class}.merge!(dsl_options)
27
27
  end
28
28
  end
29
29
  end
@@ -30,7 +30,6 @@ module PoolParty
30
30
 
31
31
  returning Array.new do |output|
32
32
  unless cancelled?
33
- output << @prestring || ""
34
33
 
35
34
  if resources && !resources.empty?
36
35
  output << resources_string_from_resources(resources, pre)
@@ -5,12 +5,6 @@ module PoolParty
5
5
 
6
6
  class PuppetResolver< DependencyResolver
7
7
 
8
- permitted_resource_options({
9
- :global => [:require, :name],
10
- :file => [:content, :mode, :user],
11
- :exec => [:command, :path, :refreshonly]
12
- })
13
-
14
8
  def initialize(hsh=nil)
15
9
  super(hsh)
16
10
  end
@@ -22,11 +16,7 @@ module PoolParty
22
16
  end
23
17
 
24
18
  def compile(props=@properties_hash, tabs=0)
25
- [
26
- # options_to_string(props[:options],tabs),
27
- resources_to_string(props[:resources],tabs),
28
- services_to_string(props[:services],tabs)
29
- ].join("\n")
19
+ resources_to_string(props[:resources],tabs)
30
20
  end
31
21
 
32
22
  def options_to_string(opts,tabs=0)
@@ -62,6 +52,8 @@ module PoolParty
62
52
  case ty = resource.delete(:pp_type)
63
53
  when "variable"
64
54
  handle_print_variable(resource[:name], resource[:value], :variable)
55
+ when "plugin"
56
+ handle_print_service(resource.delete(:name), resource, tabs)
65
57
  else
66
58
  real_name = resource[:name]
67
59
  handle_print_resource(resource, ty.to_sym, tabs)
@@ -73,19 +65,6 @@ module PoolParty
73
65
 
74
66
  def permitted_option?(ty, key)
75
67
  true
76
- # if permitted_resource_options.has_key?(ty)
77
- # permitted_resource_options[ty].include?(key) || true #permitted_resource_options[:global].include?(key)
78
- # else
79
- # true
80
- # end
81
- end
82
-
83
- def services_to_string(opts,tabs=0)
84
- if opts
85
- opts.map do |klassname, klasshash|
86
- handle_print_service(klassname, klasshash, tabs)
87
- end
88
- end
89
68
  end
90
69
 
91
70
  def hash_flush_out(hash, pre="", post="")
@@ -107,6 +86,10 @@ module PoolParty
107
86
  "present"
108
87
  end
109
88
  end
89
+
90
+ if hsh.has_key?(:requires)
91
+ hsh[:require] = hsh.delete(:requires)
92
+ end
110
93
  new_hsh ={}
111
94
  hsh.each do |k,v|
112
95
  new_hsh.merge!({k => to_option_string(v)})
@@ -135,29 +118,12 @@ module PoolParty
135
118
  end
136
119
  end
137
120
 
138
- def handle_print_service(klassname, klassarray, tabs)
139
- case klassname.to_s
140
- when "conditional"
141
- # "#{tf(tabs)}case $#{klasshash[:options][:variable]} {#{klasshash[:services][:control_statements].map do |k,v|"\n#{tf(tabs+1)}#{k} : {#{compile(v.to_properties_hash, tabs+2)}#{tf(tabs+1)}\n#{tf(tabs)}}" end}}"
142
-
143
- str = ""
144
- klassarray.each do |klasshash|
145
- # str << "\n#{tf(tabs+1)}#{compile(hsh,tabs+1)}"
146
- str << "#{tf(tabs)}case $#{klasshash[:options][:variable]} {"
147
- str << "#{klasshash[:services][:control_statements].map do |k,v|"\n#{tf(tabs+1)}#{k} : {#{compile(v.to_properties_hash, tabs+2)}#{tf(tabs+1)}\n#{tf(tabs)}}" end}"
148
- end
149
- str << "#{tf(tabs)}}"
150
-
151
- else
152
- kname = klassname.to_s.gsub(/pool_party_/, '').gsub(/_class/, '')
153
- str = "\n#{tf(tabs)}# #{kname}\n"
154
- str << "#{tf(tabs)}class #{kname} {"
155
- klassarray.each do |hsh|
156
- str << "\n#{tf(tabs+1)}#{compile(hsh,tabs+1)}"
157
- end
158
- str << "#{tf(tabs)}} include #{kname}"
159
-
160
- end
121
+ def handle_print_service(klassname, plugin, tabs)
122
+ kname = klassname.to_s.gsub(/pool_party_/, '').gsub(/_class/, '')
123
+ str = "\n#{tf(tabs)}# #{kname}\n"
124
+ str << "#{tf(tabs)}class #{kname} {"
125
+ str << "\n#{tf(tabs+1)}#{compile(plugin,tabs+1)}"
126
+ str << "#{tf(tabs)}} include #{kname}"
161
127
  end
162
128
 
163
129
  def handle_print_variable(name, value, tabs)
@@ -197,4 +163,4 @@ module PoolParty
197
163
 
198
164
  end
199
165
 
200
- end
166
+ end
@@ -1,10 +1,10 @@
1
1
  class MasterException < Exception
2
- EXCEPTION_MESSAGES = {
2
+ @messages = {
3
3
  :no_ip => "Master does not have an ip or has not been launched"
4
4
  }
5
5
  attr_reader :message
6
6
 
7
7
  def initialize(type=:no_ip, note="")
8
- @message = "Master Exception: #{EXCEPTION_MESSAGES[type]} #{note}"
8
+ @message = "Master Exception: #{@messages[type]} #{note}"
9
9
  end
10
10
  end
@@ -0,0 +1,96 @@
1
+ module PoolParty
2
+ # Provides accurate date and time measurements using Date#advance and
3
+ # Time#advance, respectively. It mainly supports the methods on Numeric,
4
+ # such as in this example:
5
+ #
6
+ # 1.month.ago # equivalent to Time.now.advance(:months => -1)
7
+ class Duration
8
+ attr_accessor :value, :parts
9
+
10
+ def initialize(value, parts) #:nodoc:
11
+ @value, @parts = value, parts
12
+ end
13
+
14
+ # Adds another Duration or a Numeric to this Duration. Numeric values
15
+ # are treated as seconds.
16
+ def +(other)
17
+ if Duration === other
18
+ Duration.new(value + other.value, @parts + other.parts)
19
+ else
20
+ Duration.new(value + other, @parts + [[:seconds, other]])
21
+ end
22
+ end
23
+
24
+ # Subtracts another Duration or a Numeric from this Duration. Numeric
25
+ # values are treated as seconds.
26
+ def -(other)
27
+ self + (-other)
28
+ end
29
+
30
+ def -@ #:nodoc:
31
+ Duration.new(-value, parts.map { |type,number| [type, -number] })
32
+ end
33
+
34
+ def is_a?(klass) #:nodoc:
35
+ klass == Duration || super
36
+ end
37
+
38
+ # Returns true if <tt>other</tt> is also a Duration instance with the
39
+ # same <tt>value</tt>, or if <tt>other == value</tt>.
40
+ def ==(other)
41
+ if Duration === other
42
+ other.value == value
43
+ else
44
+ other == value
45
+ end
46
+ end
47
+
48
+ def self.===(other) #:nodoc:
49
+ other.is_a?(Duration) rescue super
50
+ end
51
+
52
+ # Calculates a new Time or Date that is as far in the future
53
+ # as this Duration represents.
54
+ def since(time = ::Time.current)
55
+ sum(1, time)
56
+ end
57
+ alias :from_now :since
58
+
59
+ # Calculates a new Time or Date that is as far in the past
60
+ # as this Duration represents.
61
+ def ago(time = ::Time.current)
62
+ sum(-1, time)
63
+ end
64
+ alias :until :ago
65
+
66
+ def inspect #:nodoc:
67
+ consolidated = parts.inject(::Hash.new(0)) { |h,part| h[part.first] += part.last; h }
68
+ [:years, :months, :days, :minutes, :seconds].map do |length|
69
+ n = consolidated[length]
70
+ "#{n} #{n == 1 ? length.to_s.singularize : length.to_s}" if n.nonzero?
71
+ end.compact.to_sentence
72
+ end
73
+
74
+ protected
75
+
76
+ def sum(sign, time = ::Time.current) #:nodoc:
77
+ parts.inject(time) do |t,(type,number)|
78
+ if t.acts_like?(:time) || t.acts_like?(:date)
79
+ if type == :seconds
80
+ t.since(sign * number)
81
+ else
82
+ t.advance(type => sign * number)
83
+ end
84
+ else
85
+ raise ::ArgumentError, "expected a time or date, got #{time.inspect}"
86
+ end
87
+ end
88
+ end
89
+
90
+ private
91
+
92
+ def method_missing(method, *args, &block) #:nodoc:
93
+ value.send(method, *args)
94
+ end
95
+ end
96
+ end
@@ -1,4 +1,4 @@
1
- require "ftools"
1
+ require "fileutils"
2
2
  module PoolParty
3
3
 
4
4
  # Load a file that contains a pool into memory
@@ -1,10 +1,5 @@
1
- require File.dirname(__FILE__) + "/display"
2
-
3
1
  module PoolParty
4
2
  module Console
5
-
6
- include Display
7
-
8
3
  # Print help commands for the console
9
4
  # level 0 - Basic help
10
5
  # level 1 - Commands
@@ -9,10 +9,15 @@ module PoolParty
9
9
  class Optioner
10
10
  include Dslify
11
11
 
12
+ attr_accessor :loaded_pool, :loaded_clouds, :loaded_pools
13
+
14
+ dsl_methods :spec,
15
+ :num,
16
+ :cloudname,
17
+ :poolname
18
+
12
19
  default_options( :verbose => false,
13
- :quiet => false,
14
- :cloudname => false,
15
- :poolname => false)
20
+ :quiet => false)
16
21
 
17
22
  def initialize(args=[], opts={}, &block)
18
23
  boolean_args << opts[:boolean_args] if opts.has_key?(:boolean_args)
@@ -75,8 +80,8 @@ module PoolParty
75
80
  end
76
81
 
77
82
  def parse_options(&blk)
78
- self.spec = nil
79
- self.num = nil
83
+ self.spec nil
84
+ self.num nil
80
85
 
81
86
  progname = $0.include?("-") ? "#{::File.basename($0[/(\w+)-/, 1])} #{::File.basename($0[/-(.*)/, 1])}" : ::File.basename($0)
82
87
  @opts = OptionParser.new
@@ -89,7 +94,7 @@ module PoolParty
89
94
  @opts.separator "Options:"
90
95
 
91
96
  @opts.on('-v', '--verbose', 'Be verbose') { self.verbose true }
92
- @opts.on('-d', "--debug", "Debug setting") { self.debugging true }
97
+ @opts.on('-d', "--debug", "Debug setting") { self.debugging = true }
93
98
  @opts.on('-s [file]', '--spec-file [file]', 'Set the spec file') { |file| self.spec file.chomp }
94
99
  @opts.on('-t', '--test', 'Testing mode') { self.testing true }
95
100
 
@@ -106,20 +111,20 @@ module PoolParty
106
111
  @opts.parse(@arguments.dup)
107
112
 
108
113
  process_options
109
- output_options if verbose
114
+ output_options if verbose? && verbose
110
115
 
111
116
  if @load_pools
112
- self.loaded_pool load_pool( spec? ? spec : Binary.get_existing_spec_location)
113
- self.loaded_clouds extract_cloud_from_options(self)
114
- self.loaded_pools extract_pool_from_options(self)
117
+ @loaded_pool = load_pool( spec ? spec : Binary.get_existing_spec_location)
118
+ @loaded_clouds = extract_cloud_from_options(self)
119
+ @loaded_pools = extract_pool_from_options(self)
115
120
 
116
121
  reject_junk_options!
117
122
  raise CloudNotFoundException.new("Please specify your cloud with -s, move it to ./clouds.rb or in your POOL_SPEC environment variable") unless loaded_clouds && !loaded_clouds.empty?
118
123
  loaded_pools.each do |pl|
119
- pl.options(self.options)
124
+ pl.dsl_options.merge!(self.dsl_options)
120
125
  end
121
126
  loaded_clouds.each do |cl|
122
- cl.options(self.options)
127
+ cl.dsl_options.merge!(self.dsl_options)
123
128
  end
124
129
  end
125
130
  end
@@ -153,4 +158,4 @@ module PoolParty
153
158
  def extract_pool_from_options(o)
154
159
  o.poolname ? [pool(o.poolname.downcase.to_sym)] : pools.collect {|n,pl| pl}
155
160
  end
156
- end
161
+ end
@@ -0,0 +1,113 @@
1
+ module PoolParty
2
+ module Installers
3
+ class BaseInstaller
4
+
5
+ include ::PoolParty::Remote
6
+ include ::PoolParty::Pinger
7
+
8
+ def initialize
9
+ self.__send__ :welcome_message
10
+ commands.each {|c| self.__send__ c.to_sym }
11
+ self.__send__ :closing_message
12
+ end
13
+
14
+ def welcome_message
15
+ welcome_msg = <<-EOE
16
+ We are going to take you through the installation process of PoolParty.
17
+
18
+ First, we'll setup your environment so using PoolParty will be a breeze
19
+ EOE
20
+
21
+ colored_say "Welcome to PoolParty!", :help
22
+ say welcome_msg
23
+ begin
24
+ t = colored_ask "Press enter to continue or Ctrl+C to exit"
25
+ rescue Exception => e
26
+ say <<-EOE
27
+
28
+ Cancelled PoolParty installation
29
+
30
+ You can always restart this by typing:
31
+ install-poolparty
32
+ EOE
33
+ exit 0
34
+ end
35
+
36
+ end
37
+
38
+ def closing_message
39
+ closing_message = <<-EOE
40
+ You are now set to ride the waves with PoolParty! You'll notice there is a clouds.rb file in your current directory. You can start your new cloud
41
+ by typing:
42
+
43
+ cloud start
44
+
45
+ You can start your clouds.rb. More samples are available here:
46
+ http://github.com/auser/poolparty-examples/tree/master
47
+ EOE
48
+ say closing_message
49
+ end
50
+
51
+ def commands
52
+ @commands ||= []
53
+ end
54
+
55
+ protected
56
+
57
+ def ask_with_help(opts={}, &block)
58
+ help_str = opts[:help]
59
+ message = opts[:message]
60
+
61
+ o = ask("#{message} (h for help)") do |q|
62
+ q.validate = opts[:validate] if opts.has_key?(:validate)
63
+ end
64
+
65
+ if %w(h H).include?(o)
66
+ colored_say help_str, :help
67
+ ask_with_help(opts, &block)
68
+ else
69
+ block.call(o)
70
+ end
71
+ o
72
+ end
73
+
74
+ def rescued_ask(m, r)
75
+ begin
76
+ t = colored_ask m
77
+ rescue Exception => e
78
+ say r
79
+ end
80
+ end
81
+
82
+ def colored_ask(str, color = :notice)
83
+ setup_colors
84
+ ask("<%= color(\"#{str}\", :#{color}) %>")
85
+ end
86
+
87
+ def colored_say(str, color = :headline)
88
+ setup_colors
89
+ say("<%= color(\"#{str}\", :#{color}) %>")
90
+ end
91
+
92
+ def setup_colors
93
+ unless @setup_colors
94
+ ft = HighLine::ColorScheme.new do |cs|
95
+ cs[:headline] = [ :bold, :yellow, :on_black ]
96
+ cs[:horizontal_line] = [ :bold, :white, :on_blue]
97
+ cs[:critical] = [ :yellow, :on_red ]
98
+ cs[:error] = [ :bold, :red ]
99
+ cs[:help] = [ :bold, :white, :on_blue]
100
+ cs[:notice] = [ :blue, :on_white]
101
+ end
102
+
103
+ HighLine.color_scheme = ft
104
+ @setup_colors = true
105
+ end
106
+ end
107
+
108
+
109
+ end
110
+ end
111
+ end
112
+
113
+ Dir["#{::File.dirname(__FILE__)}/*.rb"].each {|lib| require lib }