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
@@ -13,6 +13,8 @@ module PoolParty
13
13
 
14
14
  # List of gems that are default to install
15
15
  def self.gem_list
16
+ # auser-dslify
17
+ # auser-parenting
16
18
  @gem_list ||= %w( logging
17
19
  rake
18
20
  xml-simple
@@ -21,27 +23,32 @@ module PoolParty
21
23
  net-scp
22
24
  net-ssh-gateway
23
25
  highline
26
+ flexmock
27
+ lockfile
28
+ rubigen
24
29
  json
25
- activesupport
26
30
  grempe-amazon-ec2
27
31
  ohai
28
32
  chef
29
- auser-dslify
30
- auser-parenting
31
- adamwiggins-rest-client
33
+ ruby-openid
34
+ auser-rest-client
32
35
  rack
33
36
  thin
37
+ logging
38
+ ruby2ruby
39
+ extlib
34
40
  )
35
41
  end
36
42
 
37
43
  # Default options for the boot_strapper
38
- @defaults = ::PoolParty::Default.default_options.merge({
44
+ @defaults = ::PoolParty::Default.dsl_options.merge({
39
45
  :full_keypair_path => "#{ENV["AWS_KEYPAIR_NAME"]}" || "~/.ssh/id_rsa",
40
46
  :installer => 'apt-get',
41
47
  :dependency_resolver => 'chef'
42
48
  })
43
49
  class <<self; attr_reader :defaults; end
44
50
 
51
+ attr_reader :cloud_name
45
52
  # In case the method is being called on ourself, let's check the
46
53
  # defaults hash to see if it's available there
47
54
  def method_missing(m,*a,&block)
@@ -58,6 +65,7 @@ module PoolParty
58
65
  self.class.defaults.merge(opts).to_instance_variables(self)
59
66
  @target_host = host
60
67
  @cloud = opts[:cloud]
68
+ @cloud_name = @cloud.name
61
69
 
62
70
  instance_eval &block if block
63
71
  @cloud.call_before_bootstrap_callbacks if @cloud
@@ -79,36 +87,39 @@ module PoolParty
79
87
  def pack_the_dependencies
80
88
  # Add the keypair to the instance... shudder
81
89
  ::Suitcase::Zipper.add(keypair, "keys")
90
+ ::Suitcase::Zipper.add_content_as(Default.keys_in_yaml, "ppkeys", "keys")
82
91
 
83
- # Use the locally built poolparty gem if it is availabl
84
- if edge_pp_gem = Dir["#{Default.vendor_path}/../pkg/*poolparty*gem"].pop
85
- puts "using edge poolparty: #{::File.expand_path(edge_pp_gem)}"
86
- ::Suitcase::Zipper.add(edge_pp_gem, 'gems')
87
- else
88
- vputs "using gem auser-poolparty. use rake build to use edge"
89
- self.class.gem_list << 'auser-poolparty'
90
- end
92
+ edge_pp_gem = Dir["#{Default.vendor_path}/../pkg/*poolparty*gem"].pop
93
+ # Use the locally built poolparty gem if it is available
94
+ if edge_pp_gem
95
+ puts "using edge poolparty: #{::File.expand_path(edge_pp_gem)}"
96
+ ::Suitcase::Zipper.add(edge_pp_gem, 'gems')
97
+ else
98
+ vputs "using gem auser-poolparty. use rake build to use edge"
99
+ self.class.gem_list << 'auser-poolparty'
100
+ end
91
101
  # Add the gems to the suitcase
92
102
  puts "Adding default gem dependencies"
93
- ::Suitcase::Zipper.gems self.class.gem_list, "#{Default.tmp_path}/trash/dependencies"
103
+ ::Suitcase::Zipper.gems self.class.gem_list, :gem_location => "#{cloud.tmp_path}/trash/dependencies", :search_paths => ["#{Default.vendor_path}/../pkg"]
94
104
 
95
- ::Suitcase::Zipper.packages( "http://rubyforge.org/frs/download.php/45905/rubygems-1.3.1.tgz",
96
- "#{Default.tmp_path}/trash/dependencies/packages")
105
+ ::Suitcase::Zipper.packages( "http://rubyforge.org/frs/download.php/57643/rubygems-1.3.4.tgz",
106
+ "#{cloud.tmp_path}/trash/dependencies/packages")
97
107
  # ::Suitcase::Zipper.add("templates/")
98
108
 
99
109
  ::Suitcase::Zipper.add("#{::File.dirname(__FILE__)}/../templates/monitor.ru", "/etc/poolparty/")
100
110
  ::Suitcase::Zipper.add("#{::File.dirname(__FILE__)}/../templates/monitor.god", "/etc/poolparty/")
101
111
 
102
- ::Suitcase::Zipper.add("#{Default.tmp_path}/trash/dependencies/cache", "gems")
112
+ ::Suitcase::Zipper.add("#{cloud.tmp_path}/trash/dependencies/cache", "gems")
103
113
 
104
- ::Suitcase::Zipper.add("#{::File.join(File.dirname(__FILE__), '..', 'templates', 'gemrc' )}", "etc/poolparty")
114
+ ::Suitcase::Zipper.add("#{::File.join(File.dirname(__FILE__), '..', 'templates', 'gemrc_template' )}", "etc/poolparty")
105
115
 
106
116
  instances = @cloud.nodes(:status => "running") + [@cloud.started_instance]
107
- ::Suitcase::Zipper.add_content_as(
108
- {:instances => instances.flatten.compact}.to_json,
109
- "neighborhood.json", "/etc/poolparty")
117
+ # ::Suitcase::Zipper.add_content_as(
118
+ # instances.flatten.compact.to_json,
119
+ # "neighborhood.json", "/etc/poolparty"
120
+ # )
110
121
 
111
- ::Suitcase::Zipper.build_dir!("#{Default.tmp_path}/dependencies")
122
+ ::Suitcase::Zipper.build_dir!("#{cloud.tmp_path}/dependencies")
112
123
 
113
124
  ::Suitcase::Zipper.flush!
114
125
 
@@ -118,35 +129,35 @@ module PoolParty
118
129
  # The commands to setup a PoolParty enviornment
119
130
  def default_commands
120
131
  pack_the_dependencies
121
- ::FileUtils.rm_rf "#{Default.tmp_path}/dependencies/gems/cache"
122
- rsync "#{Default.tmp_path}/dependencies", '/var/poolparty'
132
+ ::FileUtils.rm_rf "#{cloud.tmp_path}/dependencies/gems/cache"
133
+ rsync "#{cloud.tmp_path}/dependencies", '/var/poolparty', ['-v', '-a', '--delete']
123
134
 
124
135
  commands << [
125
136
  "mkdir -p /etc/poolparty",
137
+ "echo #{cloud.name} > /etc/poolparty/cloud_name",
138
+ "echo #{cloud.pool.name}>/etc/poolparty/pool_name",
126
139
  "mkdir -p /var/log/poolparty",
127
140
  "groupadd -f poolparty",
128
141
  # "useradd poolparty --home-dir /var/poolparty --groups poolparty --create-home",
129
- 'cd /var/poolparty/dependencies',
130
- "cp /var/poolparty/dependencies/etc/poolparty/gemrc /etc/poolparty",
142
+ "cd /var/poolparty/dependencies && cp /var/poolparty/dependencies/etc/poolparty/gemrc_template /etc/poolparty",
131
143
  "#{installer} update",
132
- "#{installer} install -y ruby ruby1.8-dev libopenssl-ruby1.8 build-essential wget", #optional, but nice to have
133
- "tar -zxvf packages/rubygems-1.3.1.tgz",
134
- "cd rubygems-1.3.1",
135
- "ruby setup.rb --no-ri --no-rdoc",
136
- "ln -sfv /usr/bin/gem1.8 /usr/bin/gem", #TODO: check if this is really needed
137
- "cd ../ && rm -rf rubygems-1.3.1*",
144
+ "#{installer} install -y ruby ruby1.8-dev irb libopenssl-ruby1.8 build-essential wget", #optional, but nice to have
145
+ "tar -zxvf packages/rubygems-1.3.4.tgz && cd rubygems-1.3.4 && ruby setup.rb --no-ri --no-rdoc && ln -sfv /usr/bin/gem1.8 /usr/bin/gem && cd ../ && rm -rf rubygems-1.3.1*",
138
146
  "gem source --add http://gems.github.com",
147
+ "gem source -a http://gems.opscode.com",
139
148
  "cd /var/poolparty/dependencies/gems/",
140
- "gem install --no-rdoc --no-ri -y *.gem",
141
- "cd /var/poolparty/dependencies",
142
- "cp /var/poolparty/dependencies/etc/poolparty/* /etc/poolparty/",
149
+ "gem install --no-rdoc --no-ri *.gem",
150
+ "cd /var/poolparty/dependencies && cp /var/poolparty/dependencies/etc/poolparty/* /etc/poolparty/",
143
151
  'touch /var/poolparty/POOLPARTY.PROGRESS',
144
152
  "mkdir -p /root/.ssh",
145
153
  "cp /var/poolparty/dependencies/keys/* /root/.ssh/",
146
- "chmod 600 /root/.ssh/#{::File.basename(@cloud.keypair.full_filepath)}",
154
+ "chmod 600 /root/.ssh/#{keypair_name}",
147
155
  # "god -c /etc/poolparty/monitor.god",
148
156
  "mkdir -p /var/log/poolparty/",
149
- "thin -R /etc/poolparty/monitor.ru -p 8642 --pid /var/run/stats_monitor.pid --daemon -l /var/log/poolparty/monitor.log start 2>/dev/null",
157
+ "echo '-- Starting monitor_rack --'",
158
+ # NOTE: if someone has an old version of thin/rack on their system, this will fail silently and never finish bootstrapping
159
+ "ps aux | grep thin | grep -v grep | awk '{print $2}' | xargs kill -9; thin -R /etc/poolparty/monitor.ru -p 8642 --pid /var/run/stats_monitor.pid --daemon -l /var/log/poolparty/monitor.log start 2>/dev/null",
160
+ "tail -n 20 /var/log/poolparty/monitor.log",
150
161
  'echo "bootstrap" >> /var/poolparty/POOLPARTY.PROGRESS']
151
162
  commands << self.class.class_commands unless self.class.class_commands.empty?
152
163
  end
@@ -3,20 +3,21 @@ module PoolParty
3
3
 
4
4
  class Chef
5
5
  def self.commands
6
+ debug_flag = "-l debug" if debugging?
6
7
  [
7
8
  "mkdir -p /etc/chef/cookbooks /etc/chef/cache",
8
9
  "cp -R /var/poolparty/dr_configure/chef/cookbooks/* /etc/chef/cookbooks",
9
10
  "cp /var/poolparty/dr_configure/chef/solo.rb /etc/chef/solo.rb",
10
11
  "cp /var/poolparty/dr_configure/chef/dna.json /etc/chef/dna.json",
11
- "/usr/bin/chef-solo -c /etc/chef/solo.rb -j /etc/chef/dna.json"
12
+ "/usr/bin/chef-solo #{debug_flag} -c /etc/chef/solo.rb -j /etc/chef/dna.json"
12
13
  ]
13
14
  end
14
15
  def self.files_to_upload
15
16
  [
16
- "#{Default.tmp_path}/dr_configure/chef/solo.rb",
17
- "#{Default.tmp_path}/dr_configure/chef/dna.json",
18
- "#{Default.base_config_directory}/chef/solo.rb",
19
- "#{Default.base_config_directory}/chef/dna.json"
17
+ # "#{Default.tmp_path}/dr_configure/chef/solo.rb",
18
+ # "#{Default.tmp_path}/dr_configure/chef/dna.json",
19
+ # "#{Default.base_config_directory}/chef/solo.rb",
20
+ # "#{Default.base_config_directory}/chef/dna.json"
20
21
  ]
21
22
  end
22
23
  end
@@ -22,42 +22,44 @@ module PoolParty
22
22
  # In case the method is being called on ourself, let's check the
23
23
  # defaults hash to see if it's available there
24
24
  def method_missing(m,*a,&block)
25
- if self.class.defaults.has_key?(m)
26
- self.class.defaults[m]
27
- elsif @cloud
25
+ # if self.class.defaults.has_key?(m)
26
+ # self.class.defaults[m]
27
+ # elsif @cloud
28
28
  @cloud.send m, *a, &block
29
- else
30
- super
31
- end
29
+ # else
30
+ # super
31
+ # end
32
32
  end
33
33
 
34
- attr_reader :cloud, :keypair, :run_count
34
+ attr_reader :cloud, :keypair, :run_count, :cloud_name
35
35
 
36
36
  def initialize(host, opts={}, &block)
37
37
  self.class.defaults.merge(opts).to_instance_variables(self)
38
38
  @target_host = host
39
- @configurator = "::PoolParty::Provision::#{dependency_resolver.capitalize}".constantize
39
+ @configurator = "::PoolParty::Provision::#{dependency_resolver.camelcase}".constantize
40
40
  @cloud = opts[:cloud]
41
+ @cloud_name = @cloud.name
41
42
  @keypair = @cloud.keypair
42
43
  @run_count = 0
43
44
 
44
45
  @cloud.call_before_configure_callbacks if @cloud
45
46
  prescribe_configuration
46
47
  execute!
48
+ @cloud.call_after_configure_callbacks if @cloud
47
49
  end
48
50
 
49
51
  private
50
52
 
51
53
  def prescribe_configuration
52
- ::FileUtils.mkdir_p "#{Default.tmp_path}/dr_configure" unless ::File.directory?("#{Default.tmp_path}/dr_configure")
53
- ::File.cp $pool_specfile, "#{Default.tmp_path}/dr_configure/clouds.rb"
54
- ::File.open "#{Default.tmp_path}/dr_configure/clouds.json", "w" do |f|
55
- f << cloud.to_properties_hash.to_json
54
+ ::FileUtils.mkdir_p "#{cloud.tmp_path}/dr_configure" unless ::File.directory?("#{cloud.tmp_path}/dr_configure")
55
+ ::FileUtils.cp $pool_specfile, "#{cloud.tmp_path}/dr_configure/clouds.rb"
56
+ ::File.open "#{cloud.tmp_path}/dr_configure/clouds.json", "w" do |f|
57
+ f << cloud.to_json
56
58
  end
57
59
 
58
60
  setup_configurator
59
61
  # write_erlang_cookie
60
- @configurator.files_to_upload.each {|f| ::FileUtils.cp f, "#{Default.tmp_path}/dr_configure/#{::File.basename(f)}" if ::File.file?(f) }
62
+ @configurator.files_to_upload.each {|f| ::FileUtils.cp f, "#{cloud.tmp_path}/dr_configure/#{::File.basename(f)}" if ::File.file?(f) }
61
63
 
62
64
  pack_up_and_ship_off_suitcase
63
65
  run_commands
@@ -95,9 +97,11 @@ module PoolParty
95
97
  commands << [
96
98
  'chmod 644 /var/poolparty/dr_configure/clouds.json',
97
99
  'chmod 644 /var/poolparty/dr_configure/clouds.rb',
100
+ "cp -R /var/poolparty/dr_configure/etc/poolparty/* /etc/poolparty/",
101
+ # TODO: slightly redundant
98
102
  'cp /var/poolparty/dr_configure/clouds.json /etc/poolparty',
99
103
  'cp /var/poolparty/dr_configure/clouds.rb /etc/poolparty',
100
- "touch /var/poolparty/POOLPARTY.PROGRESS",
104
+ # 'server-manage-election', #ensures that the monitor gets some data
101
105
  'echo "configure" >> /var/poolparty/POOLPARTY.PROGRESS'
102
106
  ]
103
107
  commands << self.class.class_commands unless self.class.class_commands.empty?
@@ -105,8 +109,10 @@ module PoolParty
105
109
  end
106
110
 
107
111
  def pack_up_and_ship_off_suitcase
108
- ::Suitcase::Zipper.build_dir!("#{Default.tmp_path}/dr_configure")
109
- rsync "#{Default.tmp_path}/dr_configure/", "/var/poolparty/dr_configure/", ['-a --stats']
112
+ ::Suitcase::Zipper.add(::File.dirname(pool_specfile), "/etc/poolparty")
113
+
114
+ ::Suitcase::Zipper.build_dir!("#{cloud.tmp_path}/dr_configure")
115
+ rsync "#{cloud.tmp_path}/dr_configure/", "/var/poolparty/dr_configure/", ['-a --stats']
110
116
  end
111
117
 
112
118
  # Pack up monitors verifiers plugins directories in the same direcotry as your clouds.rb and send to nodes.
@@ -114,7 +120,7 @@ module PoolParty
114
120
  # @cloud.write_properties_hash("#{Default.tmp_path}/properties_hash.rb")
115
121
  #TODO: move to puppet class
116
122
  #TODO: remove or conditionalize this puppet specific task
117
- @cloud.build_and_store_new_config_file("#{Default.tmp_path}/dr_configure/poolparty.pp")
123
+ @cloud.build_and_store_new_config_file("#{cloud.tmp_path}/dr_configure/poolparty.pp")
118
124
 
119
125
  %w(monitors verifiers plugins).each do |dir|
120
126
  @cloud.pack_user_directory dir
@@ -128,8 +134,8 @@ module PoolParty
128
134
  def write_erlang_cookie
129
135
  # cookie = (1..16).collect { chars[rand(chars.size)] }.pack("C*")
130
136
  cookie = (1..65).collect {rand(9)}.join()
131
- cookie_file = ::File.open("#{Default.tmp_path}/dr_configure/erlang.cookie", 'w+'){|f| f << cookie }
132
- ::File.cp "#{::File.dirname(__FILE__)}/../templates/erlang_cookie_maker", "#{Default.tmp_path}/dr_configure/"
137
+ cookie_file = ::File.open("#{cloud.tmp_path}/dr_configure/erlang.cookie", 'w+'){|f| f << cookie }
138
+ ::FileUtils.cp "#{::File.dirname(__FILE__)}/../templates/erlang_cookie_maker", "#{cloud.tmp_path}/dr_configure/"
133
139
  end
134
140
 
135
141
  def self.class_commands
@@ -1,12 +1,45 @@
1
1
  module PoolParty
2
2
  module Resources
3
-
3
+ =begin rdoc
4
+ == Cron
5
+
6
+ The cron resource will set cron jobs at the intervals you set
7
+
8
+ == Usage
9
+
10
+ has_cron(:name => '...') do
11
+ # More options.
12
+ # This block is optional
13
+ end
14
+
15
+ == Options
16
+
17
+ * <tt>name</tt> The name of the cronjob
18
+ * <tt>user</tt> The users who owns the cronjob
19
+ * <tt>command</tt> The cronjob command to run
20
+ * <tt>minute</tt> Set the minute of the cronjob
21
+ * <tt>hour</tt> Set the hour of the cronjob
22
+ * <tt>month</tt> Set the month of the cronjob
23
+ * <tt>monthday</tt> Set the day of the month of the cronjob
24
+ * <tt>weekday</tt> Set the weekday of the cronjob, in 0-6 format, where 0 is Sunday
25
+
26
+ == Example
27
+
28
+ has_cron(:name => "report mailer", :minute => "5", :hour => "0", :weekday => 1) do
29
+ command "/bin/sh /home/user/email_reports.sh"
30
+ end
31
+
32
+ =end
4
33
  class Cron < Resource
5
34
 
6
- default_options({
35
+ default_options(
7
36
  :command => nil,
8
- :user => "root"
9
- })
37
+ :user => "root",
38
+ :minute => "*",
39
+ :hour => "*",
40
+ :month => "*",
41
+ :weekday => "*"
42
+ )
10
43
 
11
44
  def present
12
45
  :create
@@ -1,8 +1,38 @@
1
1
  module PoolParty
2
2
  module Resources
3
3
 
4
+ =begin rdoc rdoc
5
+ == Directory
6
+
7
+ The directory resource is used to describe a directory that should be present
8
+ on all of the instances.
9
+
10
+ == Usage
11
+
12
+ has_directory 'name', :from => '/local/path', :to => '/path/on/server/'
13
+
14
+ The above example will place the contents of '/local/path' at '/path/on/server/name'
15
+
16
+ has_directory(:name => '/etc/apache2')
17
+
18
+ == Options
19
+
20
+ * <tt>name</tt> Describe the location of the file with the name
21
+ * <tt>mode</tt> Describe the mode of the file (default: 644)
22
+ * <tt>owner</tt> The owner of the file (default: poolparty user)
23
+
24
+ =end
25
+
26
+
4
27
  class Directory < Resource
5
28
 
29
+ dsl_methods :owner
30
+
31
+ default_options({
32
+ :recursive => true,
33
+ :mode => "0644"
34
+ })
35
+
6
36
  def present
7
37
  :create
8
38
  end
@@ -1,11 +1,41 @@
1
1
  module PoolParty
2
2
  module Resources
3
+ =begin rdoc rdoc
4
+ == Exec
5
+
6
+ Ensure a command is run on the instances
7
+
8
+ == Usage
9
+
10
+ has_exec(:name => '...') do
11
+ # More options.
12
+ # This block is optional
13
+ end
14
+
15
+ == Options
16
+
17
+ * <tt>name</tt> The name of your exec. This is optional, but nice for debugging purposes
18
+ * <tt>cwd</tt> Current working directory to execute the command (optional)
19
+ * <tt>command</tt> This describes the command to run
20
+ * <tt>path</tt> The path to run the command with (optional)
21
+
22
+ == Examples
23
+ has_exec(:name => 'start messenger', :command => 'server-start-node', :requires => get_gempackage('poolparty-latest', :onlyif => 'ps aux | grep beam | grep master')
24
+ =end
3
25
 
4
26
  class Exec < Resource
5
27
 
28
+ dsl_methods :cwd, :creates, :command
6
29
  default_options({
7
30
  :path => ["/usr/bin:/bin:/usr/local/bin:$PATH"]
8
31
  })
32
+
33
+ def loaded(o={})
34
+ if user
35
+ name "sudo -u #{user} -H #{name}"
36
+ dsl_options.delete(:user)
37
+ end
38
+ end
9
39
 
10
40
  def present
11
41
  nil
@@ -16,7 +46,7 @@ module PoolParty
16
46
  end
17
47
 
18
48
  def after_create
19
- options[:name] = options[:command] unless options.name
49
+ dsl_options[:name] = dsl_options[:command] unless dsl_options[:name]
20
50
  end
21
51
 
22
52
  end
@@ -1,10 +1,49 @@
1
1
  module PoolParty
2
2
  module Resources
3
3
 
4
- class File < Resource
4
+ =begin rdoc rdoc
5
+ == File
6
+
7
+ The file resource is used to describe a file that should be present on all of the instances.
8
+
9
+ == Usage
10
+
11
+ has_file(:name => '...') do
12
+ # More options.
13
+ # This block is optional
14
+ end
15
+
16
+ == Options
17
+
18
+ * <tt>name</tt> Describe the location of the file with the name
19
+ * <tt>mode</tt> Describe the mode of the file (default: 644)
20
+ * <tt>owner</tt> The owner of the file (default: poolparty user)
21
+ * <tt>content</tt> The contents of the file
22
+ * <tt>source</tt> Used to describe a file that is hosted on the master instance.
23
+ * <tt>template</tt> The file contents are described with the template. The location given must be readable
24
+
25
+ To write a file to the template directory, use:
26
+
27
+ copy_template_to_storage_directory(filepath)
28
+
29
+ == Example
30
+ has_file(:name => '/etc/motd', :content => 'Hey and welcome to your node today!')
31
+ =end
32
+ class File < Resource
33
+ has_searchable_paths(:dir => "templates")
34
+
35
+ dsl_methods :name, # The name, the full path of the file
36
+ :owner, # String that describes the owner of the file
37
+ :content, # A string that describes the content of the file
38
+ :template, # The file that describes the content of the file
39
+ :render_as # Render the content (Erb) (default: Erb)
40
+
41
+ default_options(
42
+ :mode => "644" # A string indicating the mode of the file
43
+ )
5
44
 
6
45
  def loaded(o={}, &block)
7
- parent.has_directory ::File.dirname(name) if parent
46
+ has_directory ::File.dirname(name)
8
47
  end
9
48
 
10
49
  def present
@@ -18,27 +57,30 @@ module PoolParty
18
57
  def after_create
19
58
  run_render = dsl_options.include?(:render_as) ? dsl_options.delete(:render_as) : false
20
59
 
21
- if dsl_options.include?(:template)
22
- filename = ::File.expand_path(dsl_options.template)
23
- dsl_options.delete(:template)
60
+ if dsl_options[:template]
61
+ filename = find_file(dsl_options.delete(:template))
24
62
  file = ::File.basename( filename )
25
63
  raise TemplateNotFound.new("no template given") unless file
26
64
 
27
- template_opts = (parent ? options.merge(parent.options) : options)
28
- options.merge!(:content => run_render ? Template.compile_file(filename, template_opts.merge(:renderer => run_render)).gsub("\"", "\"") : open(filename).read)
65
+ template_opts = (parent ? dsl_options.merge(parent.dsl_options) : dsl_options)
66
+ dsl_options.merge!(:content => run_render ? Template.compile_file(filename, template_opts.merge(:renderer => run_render)).gsub("\"", "\"") : open(filename).read)
29
67
  end
30
68
 
31
69
  if dsl_options.include?(:content)
32
70
  cont = dsl_options.delete(:content)
33
- template_opts = (parent ? options.merge(parent.options) : options).merge(:renderer => run_render)
34
- options.merge!(:content => run_render ? Template.compile_string(cont, template_opts) : cont)
71
+ template_opts = (parent ? dsl_options.merge(parent.dsl_options) : dsl_options).merge(:renderer => run_render)
72
+ dsl_options.merge!(:content => run_render ? Template.compile_string(cont, template_opts) : cont)
35
73
  end
36
74
  end
37
75
 
38
- def method_missing m, *a, &block
39
- super rescue ::File.send(m, *a, &block)
40
- end
76
+ # def method_missing m, *a, &block
77
+ # super rescue ::File.send(m, *a, &block)
78
+ # end
41
79
 
80
+ def variable(k,v)
81
+ set_default_options(k => v)
82
+ end
83
+
42
84
  end
43
85
 
44
86
  end
@@ -0,0 +1,21 @@
1
+ module PoolParty
2
+ module Resources
3
+
4
+ class Group < Resource
5
+
6
+ # default_options({
7
+ # :shell => "/bin/sh"
8
+ # })
9
+
10
+ def present
11
+ :manage
12
+ end
13
+
14
+ def absent
15
+ :remove
16
+ end
17
+
18
+ end
19
+
20
+ end
21
+ end
@@ -1,5 +1,29 @@
1
1
  module PoolParty
2
2
  module Resources
3
+ =begin rdoc
4
+
5
+ == Mount
6
+
7
+ The mount specifies a mount that is to be mounted on the instances
8
+
9
+ == Usage
10
+
11
+ has_mount(:name => '...') do
12
+ # More options.
13
+ # This block is optional
14
+ end
15
+
16
+ == Options
17
+
18
+ * <tt>name</tt> The location of the mount (default: /data)
19
+ * <tt>device</tt> The device location for the mount. This mounts at the directory set by the name
20
+ * <tt>options</tt> The options to be set in the mount file fstab (default: rw,nosuid,noquota)
21
+ * <tt>fstype</tt> The Type of mount (default: xfs)
22
+
23
+ == Examples
24
+
25
+ has_mount(:name => "/data", :device => "/dev/sda100")
26
+ =end
3
27
 
4
28
  class Mount < Resource
5
29
 
@@ -11,10 +35,6 @@ module PoolParty
11
35
  :atboot => "yes"
12
36
  })
13
37
 
14
- def disallowed_options
15
- [:name]
16
- end
17
-
18
38
  end
19
39
 
20
40
  end
@@ -1,17 +1,41 @@
1
- module PoolParty
1
+ module PoolParty
2
2
  module Resources
3
-
3
+ =begin rdoc
4
+
5
+ == Package
6
+
7
+ The package resources defines a package that must be present on all of the
8
+ instances This will install the "name_of_package" package with the package
9
+ provider (apt, yum, etc)
10
+
11
+ == Usage
12
+
13
+ has_package "name_of_package"
14
+ has_package(:name => '...') do
15
+ # More options.
16
+ # This block is optional
17
+ end
18
+
19
+ == Options
20
+
21
+ * <tt>name</tt> The package name. The default provider for your OS will be picked by the dependency resolver
22
+
23
+ == Examples
24
+
25
+ has_package(:name => 'apache2')
26
+
27
+ =end
4
28
  class Package < Resource
5
-
29
+
6
30
  def present
7
31
  :install
8
32
  end
9
-
33
+
10
34
  def absent
11
35
  :remove
12
36
  end
13
-
37
+
14
38
  end
15
-
39
+
16
40
  end
17
41
  end