auser-poolparty 1.2.2 → 1.2.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (247) hide show
  1. data/VERSION.yml +1 -1
  2. data/bin/cloud +37 -48
  3. data/bin/cloud-bootstrap +33 -23
  4. data/bin/cloud-configure +33 -34
  5. data/bin/cloud-console +31 -9
  6. data/bin/cloud-contract +27 -11
  7. data/bin/cloud-expand +32 -19
  8. data/bin/cloud-list +31 -15
  9. data/bin/cloud-osxcopy +22 -12
  10. data/bin/cloud-provision +35 -24
  11. data/bin/cloud-setup-dev +31 -20
  12. data/bin/cloud-show +40 -21
  13. data/bin/cloud-ssh +24 -15
  14. data/bin/cloud-start +33 -19
  15. data/bin/cloud-terminate +33 -20
  16. data/bin/cloud-verify +38 -29
  17. data/bin/install-poolparty +4 -198
  18. data/bin/server-cloud-elections +1 -1
  19. data/examples/basic.rb +9 -9
  20. data/examples/fairchild.rb +1 -1
  21. data/examples/metavirt_cloud.rb +21 -0
  22. data/lib/poolparty/aska.rb +3 -0
  23. data/lib/poolparty/base_packages/haproxy.rb +19 -18
  24. data/lib/poolparty/base_packages/poolparty.rb +1 -1
  25. data/lib/poolparty/core/hash.rb +46 -0
  26. data/lib/poolparty/core/object.rb +21 -15
  27. data/lib/poolparty/core/string.rb +16 -0
  28. data/lib/poolparty/dependency_resolver/chef_resolver.rb +23 -6
  29. data/lib/poolparty/dependency_resolver/dependency_resolver.rb +1 -1
  30. data/lib/poolparty/dependency_resolver/dependency_resolver_cloud_extensions.rb +2 -2
  31. data/lib/poolparty/dependency_resolver/puppet_resolver.rb +10 -32
  32. data/lib/poolparty/helpers/optioner.rb +19 -14
  33. data/lib/poolparty/installers/base_installer.rb +113 -0
  34. data/lib/poolparty/installers/ec2.rb +141 -0
  35. data/lib/poolparty/installers/vmrun.rb +144 -0
  36. data/lib/poolparty/modules/callbacks.rb +6 -2
  37. data/lib/poolparty/modules/cloud_dsl.rb +2 -2
  38. data/lib/poolparty/modules/cloud_resourcer.rb +10 -50
  39. data/lib/poolparty/modules/file_writer.rb +2 -2
  40. data/lib/poolparty/modules/pinger.rb +4 -1
  41. data/lib/poolparty/modules/resourcing_dsl.rb +1 -29
  42. data/lib/poolparty/modules/searchable_paths.rb +3 -3
  43. data/lib/poolparty/monitors/monitor_rack.rb +1 -1
  44. data/lib/poolparty/net/remote_bases.rb +2 -0
  45. data/lib/poolparty/net/remote_instance.rb +6 -4
  46. data/lib/poolparty/net/remoter/interactive.rb +2 -3
  47. data/lib/poolparty/net/remoter_base.rb +54 -31
  48. data/lib/poolparty/net/remoter_bases/ec2/ec2.rb +49 -26
  49. data/lib/poolparty/net/remoter_bases/ec2/ec2_remote_instance.rb +6 -19
  50. data/lib/poolparty/net/remoter_bases/ec2/ec2_response_object.rb +4 -3
  51. data/lib/poolparty/net/remoter_bases/metavirt/metavirt.rb +99 -0
  52. data/lib/poolparty/net/remoter_bases/metavirt/metavirt_instance.rb +52 -0
  53. data/lib/poolparty/net/remoter_bases/vmrun/utilities/vm_disk.rb +1 -1
  54. data/lib/poolparty/net/remoter_bases/vmrun/utilities/vmx.rb +1 -1
  55. data/lib/poolparty/net/remoter_bases/vmrun/utilities/vmx_file.rb +117 -117
  56. data/lib/poolparty/net/remoter_bases/vmrun/vmrun.rb +36 -31
  57. data/lib/poolparty/net/remoter_bases/vmrun/vmrun_instance.rb +9 -5
  58. data/lib/poolparty/plugins/apache2/apache.rb +118 -73
  59. data/lib/poolparty/plugins/chef.rb +15 -17
  60. data/lib/poolparty/plugins/chef_deploy.rb +18 -4
  61. data/lib/poolparty/plugins/deploy_directory.rb +25 -16
  62. data/lib/poolparty/plugins/gem_package.rb +15 -5
  63. data/lib/poolparty/plugins/git.rb +44 -30
  64. data/lib/poolparty/plugins/line_in_file.rb +5 -1
  65. data/lib/poolparty/plugins/rails_deploy.rb +79 -26
  66. data/lib/poolparty/plugins/svn.rb +2 -2
  67. data/lib/poolparty/poolparty/cloud.rb +101 -47
  68. data/lib/poolparty/poolparty/default.rb +25 -23
  69. data/lib/poolparty/poolparty/key.rb +18 -27
  70. data/lib/poolparty/poolparty/neighborhoods.rb +1 -1
  71. data/lib/poolparty/poolparty/plugin.rb +17 -7
  72. data/lib/poolparty/poolparty/pool.rb +3 -3
  73. data/lib/poolparty/poolparty/poolparty_base_class.rb +41 -35
  74. data/lib/poolparty/poolparty/resource.rb +18 -44
  75. data/lib/poolparty/poolparty/service.rb +1 -5
  76. data/lib/poolparty/provision/boot_strapper.rb +24 -19
  77. data/lib/poolparty/provision/configurations/chef.rb +4 -4
  78. data/lib/poolparty/provision/dr_configure.rb +11 -10
  79. data/lib/poolparty/resources/cron.rb +7 -3
  80. data/lib/poolparty/resources/directory.rb +7 -0
  81. data/lib/poolparty/resources/exec.rb +2 -1
  82. data/lib/poolparty/resources/file.rb +23 -9
  83. data/lib/poolparty/resources/group.rb +21 -0
  84. data/lib/poolparty/resources/host.rb +2 -1
  85. data/lib/poolparty/resources/mount.rb +0 -4
  86. data/lib/poolparty/resources/remote_file.rb +1 -1
  87. data/lib/poolparty/resources/service.rb +2 -1
  88. data/lib/poolparty/resources/sshkey.rb +10 -12
  89. data/lib/poolparty/resources/symlink.rb +3 -5
  90. data/lib/poolparty/resources/user.rb +5 -0
  91. data/lib/poolparty/resources/variable.rb +1 -1
  92. data/lib/poolparty/templates/haproxy.conf +1 -1
  93. data/lib/poolparty/verification/verify.rb +4 -0
  94. data/lib/poolparty.rb +9 -4
  95. data/lib/poolpartycl.rb +1 -52
  96. data/spec/bin/bin_spec_helper.rb +1 -0
  97. data/spec/bin/server-list-active_spec.rb +3 -3
  98. data/spec/poolparty/core/object_spec.rb +9 -46
  99. data/spec/poolparty/dependency_resolver/dependency_resolver_cloud_extensions_spec.rb +18 -12
  100. data/spec/poolparty/fixtures/clouds.json +1 -1
  101. data/spec/poolparty/helpers/optioner_spec.rb +4 -11
  102. data/spec/poolparty/modules/cloud_resourcer_spec.rb +1 -1
  103. data/spec/poolparty/net/remote_instance_spec.rb +0 -1
  104. data/spec/poolparty/net/remoter_base_spec.rb +7 -11
  105. data/spec/poolparty/net/remoter_bases/ec2_mocks_and_stubs.rb +9 -11
  106. data/spec/poolparty/net/remoter_bases/ec2_remote_instance_spec.rb +6 -44
  107. data/spec/poolparty/net/remoter_bases/ec2_spec.rb +2 -3
  108. data/spec/poolparty/net/remoter_spec.rb +2 -3
  109. data/spec/poolparty/plugins/git_spec.rb +5 -8
  110. data/spec/poolparty/poolparty/cloud_spec.rb +17 -24
  111. data/spec/poolparty/poolparty/configurers/files/ruby_basic.rb +1 -3
  112. data/spec/poolparty/poolparty/configurers/ruby_spec.rb +1 -6
  113. data/spec/poolparty/poolparty/default_spec.rb +23 -22
  114. data/spec/poolparty/poolparty/example_spec.rb +6 -5
  115. data/spec/poolparty/poolparty/plugin_model_spec.rb +7 -4
  116. data/spec/poolparty/poolparty/pool_spec.rb +2 -9
  117. data/spec/poolparty/poolparty/resource_spec.rb +10 -24
  118. data/spec/poolparty/poolparty/script_spec.rb +1 -4
  119. data/spec/poolparty/poolparty/test_plugins/webserver.rb +0 -2
  120. data/spec/poolparty/resources/file_spec.rb +4 -4
  121. data/spec/poolparty/resources/service_spec.rb +1 -1
  122. data/spec/poolparty/spec_helper.rb +9 -38
  123. data/tasks/spec.rake +6 -2
  124. data/test/fixtures/test_key +1 -0
  125. data/test/poolparty/core/object_test.rb +29 -0
  126. data/test/poolparty/dependency_resolver/puppet_resolver_test.rb +1 -1
  127. data/test/poolparty/modules/cloud_dsl_test.rb +4 -4
  128. data/test/poolparty/net/remoter_bases/metavirt/metavirt_test.rb +55 -0
  129. data/test/poolparty/net/remoter_bases/vmrun/vmrun_test.rb +41 -14
  130. data/test/poolparty/plugins/chef_deploy_test.rb +37 -0
  131. data/test/poolparty/plugins/rails_deploy_test.rb +50 -0
  132. data/test/poolparty/poolparty/plugin_test.rb +18 -0
  133. data/test/poolparty/poolparty/poolparty_base_class_test.rb +41 -3
  134. data/test/test_helper.rb +5 -1
  135. data/vendor/gems/dslify/LICENSE +20 -0
  136. data/vendor/gems/dslify/README.rdoc +33 -0
  137. data/vendor/gems/dslify/Rakefile +56 -56
  138. data/vendor/gems/dslify/lib/dslify.rb +76 -5
  139. data/vendor/gems/dslify/test/dslify_test.rb +197 -0
  140. data/vendor/gems/dslify/test/test_helper.rb +7 -0
  141. data/vendor/gems/git-style-binaries/README.markdown +274 -0
  142. data/vendor/gems/{butterfly → git-style-binaries}/Rakefile +64 -62
  143. data/vendor/gems/git-style-binaries/VERSION.yml +4 -0
  144. data/vendor/gems/git-style-binaries/doc/EXAMPLES +1 -0
  145. data/vendor/gems/git-style-binaries/doc/poolparty-binaries.screenplay +45 -0
  146. data/vendor/gems/git-style-binaries/git-style-binaries.gemspec +69 -0
  147. data/vendor/gems/git-style-binaries/lib/ext/colorize.rb +198 -0
  148. data/vendor/gems/git-style-binaries/lib/ext/core.rb +16 -0
  149. data/vendor/gems/git-style-binaries/lib/git-style-binary/autorunner.rb +21 -0
  150. data/vendor/gems/git-style-binaries/lib/git-style-binary/command.rb +204 -0
  151. data/vendor/gems/git-style-binaries/lib/git-style-binary/commands/help.rb +32 -0
  152. data/vendor/gems/git-style-binaries/lib/git-style-binary/helpers/name_resolver.rb +78 -0
  153. data/vendor/gems/git-style-binaries/lib/git-style-binary/helpers/pager.rb +37 -0
  154. data/vendor/gems/git-style-binaries/lib/git-style-binary/parser.rb +223 -0
  155. data/vendor/gems/git-style-binaries/lib/git-style-binary.rb +74 -0
  156. data/vendor/gems/git-style-binaries/test/fixtures/flickr +4 -0
  157. data/vendor/gems/git-style-binaries/test/fixtures/flickr-download +17 -0
  158. data/vendor/gems/git-style-binaries/test/fixtures/wordpress +42 -0
  159. data/vendor/gems/git-style-binaries/test/fixtures/wordpress-categories +18 -0
  160. data/vendor/gems/git-style-binaries/test/fixtures/wordpress-list +18 -0
  161. data/vendor/gems/git-style-binaries/test/fixtures/wordpress-post +26 -0
  162. data/vendor/gems/git-style-binaries/test/git-style-binary/command_test.rb +17 -0
  163. data/vendor/gems/git-style-binaries/test/git_style_binary_test.rb +21 -0
  164. data/vendor/gems/git-style-binaries/test/running_binaries_test.rb +224 -0
  165. data/vendor/gems/git-style-binaries/test/shoulda_macros/matching_stdio.rb +13 -0
  166. data/vendor/gems/git-style-binaries/test/test_helper.rb +28 -0
  167. data/vendor/gems/parenting/lib/parenting/parenting.rb +13 -4
  168. data/vendor/gems/rest-client/README.rdoc +151 -0
  169. data/vendor/gems/rest-client/Rakefile +85 -0
  170. data/vendor/gems/rest-client/bin/restclient +87 -0
  171. data/vendor/gems/rest-client/lib/rest_client.rb +2 -0
  172. data/vendor/gems/rest-client/lib/restclient/exceptions.rb +84 -0
  173. data/vendor/gems/rest-client/lib/restclient/mixin/response.rb +43 -0
  174. data/vendor/gems/rest-client/lib/restclient/raw_response.rb +30 -0
  175. data/vendor/gems/rest-client/lib/restclient/request.rb +232 -0
  176. data/vendor/gems/rest-client/lib/restclient/resource.rb +146 -0
  177. data/vendor/gems/rest-client/lib/restclient/response.rb +20 -0
  178. data/vendor/gems/rest-client/lib/restclient.rb +93 -0
  179. data/vendor/gems/rest-client/rest-client.gemspec +21 -0
  180. data/vendor/gems/rest-client/spec/base.rb +4 -0
  181. data/vendor/gems/rest-client/spec/exceptions_spec.rb +54 -0
  182. data/vendor/gems/rest-client/spec/mixin/response_spec.rb +46 -0
  183. data/vendor/gems/rest-client/spec/raw_response_spec.rb +17 -0
  184. data/vendor/gems/rest-client/spec/request_spec.rb +442 -0
  185. data/vendor/gems/rest-client/spec/resource_spec.rb +75 -0
  186. data/vendor/gems/rest-client/spec/response_spec.rb +16 -0
  187. data/vendor/gems/rest-client/spec/restclient_spec.rb +53 -0
  188. data/vendor/gems/trollop/FAQ.txt +35 -0
  189. data/vendor/gems/trollop/History.txt +97 -0
  190. data/vendor/gems/trollop/Manifest.txt +7 -0
  191. data/vendor/gems/trollop/README.txt +40 -0
  192. data/vendor/gems/trollop/Rakefile +36 -0
  193. data/vendor/gems/trollop/lib/trollop.rb +735 -0
  194. data/vendor/gems/trollop/release-script.txt +13 -0
  195. data/vendor/gems/trollop/test/test_trollop.rb +1042 -0
  196. data/vendor/gems/trollop/www/index.html +167 -0
  197. metadata +100 -70
  198. data/bin/cloud-describe +0 -28
  199. data/bin/cloud-handle-load +0 -27
  200. data/bin/cloud-rsync +0 -28
  201. data/bin/cloud-spec +0 -40
  202. data/lib/poolparty/plugins/nanite.rb +0 -41
  203. data/lib/poolparty/plugins/runit.rb +0 -96
  204. data/vendor/gems/butterfly/History.txt +0 -4
  205. data/vendor/gems/butterfly/PostInstall.txt +0 -2
  206. data/vendor/gems/butterfly/README.rdoc +0 -48
  207. data/vendor/gems/butterfly/VERSION.yml +0 -4
  208. data/vendor/gems/butterfly/bin/flutter +0 -4
  209. data/vendor/gems/butterfly/butterfly.gemspec +0 -37
  210. data/vendor/gems/butterfly/examples/config.ru +0 -15
  211. data/vendor/gems/butterfly/examples/my_app.rb +0 -12
  212. data/vendor/gems/butterfly/lib/butterfly.rb +0 -14
  213. data/vendor/gems/butterfly/lib/handler.rb +0 -48
  214. data/vendor/gems/butterfly/lib/request.rb +0 -29
  215. data/vendor/gems/butterfly/lib/response.rb +0 -49
  216. data/vendor/gems/butterfly/script/console +0 -10
  217. data/vendor/gems/butterfly/script/destroy +0 -14
  218. data/vendor/gems/butterfly/script/generate +0 -14
  219. data/vendor/gems/butterfly/test/test_adapter_base.rb +0 -23
  220. data/vendor/gems/butterfly/test/test_butterfly_request.rb +0 -46
  221. data/vendor/gems/butterfly/test/test_butterfly_response.rb +0 -43
  222. data/vendor/gems/butterfly/test/test_butterfly_server.rb +0 -16
  223. data/vendor/gems/butterfly/test/test_default.rb +0 -12
  224. data/vendor/gems/butterfly/test/test_helper.rb +0 -6
  225. data/vendor/gems/dslify/History.txt +0 -4
  226. data/vendor/gems/dslify/Manifest.txt +0 -25
  227. data/vendor/gems/dslify/PostInstall.txt +0 -5
  228. data/vendor/gems/dslify/README.txt +0 -60
  229. data/vendor/gems/dslify/config/hoe.rb +0 -73
  230. data/vendor/gems/dslify/config/requirements.rb +0 -15
  231. data/vendor/gems/dslify/dslify.gemspec +0 -40
  232. data/vendor/gems/dslify/lib/dslify/dslify.rb +0 -76
  233. data/vendor/gems/dslify/lib/dslify/version.rb +0 -10
  234. data/vendor/gems/dslify/script/console +0 -10
  235. data/vendor/gems/dslify/script/destroy +0 -14
  236. data/vendor/gems/dslify/script/generate +0 -14
  237. data/vendor/gems/dslify/script/txt2html +0 -82
  238. data/vendor/gems/dslify/setup.rb +0 -1585
  239. data/vendor/gems/dslify/tasks/deployment.rake +0 -34
  240. data/vendor/gems/dslify/tasks/environment.rake +0 -7
  241. data/vendor/gems/dslify/tasks/website.rake +0 -17
  242. data/vendor/gems/dslify/test/test_dslify.rb +0 -138
  243. data/vendor/gems/dslify/website/index.html +0 -86
  244. data/vendor/gems/dslify/website/index.txt +0 -83
  245. data/vendor/gems/dslify/website/javascripts/rounded_corners_lite.inc.js +0 -285
  246. data/vendor/gems/dslify/website/stylesheets/screen.css +0 -138
  247. data/vendor/gems/dslify/website/template.html.erb +0 -48
