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
@@ -1,9 +1,19 @@
1
1
  module PoolParty
2
2
  module Verifiers
3
+ @available_verifiers =[]
4
+ def self.available
5
+ @available_verifiers
6
+ end
3
7
 
4
8
  class VerifierBase
5
9
  attr_reader :host
6
10
 
11
+ def self.inherited(subclass)
12
+ unless Verifiers.available.include?(subclass)
13
+ Verifiers.available << subclass
14
+ end
15
+ end
16
+
7
17
  def host=(h=nil)
8
18
  @host ||= h
9
19
  end
@@ -0,0 +1,43 @@
1
+ module PoolParty
2
+ module Verifiers
3
+
4
+ =begin
5
+
6
+ == HttpMatch Verifier
7
+
8
+ Verify the body of an HTTP call matches a regular expression
9
+
10
+ == Usage
11
+
12
+ http_match url, response_code
13
+
14
+ == Example
15
+
16
+ verify do
17
+ http_match "http://host/index.html", /Welcome to your/
18
+ http_match "http://host/index.html", /new poolparty instance/
19
+ end
20
+
21
+ =end
22
+
23
+ class HttpMatch < VerifierBase
24
+ require 'open-uri'
25
+
26
+ attr_reader :uri, :regexp
27
+ def initialize(uri, regexp)
28
+ @uri = URI.parse(uri)
29
+ @regexp = regexp
30
+ end
31
+
32
+ def passing?
33
+ @regexp.match(@uri.read) ? true : false
34
+ end
35
+
36
+ def to_s
37
+ "<#{self.class.to_s} uri:#{uri} regexp:#{regexp}>"
38
+ end
39
+
40
+ end
41
+
42
+ end
43
+ end
@@ -0,0 +1,59 @@
1
+ module PoolParty
2
+ module Verifiers
3
+
4
+ =begin
5
+
6
+ == HttpStatus Verifier
7
+
8
+ Verify the HTTP response code from a particular url
9
+
10
+ == Usage
11
+
12
+ http_status url, response_code
13
+
14
+ == Example
15
+
16
+ verify do
17
+ http_status "http://host/index.html", 200
18
+ http_status "http://host/index.html", :success
19
+ http_status "http://host/asdfasdfads.html", 404
20
+ end
21
+
22
+ =end
23
+
24
+ class HttpStatus < VerifierBase
25
+ require 'net/http'
26
+ require 'uri'
27
+
28
+ attr_reader :uri, :status
29
+ def initialize(uri, status)
30
+ @uri = URI.parse(uri)
31
+ @status = status
32
+ end
33
+
34
+ def passing?
35
+ http = Net::HTTP.new(@uri.host)
36
+ response = http.request_get(@uri.path && !@uri.path.empty? ? @uri.path : "/")
37
+
38
+ return case true
39
+ when status.kind_of?(Numeric)
40
+ response.code == @status.to_s
41
+ when status.kind_of?(Symbol)
42
+ case status
43
+ when :success then response.kind_of?(Net::HTTPSuccess)
44
+ else
45
+ raise "unknown symbol #{status}"
46
+ end
47
+ else
48
+ raise "unknown status type #{status}"
49
+ end
50
+ end
51
+
52
+ def to_s
53
+ "<#{self.class.to_s} uri:#{uri} status:#{status}>"
54
+ end
55
+
56
+ end
57
+
58
+ end
59
+ end
@@ -1,6 +1,18 @@
1
1
  module PoolParty
2
2
  module Verifiers
3
-
3
+ =begin
4
+ == Ping
5
+
6
+ Open a TCPSocket and verify you can connect.
7
+
8
+ == Example:
9
+
10
+ verify do
11
+ ping
12
+ ping(22)
13
+ end
14
+
15
+ =end
4
16
  class Ping < VerifierBase
5
17
  include ::PoolParty::Pinger
6
18
 
@@ -11,6 +23,11 @@ module PoolParty
11
23
  def passing?
12
24
  ping_port(host, port, 3)
13
25
  end
26
+
27
+ def to_s
28
+ "<#{self.class.to_s} host:#{host} port:#{port}>"
29
+ end
30
+
14
31
  end
15
32
 
16
33
  end
@@ -16,13 +16,18 @@ module PoolParty
16
16
  end
17
17
  def verify(&block)
18
18
  v = Verify.new(&block)
19
+ # ugly, todo fix
20
+ ip = nodes(:status => "running").first.ip rescue "127.0.0.1"
21
+ v.host = ip
19
22
  v.verifiers.each {|v| verifiers << v}
20
23
  end
21
24
  def passing?
22
25
  reset!
26
+ vputs "Starting cloud verification"
23
27
  verifiers.each do |v|
24
28
  ip = nodes(:status => "running").first.ip rescue "127.0.0.1"
25
29
  v.host = ip
30
+ vputs " checking #{v} on #{ip}"
26
31
  raise "Verification failed at #{v.class}" unless v.passing?
27
32
  end
28
33
  return true
@@ -39,6 +44,7 @@ module PoolParty
39
44
  Dir[::File.dirname(__FILE__)+"/verifiers/*"].each {|m| require m }
40
45
 
41
46
  class Verify
47
+ attr_accessor :host
42
48
  def initialize(&block)
43
49
  ::PoolParty.require_user_directory "verifiers"
44
50
 
data/lib/poolparty.rb CHANGED
@@ -2,7 +2,7 @@ $LOAD_PATH<< File.dirname(__FILE__)
2
2
  # Load required gems
3
3
  #TODO: remove activesupport
4
4
  @required_software = Array.new
5
- %w(rubygems activesupport ftools logging resolv ruby2ruby digest/sha2 json pp).each do |lib|
5
+ %w(rubygems fileutils resolv digest/sha2 json pp).each do |lib|
6
6
  begin
7
7
  require lib
8
8
  rescue Exception => e
@@ -32,23 +32,24 @@ unless @required_software.empty?
32
32
  exit(0)
33
33
  end
34
34
 
35
- Dir.glob(File.join(File.dirname(__FILE__),'..', 'vendor/gems/*/lib/*.rb')).each do |d|
36
- require d
35
+ Dir.glob(File.join(File.dirname(__FILE__),'..', 'vendor/gems/*/lib')).each do |d|
36
+ $LOAD_PATH.unshift(d)
37
37
  end
38
38
 
39
+ require "dslify"
40
+ require "parenting"
41
+ require "suitcase"
42
+
39
43
  t=Time.now
40
44
  ## Load PoolParty
41
- %w(version).each do |f|
42
- require "#{File.dirname(__FILE__)}/poolparty/#{f}"
45
+ module PoolParty
43
46
  end
44
47
 
45
48
  def PoolParty.require_directory(dir)
46
49
  if ::File.file?(dir)
47
- puts "#{::File.expand_path(dir)}" if $DEBUGGING || $GENERATING_MANIFEST
48
50
  require dir
49
51
  else
50
52
  Dir["#{dir}/*.rb"].sort.each do |file|
51
- puts "#{::File.expand_path(file)}" if $DEBUGGING || $GENERATING_MANIFEST
52
53
  require "#{file}" if ::File.file?(file)
53
54
  end
54
55
  Dir["#{dir}/*"].sort.each do |dir|