@@ -1,23 +1,33 @@
1
+ =begin rdoc
2
+ Enables haproxy for a cloud
3
+ =end
1
4
  module PoolParty
2
5
  class Base
3
6
  plugin :haproxy do
4
7
 
8
+ default_options(
9
+ :port => 80,
10
+ :forwarding_port => 8080,
11
+ :proxy_mode => "http"
12
+ )
13
+
5
14
  def before_configure
6
15
  end
7
16
 
8
- def enable
9
- # has_chef_recipe "apache2"
10
- # include_chef_recipe "#{::File.dirname(__FILE__)}/../../../vendor/chef/apache2"
11
-
17
+ def loaded(o={}, &block)
18
+ set_vars_from_options(cloud.dsl_options.reject{|k,v| [:enabled, :disabled].include?(v) }) if cloud
12
19
  # Restart sysklogd after we update the haproxy.log
13
20
  has_service(:name => "sysklogd")
21
+
22
+ has_package "haproxy"
23
+
14
24
  # Template variables
15
- has_variable("haproxy_name", :value => "#{cloud.name}")
25
+ has_variable("haproxy_name", :value => "#{(cloud ? cloud.name : name)}")
16
26
  has_variable("listen_ports", :value => [ "8080" ], :namespace => "apache")
17
27
 
18
- has_variable("ports_haproxy", :value => ([(self.respond_to?(:port) ? port : Default.port)].flatten))
19
- has_variable("forwarding_port", :value => (respond_to?(:forwarding_port) ? forwarding_port : Default.forwarding_port))
20
- has_variable("proxy_mode", :value => (respond_to?(:proxy_mode) ? proxy_mode : Default.proxy_mode))
28
+ has_variable("ports_haproxy", :value => ([(port || Default.port)].flatten))
29
+ has_variable("forwarding_port", :value => (forwarding_port || Default.forwarding_port))
30
+ has_variable("proxy_mode", :value => (proxy_mode || Default.proxy_mode))
21
31
 
22
32
  # Startup haproxy and enable it
23
33
  has_line_in_file(:line => "ENABLED=1", :file => "/etc/default/haproxy")
@@ -27,14 +37,7 @@ module PoolParty
27
37
  content ''
28
38
  end
29
39
 
30
- has_directory "/var/run/haproxy"
31
- # has_package "apache2"
32
- # has_service "apache2"
33
-
34
- has_package "haproxy" do
35
- # stops get_service("apache2"), :immediately
36
- # starts get_service("apache2")
37
- end
40
+ has_directory "/var/run/haproxy"
38
41
 
39
42
  has_exec "reloadhaproxy",