@@ -61,17 +62,20 @@ end
61
62
  $_poolparty_load_directories = [
62
63
  "core",
63
64
  "dependencies.rb",
65
+ "modules/searchable_paths.rb",
66
+ "modules/pinger.rb",
67
+ "modules",
68
+ "poolparty/key.rb",
64
69
  "dependency_resolver/dependency_resolver_cloud_extensions.rb",
65
70
  "dependency_resolver/dependency_resolver.rb",
66
71
  "poolparty/poolparty_base_class.rb",
67
72
  "poolparty/default.rb",
68
- "modules",
69
73
  "exceptions",
70
74
  'poolparty/key.rb',
71
75
  "dependency_resolver",
72
- "aska",
76
+ "aska.rb",
73
77
  "config",
74
- "monitors/monitor_rack",
78
+ "monitors/monitor_rack.rb",
75
79
  "capistrano.rb",
76
80
  'provisioners/provisioner_base.rb',
77
81
  'provisioners/capistrano/capistrano.rb',
@@ -128,14 +132,9 @@ class Object
128
132
  include PoolParty
129
133
  include PoolParty::Pool
130
134
  include PoolParty::Cloud
131
-
132
135
  include PoolParty::DefinableResource
133
136
  end
134
137
 
135
- class Class
136
- include PoolParty::PluginModel
137
- end
138
-
139
138
  ## Load PoolParty Plugins and package
140
139
  module PoolParty
141
140
  %w(plugins base_packages).each do |dir|
data/lib/poolpartycl.rb CHANGED
@@ -8,7 +8,7 @@ end
8
8
 
9
9
  def are_you_sure?(msg)
10
10
  puts msg
11
- resp = gets.strip!
11
+ resp = STDIN.gets.chomp
12
12
 
13
13
  case resp
14
14
  when "Y"
@@ -1,3 +1,4 @@
1
+ require "rubygems"
1
2
  require "spec"
2
3
 
3
4
  $:.unshift(File.dirname(__FILE__) + '/../../lib')
@@ -10,10 +10,4 @@ cloud :binary_testing_cloud do
10
10
  listen "8080"
11
11
  has_file :name => "/etc/apache2/apache2.conf"
12
12
  end
13
-
14
- case_of "hostname" do
15
- when_is 'master' do
16
- has_package :name=>'haproxy'
17
- end
18
- end
19
13
  end
@@ -2,23 +2,21 @@ require File.dirname(__FILE__) + '/bin_spec_helper'
2
2
  require "poolparty"
3
3
 
4
4
  class PuppetResolverSpec
5
- plugin :apache do
6
- end
7
5
  end
8
6
 
9
7
  describe "Server list active binary" do
10
8
  describe "with real cloud" do
11
9
  before(:each) do
12
- Kernel::HaproxyClass.stub!(:new).and_return nil
10
+ ::PoolParty::Plugin::Haproxy.stub!(:new).and_return nil
13
11
  $pool_specfile = __FILE__
14
12
  @p = PoolParty::Pool::Pool.load_from_file "#{::File.dirname(__FILE__)}/fixtures/bin_cloud_for_test.rb"
15
13
  @pool_hash = @p.to_properties_hash
16
14
  end
17
15
  it "should have the name on the schema" do
18
- @pool_hash.options.name.should == :binary_testing_cloud
16
+ @pool_hash[:options][:name].should == :binary_testing_cloud
19
17
  end
20
18
  it "should have the remoter base available" do
21
- @pool_hash.options.remote_base.nil?.should == false
19
+ @pool_hash[:options][:remoter_base].should_not be_nil
22
20
  end
23
21
  end
24
- end
22
+ end
@@ -4,65 +4,4 @@ describe "Object" do
4
4
  it "should respond to to_os" do
5
5
  Object.new.respond_to?(:to_os).should == true
6
6
  end
7
- describe "methodable object" do
8
- before(:each) do
9
- @obj.stub!(:run).and_return "true"
10
- end
11
- it "should run the method :run because it exists" do
12
- @obj.send_if_method(:run).should == "true"
13
- end
14
- it "should not run the method :bah because it doesn't exist" do
15
- @obj.send_if_method("bah").should == "bah"
16
- end
17
- it "should not run the method if it is sent nil" do
18
- @obj.send_if_method(nil).should == nil
19
- end
20
- it "should not run an empty string method" do
21
- @obj.send_if_method("").should == ""
22
- end
23
- it "should not run a method that is an integer" do
24
- @obj.send_if_method(2).should == 2
25
- end
26
- end
27
- describe "with_options" do
28
- before(:each) do
29
- @obj = Class.new
30
- end
31
- it "should respond to with_options" do
32
- @obj.respond_to?(:with_options).should == true
33
- end
34
- it "should set the options on the parent" do
35
- allow_message_expectations_on_nil
36
- @a.should_receive(:clone).and_return @a
37
- @a.stub!(:options).and_return({})
38
- with_options({:nick => "name"}, @a) do
39
- end
40
- end
41
-
42
- describe "running" do
43
- before(:each) do
44
- Class.stub!(:default_options).and_return({})
45
- Class.send :include, Dslify
46
- @a = Class.new
47
- @b = Class.new
48
-
49
- with_options({:nick => "name", :b => @b}, @a) do
50
- b.dude "totally"
51
- end
52
-
53
- end
54
- it "should set the options on the child in the instance eval" do
55
- @b.dude.should == "totally"
56
- end
57
- end
58
- describe "contextual running" do
59
- before(:each) do
60
- @obj.stub!(:default_options).and_return {}
61
- @a = @obj.instance_eval { @a = "hello world" }
62
- end
63
- it "should have the method meta_eval" do
64
- @obj.respond_to?(:meta_eval).should == true
65
- end
66
- end
67
- end
68
- end
7
+ end
@@ -38,11 +38,11 @@ describe "Ordered Hash" do
38
38
  @oh[:arr] = [1,2,3]
39
39
  @oh.to_json.should == "{\"var1\":10,\"var2\":2,\"var3\":3,\"var4\":4,\"arr\":[1,2,3]}"
40
40
  end
41
- it "PoolParty Key" do
42
- @oh[:key] = [Key.new, Key.new('path/to/nowhere')]
43
- expected=<<JSO
44
- {\"var1\":10,\"var2\":2,\"var3\":3,\"var4\":4,\"key\":[{\"basename\":\"id_rsa\",\"full_filepath\": \"/etc/poolparty/id_rsa\"},{\"basename\":\"path/to/nowhere\",\"full_filepath\": \"/etc/poolparty/path/to/nowhere\"}]}
45
- JSO
46
- @oh.to_json.should == expected.strip
47
- end
41
+ it "PoolParty Key" #do
42
+ # @oh[:key] = [Key.new, Key.new('path/to/nowhere')]
43
+ # expected=<<JSO
44
+ # {\"var1\":10,\"var2\":2,\"var3\":3,\"var4\":4,\"key\":[{\"basename\":\"id_rsa\",\"full_filepath\": \"/etc/poolparty/id_rsa\"},{\"basename\":\"path/to/nowhere\",\"full_filepath\": \"/etc/poolparty/path/to/nowhere\"}]}
45
+ # JSO
46
+ # @oh.to_json.should == expected.strip
47
+ # end
48
48
  end
@@ -72,7 +72,7 @@ listen web_proxy 127.0.0.1:3000
72
72
  @str = "prok"
73
73
  end
74
74
  it "should be able to turn itself into constant" do
75
- @str.class_constant.should == PoolPartyProkClass
75
+ @str.class_constant.should == PoolPartyProk
76
76
  end
77
77
  it "should turn itself into a class constant" do
78
78
  @str.class_constant.class.should == Class
@@ -64,8 +64,6 @@ describe "ChefResolver" do
64
64
  describe "with a cloud" do
65
65
  before(:each) do
66
66
  class ChefResolverSpec
67
- plugin :apache do
68
- end
69
67
  end
70
68
  @cloud = cloud :hope do
71
69
  keypair "bob"
@@ -81,12 +79,6 @@ describe "ChefResolver" do
81
79
  has_file :name => "/etc/apache2/apache2.conf", :template => "#{::File.dirname(__FILE__)}/../fixtures/test_template.erb", :friends => "bob"
82
80
  has_exec :command => "ls /etc/apache2"
83
81
  end
84
-
85
- case_of "hostname" do
86
- when_is 'master' do
87
- has_package :name=>'haproxy'
88
- end
89
- end
90
82
  end
91
83
  @properties = @cloud.to_properties_hash
92
84
 
@@ -8,56 +8,62 @@ end
8
8
  class DependencyResolverSpecTestResource
9
9
  include Dslify
10
10
  include PoolParty::DependencyResolverResourceExtensions
11
+
12
+ dsl_methods :name, :template, :content
11
13
  end
12
14
 
13
15
  # plugins, base_packages
14
16
  class DependencyResolverSpecTestService < DependencyResolverCloudExtensionsSpecBase
15
-
17
+ dsl_methods :listen
16
18
  end
17
19
 
18
20
  # clouds, duh
19
21
  class DependencyResolverSpecTestCloud < DependencyResolverCloudExtensionsSpecBase
22
+ dsl_methods :keypair, :name
20
23
  end
21
24
 
22
- class JunkClassForDefiningPlugin
23
- plugin :apache_plugin do
24
- def loaded(o={},&block)
25
- end
26
- end
27
- end
25
+ # class JunkClassForDefiningPlugin
26
+ # apache_plugin do
27
+ # default_options(
28
+ # :listen => 80
29
+ # )
30
+ # def loaded(o={},&block)
31
+ # end
32
+ # end
33
+ # end
28
34
 
29
35
  describe "Resolution spec" do
30
36
  before(:each) do
31
37
  @apache_file = DependencyResolverSpecTestResource.new
32
- @apache_file.name "/etc/apache2/apache2.conf"
33
- @apache_file.template "/absolute/path/to/template"
34
- @apache_file.content "rendered template string"
38
+ @apache_file.name = "/etc/apache2/apache2.conf"
39
+ @apache_file.template = "/absolute/path/to/template"
40
+ @apache_file.content = "rendered template string"
35
41
 
36
42
  @apache = DependencyResolverSpecTestService.new :apache_file
37
- @apache.listen "8080"
43
+ @apache.listen = "8080"
38
44
  @apache.resources[:file] = []
39
45
  @apache.resources[:file] << @apache_file
40
46
 
41
47
  @cloud = DependencyResolverSpecTestCloud.new :cloud
42
- @cloud.keypair "bob"
43
- @cloud.name "dog"
48
+ @cloud.keypair = "bob"
49
+ @cloud.name = "dog"
44
50
 
45
- (@cloud.services[:apache] ||= []) << @apache
51
+ (@cloud.resources[:apache] ||= []) << @apache
46
52
 
47
53
  @cloud_file_motd = DependencyResolverSpecTestResource.new
48
- @cloud_file_motd.name "/etc/motd"
49
- @cloud_file_motd.content "Welcome to the cloud"
54
+ @cloud_file_motd.name = "/etc/motd"
55
+ @cloud_file_motd.content = "Welcome to the cloud"
50
56
 
51
57
  @cloud_file_profile = DependencyResolverSpecTestResource.new
52
- @cloud_file_profile.name "/etc/profile"
53
- @cloud_file_profile.content "profile info"
58
+ @cloud_file_profile.name = "/etc/profile"
59
+ @cloud_file_profile.content = "profile info"
54
60
 
55
61
  @cloud.resources[:file] = []
56
62
  @cloud.resources[:file] << @cloud_file_motd
57
63
  @cloud.resources[:file] << @cloud_file_profile
58
64
 
59
65
  @cloud_directory_var_www = DependencyResolverSpecTestResource.new
60
- @cloud_directory_var_www.name "/var/www"
66
+ @cloud_directory_var_www.name = "/var/www"
61
67
 
62
68
  @cloud.resources[:directory] = []
63
69
  @cloud.resources[:directory] << @cloud_directory_var_www
@@ -67,21 +73,18 @@ describe "Resolution spec" do
67
73
  end
68
74
  describe "to_properties_hash" do
69
75
  it "should output a hash" do
70
- @cloud.to_properties_hash.class.should == OrderedHash
71
- # puts "<pre>#{@cloud.to_properties_hash.to_yaml}</pre>"
76
+ @cloud.to_properties_hash.class.should == Hash
72
77
  end
73
78
  it "should have resources on the cloud as an array of hashes" do
74
79
  @cloud.to_properties_hash[:resources].class.should == Array
75
80
  end
76
- it "should have services on the cloud as an array of hashes" do
77
- @cloud.to_properties_hash[:services].class.should == OrderedHash
78
- end
79
81
  end
80
82
 
81
83
  describe "defined cloud" do
82
84
  before(:each) do
83
85
  reset!
84
- @file = "Hello <%= friends %> on port <%= listen %>"
86
+ ::File.stub!(:basename).and_return "template"
87
+ @file = "Hello <%= friends %> on port <%= port %>"
85
88
  @file.stub!(:read).and_return @file
86
89
  Template.stub!(:open).and_return @file
87
90
 
@@ -92,16 +95,19 @@ describe "Resolution spec" do
92
95
  has_directory :name => "/var/www"
93
96
  has_package :name => "bash"
94
97
  # parent == nil
95
- apache_plugin do
98
+ apache do
96
99
  # parent == TestClass
97
100
  # puts "<pre>#{parent}</pre> on <pre>#{context_stack.map {|a| a.class }.join(", ")} from #{self.class}</pre>"
98
101
  listen "8080"
99
- has_file :name => "/etc/apache2/apache2.conf", :template => "/absolute/path/to/template", :friends => "bob", :render_as => :erb
102
+ has_file :name => "/etc/apache2/apache2.conf",
103
+ :template => "/absolute/path/to/template",
104
+ :friends => "bob",
105
+ :render_as => :erb
100
106
  end
101
107
  end
102
108
  @cloud = clouds[:dog_for_test]
103
109
  @properties = @cloud.to_properties_hash
104
- @apache_key = @properties[:services].keys.select{|k| k.to_s =~ /apache/ }.first
110
+ @apache_key = @properties[:resources].select {|hsh| hsh[:name] =~ /apache/ }.first
105
111
  end
106
112
 
107
113
  it "should have the method to_properties_hash on the cloud" do
@@ -112,10 +118,7 @@ describe "Resolution spec" do
112
118
  @properties[:resources].class.should == Array
113
119
  end
114
120
  it "contain content in the template's hash" do
115
- @properties[:services][@apache_key].first.resources.select_with_hash(:pp_type => "file").last[:content].should == "Hello bob on port 8080"
116
- end
117
- it "should have services" do
118
- @properties[:services][@apache_key].empty?.should == false
121
+ @apache_key.resources.select_with_hash(:pp_type => "file").first[:content].should == "Hello bob on port 8080"
119
122
  end
120
123
  it "contain the files in a hash" do
121
124
  # puts "<pre>#{@properties.to_yaml}</pre>"