40
43
  :command => "/etc/init.d/haproxy reload",
@@ -49,8 +52,6 @@ module PoolParty
49
52
  # Service is required
50
53
  has_service("haproxy") do
51
54
  action [:start, :enable]
52
- # stops get_service("apache2"), :immediately
53
- # starts get_service("apache2")
54
55
  end
55
56
 
56
57
  end
@@ -4,7 +4,7 @@ module PoolParty
4
4
 
5
5
  def enable
6
6
  has_cron "/usr/bin/server-manage-election" do
7
- minute "0,5,10,15,20,25,30,35,40,45,50,55"
7
+ minute "*"
8
8
  command "/usr/bin/server-manage-election"
9
9
  end
10
10
  end
@@ -2,6 +2,22 @@
2
2
  Hash extentions
3
3
  =end
4
4
  class Hash
5
+
6
+ # alias_method :_old_reader, :[]
7
+ # # Treat string and symbols the same
8
+ # def [](key)
9
+ # if o = _old_reader(key) || has_key?(key)
10
+ # return o
11
+ # elsif key.is_a? Symbol
12
+ # _old_reader(key.to_s)
13
+ # elsif key.is_a? String
14
+ # _old_reader(key.to_sym) rescue _old_reader(key)
15
+ # else
16
+ # _old_reader(key)
17
+ # end
18
+ # end
19
+
20
+ # Return a hash of all the elements where the block evaluates to true
5
21
  def choose(&block)
6
22
  Hash[*self.select(&block).inject([]){|res,(k,v)| res << k << v}]
7
23
  end
@@ -66,6 +82,36 @@ class Hash
66
82
  keys.sort[idx - 1]
67
83
  end
68
84
 
85
+ def stringify_keys
86
+ dup.stringify_keys!
87
+ end
88
+
89
+ # Converts all of the keys to strings
90
+ def stringify_keys!
91
+ keys.each{|k|
92
+ v = delete(k)
93
+ self[k.to_s] = v
94
+ v.stringify_keys! if v.is_a?(Hash)
95
+ v.each{|p| p.stringify_keys! if p.is_a?(Hash)} if v.is_a?(Array)
96
+ }
97
+ self
98
+ end
99
+
100
+ def symbolize_keys
101
+ dup.stringify_keys!
102
+ end
103
+
104
+ # Converts all of the keys to strings
105
+ def symbolize_keys!
106
+ keys.each{|k|
107
+ v = delete(k)
108
+ self[k.to_sym] = v
109
+ v.symbolize_keys! if v.is_a?(Hash)
110
+ v.each{|p| p.symbolize_keys! if p.is_a?(Hash)} if v.is_a?(Array)
111
+ }
112
+ self
113
+ end
114
+
69
115
  def method_missing(sym, *args, &block)
70
116
  if has_key?(sym)
71
117
  fetch(sym)
@@ -16,11 +16,7 @@ class Object
16
16
  original = self.method(original_id).to_proc
17
17
  define_method(new_id){|*args| original.call(*args)}
18
18
  end
19
- def with_options(opts={}, par=nil, &block)
20
- @p = par.clone
21
- @p.options.merge!(opts)
22
- @p.instance_eval &block if block
23
- end
19
+
24
20
  def returning(receiver)
25
21
  yield receiver
26
22
  receiver
@@ -29,14 +25,24 @@ class Object
29
25
  block.in_context(self).call
30
26
  self
31
27
  end
32
- def send_if_method(v, *args)
33
- if (v.nil? || v.to_s.empty? || v.is_a?(Array) || v.is_a?(Integer))# && !v.is_a?(Symbol))#)v.is_a?(String)
34
- v
35
- else
36
- vs = v.to_s.to_sym
37
- respond_to?(vs) ? self.send(vs, *args) : v rescue v #NOTE MF: maybe we should not rescue all errors?
38
- end
39
- end
28
+
29
+ # Procs that have been run already in the run_once blocks
30
+ # This is just a container array of procs
31
+ def run_procs
32
+ @run_procs ||= []
33
+ end
34
+
35
+ # Do once.
36
+ # Takes a block. IF this block has already been run (from the run_procs array),
37
+ # then run it and store the block unique id in the run_procs array so
38
+ # it never gets run again
39
+ def do_once(&block)
40
+ unless run_procs.include?(block.to_s)
41
+ instance_eval &block if block
42
+ run_procs << block.to_s
43
+ end
44
+ end
45
+
40
46
  def respec_string
41
47
  case self.class
42
48
  when String
@@ -85,7 +91,7 @@ class Object
85
91
  print "#{m}" if debugging?(o) || verbose?(o) rescue ""
86
92
  end
87
93
  def verbose?(o=self)
88
- o.respond_to?(:verbose) ? o.verbose : ($TESTING ||= false)
94
+ o.respond_to?(:verbose) ? o.verbose : (debugging? || $TESTING ||= false)
89
95
  end
90
96
  def debugging?(o=self)
91
97
  o.respond_to?(:debug) ? o.debug : ($DEBUGGING ||= false)
@@ -100,4 +106,4 @@ class Object
100
106
  def unix_hide_string
101
107
  "2>&1 > /dev/null"
102
108
  end
103
- end
109
+ end
@@ -1,3 +1,7 @@
1
+ require 'rubygems'
2
+ require 'json'
3
+ require 'json/add/core'
4
+
1
5
  class String
2
6
  def hasherize(format=[])
3
7
  hash = {}
@@ -46,6 +50,9 @@ class String
46
50
  self.gsub(/['"]/, '\\\"')
47
51
  # self.gsub(/["']/, "\\\"")
48
52
  end
53
+ def path_quote
54
+ self.safe_quote.gsub(/[ ]/, '\ ')
55
+ end
49
56
  def nice_runnable(quite=true)
50
57
  self.split(/ && /).join("\n")
51
58
  end
@@ -188,4 +195,13 @@ class String
188
195
  File.join(self, o.to_s)
189
196
  end
190
197
 
198
+ # Parse json string to a ruby object
199
+ def json_parse
200
+ return nil if self == "null" || self.empty?
201
+ result = JSON.parse self
202
+ if result.respond_to? :keys
203
+ result.symbolize_keys!
204
+ end
205
+ end
206
+
191
207
  end
@@ -26,7 +26,6 @@ module PoolParty
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)
@@ -46,7 +45,6 @@ module PoolParty
46
45
  end
47
46
 
48
47
  def build_base_recipe_directory(nm)
49
- dputs "Making new #{base_dir}"
50
48
  ::FileUtils.mkdir_p "#{base_dir}"
51
49
 
52
50
  [ "recipes", "templates", "attributes" ].each do |bdir|
@@ -61,7 +59,11 @@ module PoolParty
61
59
  end
62
60
 
63
61
  def base_dir(nm="poolparty")
64
- @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"
65
67
  end
66
68
 
67
69
  def options_to_string(opts,tabs=0)
@@ -159,7 +161,8 @@ module PoolParty
159
161
  hsh.merge!({:source => "#{nm}.erb"})
160
162
  end
161
163
  #
162
- hsh.delete(:require) if hsh.has_key?(:require)
164
+ hsh.delete(:require)
165
+ hsh.delete(:requires)
163
166
  hsh.delete(:name) # we don't need the names in the methods
164
167
  hsh
165
168
  end
@@ -211,9 +214,23 @@ module PoolParty
211
214
  when PoolParty::Resources::Resource
212
215
  "resources(:#{handle_chef_types(obj.class.to_s.top_level_class.downcase.to_sym)} => \"#{obj.name}\")"
213
216
  when Fixnum
214
- "#{obj.to_i}"
217
+ case obj
218
+ when /^\d{3}$/
219
+ "0#{obj.to_i}"
220
+ else
221
+ "#{obj.to_i}"
222
+ end
215
223
  when String
216
- "\"#{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
217
234
  when Array
218
235
  # If we are sending a notifies with a second argument
219
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
@@ -7,7 +7,7 @@ module PoolParty
7
7
  module DependencyResolverCloudExtensions
8
8
  def to_properties_hash
9
9
  oh = {}
10
- oh[:options] = options.merge(:cloud_name => name)
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 } )
@@ -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
@@ -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
@@ -71,11 +65,6 @@ module PoolParty
71
65
 
72
66
  def permitted_option?(ty, key)
73
67
  true
74
- # if permitted_resource_options.has_key?(ty)
75
- # permitted_resource_options[ty].include?(key) || true #permitted_resource_options[:global].include?(key)
76
- # else
77
- # true
78
- # end
79
68
  end
80
69
 
81
70
  def hash_flush_out(hash, pre="", post="")
@@ -97,6 +86,10 @@ module PoolParty
97
86
  "present"
98
87
  end
99
88
  end
89
+
90
+ if hsh.has_key?(:requires)
91
+ hsh[:require] = hsh.delete(:requires)
92
+ end
100
93
  new_hsh ={}
101
94
  hsh.each do |k,v|
102
95
  new_hsh.merge!({k => to_option_string(v)})
@@ -126,26 +119,11 @@ module PoolParty
126
119
  end
127
120
 
128
121
  def handle_print_service(klassname, plugin, tabs)
129
- case klassname.to_s
130
- when "conditional"
131
- # "#{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}}"
132
- #
133
- # str = ""
134
- # plugin.each do |klasshash|
135
- # # str << "\n#{tf(tabs+1)}#{compile(hsh,tabs+1)}"
136
- # str << "#{tf(tabs)}case $#{klasshash[:options][:variable]} {"
137
- # 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}"
138
- # end
139
- # str << "#{tf(tabs)}}"
140
- # deprecated conditional
141
-
142
- else
143
- kname = klassname.to_s.gsub(/pool_party_/, '').gsub(/_class/, '')
144
- str = "\n#{tf(tabs)}# #{kname}\n"
145
- str << "#{tf(tabs)}class #{kname} {"
146
- str << "\n#{tf(tabs+1)}#{compile(plugin,tabs+1)}"
147
- str << "#{tf(tabs)}} include #{kname}"
148
- end
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}"
149
127
  end
150
128
 
151
129
  def handle_print_variable(name, value, tabs)
@@ -185,4 +163,4 @@ module PoolParty
185
163
 
186
164
  end
187
165
 
188
- end
166
+ end
@@ -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
@@ -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.options)
120
125
  end
121
126
  loaded_clouds.each do |cl|
122
- cl.options(self.options)
127
+ cl.dsl_options.merge!(self.options)
123
128
  end
124
129
  end
125
130
  end
@@ -147,10 +152,10 @@ module PoolParty
147
152
  end
148
153
 
149
154
  def extract_cloud_from_options(o)
150
- o.cloudname ? [cloud(o.cloudname.downcase.to_sym)] : clouds.collect {|n,cl| cl}
155
+ o.cloudname? ? [cloud(o.cloudname.downcase.to_sym)] : clouds.collect {|n,cl| cl}
151
156
  end
152
157
 
153
158
  def extract_pool_from_options(o)
154
- o.poolname ? [pool(o.poolname.downcase.to_sym)] : pools.collect {|n,pl| pl}
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 }