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,5 +1,12 @@
1
+ $:.unshift(::File.dirname(__FILE__))
2
+ $:.unshift("#{::File.dirname(__FILE__)}/../../../vendor/gems/*")
3
+ $:.unshift("#{::File.dirname(__FILE__)}/../../../vendor/gems/dslify/lib")
4
+ $:.unshift("#{::File.dirname(__FILE__)}/../../../vendor/gems/parenting/lib")
5
+
6
+ require "default"
1
7
  require "dslify"
2
8
  require "parenting"
9
+
3
10
  module PoolParty
4
11
 
5
12
  def context_stack
@@ -7,10 +14,13 @@ module PoolParty
7
14
  end
8
15
 
9
16
  class PoolPartyBaseClass
10
- include Dslify, Parenting
17
+ attr_reader :init_opts
18
+
19
+ include Parenting, Dslify
11
20
 
12
21
  include PoolParty::DependencyResolverCloudExtensions
13
- # attr_accessor :depth
22
+ # attr_accessor :depth
23
+ default_options Default.dsl_options
14
24
 
15
25
  def initialize(opts={}, extra_opts={}, &block)
16
26
  add_to_parent_if_parent_exists_and_is_a_service
@@ -18,21 +28,25 @@ module PoolParty
18
28
  @init_block = block
19
29
  @base_name = get_name_from_options_and_extra_options(opts, extra_opts)
20
30
 
21
- o = (opts.is_a?(Hash) ? extra_opts.merge(opts) : extra_opts).merge(:name => @base_name)
22
-
23
- run_in_context(o, &block)
24
- super(&block)
31
+ @init_opts = (opts.is_a?(Hash) ? extra_opts.merge(opts) : extra_opts.merge(:name => @base_name))
32
+
33
+ run_in_context(init_opts, &block)
34
+ # super(init_opts, &block)
25
35
  end
26
36
 
27
37
  # Overloading the parent run_in_context
28
- def run_in_context(o={}, &block)
29
- if o
30
- context_stack.push self
31
- set_vars_from_options(o)
32
- instance_eval &block if block
33
- context_stack.pop
34
- else
35
- super
38
+ def run_in_context(o={}, &block)
39
+ context_stack.push self
40
+ set_vars_from_options(o)
41
+ instance_eval &block if block
42
+ context_stack.pop
43
+ end
44
+
45
+ def run_with_callbacks(o, &block)
46
+ run_in_context(o) do
47
+ before_load(o, &block)
48
+ yield if block_given?
49
+ loaded(o, &block)
36
50
  end
37
51
  end
38
52
 
@@ -46,7 +60,7 @@ module PoolParty
46
60
 
47
61
  # Try to extract the name from the options
48
62
  def get_name_from_options_and_extra_options(opts={}, extra_opts={})
49
- opts.is_a?(Hash) ? (opts.has_key?(:name) ? opts.delete(:name) : nil) : dsl_options[:name] = opts
63
+ opts.is_a?(Hash) ? (opts.has_key?(:name) ? opts[:name] : nil) : dsl_options[:name] = opts
50
64
  end
51
65
 
52
66
  # Add to the services pool for the manifest listing
@@ -76,7 +90,7 @@ module PoolParty
76
90
  # A word about stores, the global store stores the entire list of stored
77
91
  # resources. The local resource store is available on all clouds and plugins
78
92
  # which stores the instance variable's local resources.
79
- def add_resource(ty, opts={}, extra_opts={}, &block)
93
+ def add_resource(ty, opts={}, extra_opts={}, &block)
80
94
  temp_name = get_name_from_options_and_extra_options(opts, extra_opts)
81
95
 
82
96
  if res = get_resource(ty, temp_name, opts)
@@ -137,24 +151,6 @@ module PoolParty
137
151
  false
138
152
  end
139
153
 
140
- def method_missing(m,*a,&block)
141
- if respond_to?(:this_context) && this_context != self && this_context.respond_to?(m)# && !self.is_a?(PoolParty::Resources::Resource)
142
- this_context.send m, *a, &block
143
- else
144
- # if dsl_options.has_key?(m)
145
- # dsl_options[m]
146
- # elsif parent && parent.respond_to?(:dsl_options) && parent.dsl_options.has_key?(m)
147
- # parent.dsl_options[m]
148
- # elsif self.class.default_options.has_key?(m)
149
- # self.class.default_options[m]
150
- # elsif parent && parent.respond_to?(:dsl_options) && parent.default_options.has_key?(m)
151
- # parent.default_options[m]
152
- # else
153
- super
154
- # end
155
- end
156
- end
157
-
158
154
  # Adds two methods to the module
159
155
  # Adds the method type:
160
156
  # has_
@@ -167,7 +163,7 @@ module PoolParty
167
163
  # TODO: Refactor nicely to include other types that don't accept ensure
168
164
  def self.add_has_and_does_not_have_methods_for(typ=:file)
169
165
  method_name = "__#{typ}"
170
- PoolParty::PoolPartyBaseClass.module_eval <<-EOE
166
+ ev=<<-EOE
171
167
  def has_#{typ}(opts={}, extra={}, &block)
172
168
  #{method_name}({:ensures => :present}.merge(handle_option_values(opts).merge(extra)), &block)
173
169
  end
@@ -175,6 +171,16 @@ module PoolParty
175
171
  #{method_name}({:ensures => :absent}.merge(handle_option_values(opts).merge(extra)), &block)
176
172
  end
177
173
  EOE
174
+ PoolParty::PoolPartyBaseClass.module_eval ev, ($pool_specfile || "")
175
+ end
176
+
177
+ def self.add_resource_lookup_method(lookup_type=:file)
178
+ ev=<<-EOE
179
+ def #{lookup_type}s
180
+ ordered_resources.select {|q| q if q.class.to_s =~ /#{lookup_type.to_s.classify}/ }
181
+ end
182
+ EOE
183
+ PoolParty::PoolPartyBaseClass.module_eval ev, ($pool_specfile || "")
178
184
  end
179
185
 
180
186
  def handle_option_values(o)
@@ -61,6 +61,7 @@ module PoolParty
61
61
  EOE
62
62
  PoolParty::PoolPartyBaseClass.module_eval method
63
63
  PoolParty::PoolPartyBaseClass.add_has_and_does_not_have_methods_for(lowercase_class_name.to_sym)
64
+ PoolParty::PoolPartyBaseClass.add_resource_lookup_method(lowercase_class_name)
64
65
 
65
66
  available_resources << subclass
66
67
  end
@@ -72,6 +73,13 @@ module PoolParty
72
73
  @available_resources ||= []
73
74
  end
74
75
 
76
+ dsl_methods :action,
77
+ :not_if,
78
+ :if_not,
79
+ :only_if,
80
+ :calls,
81
+ :requires
82
+
75
83
  # This is set in order of descending precedence
76
84
  # The options are overwritten from the bottom up
77
85
  # and the resource will use those as the values
@@ -80,11 +88,12 @@ module PoolParty
80
88
  # Finally, it uses the parent's options as the lowest priority
81
89
  def initialize(opts={}, extra_opts={}, &block)
82
90
  super(opts, extra_opts, &block)
83
-
91
+
84
92
  @resource_name = @base_name
85
- dsl_options[:name] = resource_name unless dsl_options.has_key?(:name)
93
+ # dsl_options[:name] = @init_opts[:name] unless dsl_options.has_key?(:name) && dsl_options[:name]
86
94
 
87
- loaded(opts, &block)
95
+ # p [:name, name, dsl_options, init_opts] # methods.sort.join(", ")
96
+ loaded(init_opts, &block)
88
97
 
89
98
  after_create
90
99
  end
@@ -98,14 +107,14 @@ module PoolParty
98
107
  def resource_name
99
108
  @resource_name ||= nil
100
109
  end
101
-
102
- def name(*args)
103
- resource_name
104
- end
105
-
110
+
106
111
  # After create callback
107
112
  def after_create
108
113
  end
114
+ def before_load(o={}, &block)
115
+ end
116
+ def after_load(o={}, &block)
117
+ end
109
118
 
110
119
  # We don't want to inherit the services on a resource, as resources
111
120
  # are a base and should never have services.
@@ -129,33 +138,6 @@ module PoolParty
129
138
  def class_type_name
130
139
  self.class.to_s.top_level_class.underscore.downcase
131
140
  end
132
- def self.custom_function(str)
133
- custom_functions << str
134
- end
135
- def self.custom_functions
136
- @custom_functions ||= []
137
- end
138
- def custom_function(str)
139
- self.class.custom_functions << str
140
- end
141
-
142
- def self.custom_functions_to_string(pre="")
143
- returning Array.new do |output|
144
- PoolParty::Resources.available_custom_resources.each do |resource|
145
- resource.custom_functions.each do |func|
146
- output << "#{pre*2}#{func}"
147
- end
148
- end
149
- end.join("\n")
150
- end
151
- # Some things in puppet aren't allowed, so let's override them here
152
- def disallowed_options
153
- []
154
- end
155
-
156
- def key
157
- name
158
- end
159
141
  # def virtual_resource?
160
142
  # false
161
143
  # end
@@ -170,14 +152,6 @@ module PoolParty
170
152
  true
171
153
  end
172
154
 
173
- def method_missing(m,*a,&block)
174
- if parent && parent.dsl_options.has_key?(m) && is_in_plugin?
175
- parent.send m, *a, &block
176
- else
177
- super
178
- end
179
- end
180
-
181
155
  # Private method just for resource retrievling purposes
182
156
  def class_name_sym
183
157
  self.class.to_s.top_level_class.downcase.to_sym
@@ -210,4 +184,4 @@ module PoolParty
210
184
  end
211
185
  end
212
186
 
213
- Dir["#{::File.dirname(__FILE__)}/../resources/*.rb"].each {|lib| require "#{lib}"}
187
+ Dir["#{::File.dirname(__FILE__)}/../resources/*.rb"].each {|lib| require "#{lib}"}
@@ -4,12 +4,8 @@ module PoolParty
4
4
 
5
5
  include PoolParty::DependencyResolverCloudExtensions
6
6
 
7
- def initialize(o={}, &block)
8
- super(o, &block)
9
- end
10
-
11
7
  def to_properties_hash
12
- { :pp_type => "plugin", :options => options,
8
+ { :pp_type => "plugin", :options => dsl_options,
13
9
  :name => self.class.to_s.top_level_class,
14
10
  :resources => ordered_resources.map {|a| a.to_properties_hash }}
15
11
  end
@@ -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
@@ -26,22 +28,23 @@ module PoolParty
26
28
  grempe-amazon-ec2
27
29
  ohai
28
30
  chef
29
- auser-dslify
30
- auser-parenting
31
31
  adamwiggins-rest-client
32
32
  rack
33
33
  thin
34
+ logging
35
+ ruby2ruby
34
36
  )
35
37
  end
36
38
 
37
39
  # Default options for the boot_strapper
38
- @defaults = ::PoolParty::Default.default_options.merge({
40
+ @defaults = ::PoolParty::Default.dsl_options.merge({
39
41
  :full_keypair_path => "#{ENV["AWS_KEYPAIR_NAME"]}" || "~/.ssh/id_rsa",
40
42
  :installer => 'apt-get',
41
43
  :dependency_resolver => 'chef'
42
44
  })
43
45
  class <<self; attr_reader :defaults; end
44
46
 
47
+ attr_reader :cloud_name
45
48
  # In case the method is being called on ourself, let's check the
46
49
  # defaults hash to see if it's available there
47
50
  def method_missing(m,*a,&block)
@@ -58,6 +61,7 @@ module PoolParty
58
61
  self.class.defaults.merge(opts).to_instance_variables(self)
59
62
  @target_host = host
60
63
  @cloud = opts[:cloud]
64
+ @cloud_name = @cloud.name
61
65
 
62
66
  instance_eval &block if block
63
67
  @cloud.call_before_bootstrap_callbacks if @cloud
@@ -79,27 +83,27 @@ module PoolParty
79
83
  def pack_the_dependencies
80
84
  # Add the keypair to the instance... shudder
81
85
  ::Suitcase::Zipper.add(keypair, "keys")
82
-
86
+ edge_pp_gem = Dir["#{Default.vendor_path}/../pkg/*poolparty*gem"].pop
83
87
  # 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
88
+ if edge_pp_gem
89
+ puts "using edge poolparty: #{::File.expand_path(edge_pp_gem)}"
90
+ ::Suitcase::Zipper.add(edge_pp_gem, 'gems')
91
+ else
92
+ vputs "using gem auser-poolparty. use rake build to use edge"
93
+ self.class.gem_list << 'auser-poolparty'
94
+ end
91
95
  # Add the gems to the suitcase
92
96
  puts "Adding default gem dependencies"
93
- ::Suitcase::Zipper.gems self.class.gem_list, "#{Default.tmp_path}/trash/dependencies"
97
+ ::Suitcase::Zipper.gems self.class.gem_list, "#{cloud.tmp_path}/trash/dependencies"
94
98
 
95
99
  ::Suitcase::Zipper.packages( "http://rubyforge.org/frs/download.php/45905/rubygems-1.3.1.tgz",
96
- "#{Default.tmp_path}/trash/dependencies/packages")
100
+ "#{cloud.tmp_path}/trash/dependencies/packages")
97
101
  # ::Suitcase::Zipper.add("templates/")
98
102
 
99
103
  ::Suitcase::Zipper.add("#{::File.dirname(__FILE__)}/../templates/monitor.ru", "/etc/poolparty/")
100
104
  ::Suitcase::Zipper.add("#{::File.dirname(__FILE__)}/../templates/monitor.god", "/etc/poolparty/")
101
105
 
102
- ::Suitcase::Zipper.add("#{Default.tmp_path}/trash/dependencies/cache", "gems")
106
+ ::Suitcase::Zipper.add("#{cloud.tmp_path}/trash/dependencies/cache", "gems")
103
107
 
104
108
  ::Suitcase::Zipper.add("#{::File.join(File.dirname(__FILE__), '..', 'templates', 'gemrc_template' )}", "etc/poolparty")
105
109
 
@@ -108,7 +112,7 @@ module PoolParty
108
112
  {:instances => instances.flatten.compact}.to_json,
109
113
  "neighborhood.json", "/etc/poolparty")
110
114
 
111
- ::Suitcase::Zipper.build_dir!("#{Default.tmp_path}/dependencies")
115
+ ::Suitcase::Zipper.build_dir!("#{cloud.tmp_path}/dependencies")
112
116
 
113
117
  ::Suitcase::Zipper.flush!
114
118
 
@@ -118,8 +122,8 @@ module PoolParty
118
122
  # The commands to setup a PoolParty enviornment
119
123
  def default_commands
120
124
  pack_the_dependencies
121
- ::FileUtils.rm_rf "#{Default.tmp_path}/dependencies/gems/cache"
122
- rsync "#{Default.tmp_path}/dependencies", '/var/poolparty'
125
+ ::FileUtils.rm_rf "#{cloud.tmp_path}/dependencies/gems/cache"
126
+ rsync "#{cloud.tmp_path}/dependencies", '/var/poolparty'
123
127
 
124
128
  commands << [
125
129
  "mkdir -p /etc/poolparty",
@@ -137,16 +141,17 @@ module PoolParty
137
141
  "cd ../ && rm -rf rubygems-1.3.1*",
138
142
  "gem source --add http://gems.github.com",
139
143
  "cd /var/poolparty/dependencies/gems/",
140
- "gem install --no-rdoc --no-ri -y *.gem",
144
+ "gem install --no-rdoc --no-ri --ignore-dependencies *.gem",
141
145
  "cd /var/poolparty/dependencies",
142
146
  "cp /var/poolparty/dependencies/etc/poolparty/* /etc/poolparty/",
143
147
  'touch /var/poolparty/POOLPARTY.PROGRESS',
144
148
  "mkdir -p /root/.ssh",
145
149
  "cp /var/poolparty/dependencies/keys/* /root/.ssh/",
146
- "chmod 600 /root/.ssh/#{::File.basename(@cloud.keypair.full_filepath)}",
150
+ "chmod 600 /root/.ssh/#{keypair_name}",
147
151
  # "god -c /etc/poolparty/monitor.god",
148
152
  "mkdir -p /var/log/poolparty/",
149
153
  "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",
154
+ "tail /var/log/poolparty/monitor.log",
150
155
  'echo "bootstrap" >> /var/poolparty/POOLPARTY.PROGRESS']
151
156
  commands << self.class.class_commands unless self.class.class_commands.empty?
152
157
  end
@@ -14,10 +14,10 @@ module PoolParty
14
14
  end
15
15
  def self.files_to_upload
16
16
  [
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"
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"
21
21
  ]
22
22
  end
23
23
  end
@@ -31,13 +31,14 @@ module PoolParty
31
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
39
  @configurator = "::PoolParty::Provision::#{dependency_resolver.capitalize}".constantize
40
40
  @cloud = opts[:cloud]
41
+ @cloud_name = @cloud.name
41
42
  @keypair = @cloud.keypair
42
43
  @run_count = 0
43
44
 
@@ -50,15 +51,15 @@ module PoolParty
50
51
  private
51
52
 
52
53
  def prescribe_configuration
53
- ::FileUtils.mkdir_p "#{Default.tmp_path}/dr_configure" unless ::File.directory?("#{Default.tmp_path}/dr_configure")
54
- ::File.cp $pool_specfile, "#{Default.tmp_path}/dr_configure/clouds.rb"
55
- ::File.open "#{Default.tmp_path}/dr_configure/clouds.json", "w" do |f|
54
+ ::FileUtils.mkdir_p "#{cloud.tmp_path}/dr_configure" unless ::File.directory?("#{cloud.tmp_path}/dr_configure")
55
+ ::File.cp $pool_specfile, "#{cloud.tmp_path}/dr_configure/clouds.rb"
56
+ ::File.open "#{cloud.tmp_path}/dr_configure/clouds.json", "w" do |f|
56
57
  f << cloud.to_properties_hash.to_json
57
58
  end
58
59
 
59
60
  setup_configurator
60
61
  # write_erlang_cookie
61
- @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) }
62
63
 
63
64
  pack_up_and_ship_off_suitcase
64
65
  run_commands
@@ -106,8 +107,8 @@ module PoolParty
106
107
  end
107
108
 
108
109
  def pack_up_and_ship_off_suitcase
109
- ::Suitcase::Zipper.build_dir!("#{Default.tmp_path}/dr_configure")
110
- rsync "#{Default.tmp_path}/dr_configure/", "/var/poolparty/dr_configure/", ['-a --stats']
110
+ ::Suitcase::Zipper.build_dir!("#{cloud.tmp_path}/dr_configure")
111
+ rsync "#{cloud.tmp_path}/dr_configure/", "/var/poolparty/dr_configure/", ['-a --stats']
111
112
  end
112
113
 
113
114
  # Pack up monitors verifiers plugins directories in the same direcotry as your clouds.rb and send to nodes.
@@ -115,7 +116,7 @@ module PoolParty
115
116
  # @cloud.write_properties_hash("#{Default.tmp_path}/properties_hash.rb")
116
117
  #TODO: move to puppet class
117
118
  #TODO: remove or conditionalize this puppet specific task
118
- @cloud.build_and_store_new_config_file("#{Default.tmp_path}/dr_configure/poolparty.pp")
119
+ @cloud.build_and_store_new_config_file("#{cloud.tmp_path}/dr_configure/poolparty.pp")
119
120
 
120
121
  %w(monitors verifiers plugins).each do |dir|
121
122
  @cloud.pack_user_directory dir
@@ -129,8 +130,8 @@ module PoolParty
129
130
  def write_erlang_cookie
130
131
  # cookie = (1..16).collect { chars[rand(chars.size)] }.pack("C*")
131
132
  cookie = (1..65).collect {rand(9)}.join()
132
- cookie_file = ::File.open("#{Default.tmp_path}/dr_configure/erlang.cookie", 'w+'){|f| f << cookie }
133
- ::File.cp "#{::File.dirname(__FILE__)}/../templates/erlang_cookie_maker", "#{Default.tmp_path}/dr_configure/"
133
+ cookie_file = ::File.open("#{cloud.tmp_path}/dr_configure/erlang.cookie", 'w+'){|f| f << cookie }
134
+ ::File.cp "#{::File.dirname(__FILE__)}/../templates/erlang_cookie_maker", "#{cloud.tmp_path}/dr_configure/"
134
135
  end
135
136
 
136
137
  def self.class_commands
@@ -32,10 +32,14 @@ The cron resource will set cron jobs at the intervals you set
32
32
  =end
33
33
  class Cron < Resource
34
34
 
35
- default_options({
35
+ default_options(
36
36
  :command => nil,
37
- :user => "root"
38
- })
37
+ :user => "root",
38
+ :minute => "*",
39
+ :hour => "*",
40
+ :month => "*",
41
+ :weekday => "*"
42
+ )
39
43
 
40
44
  def present
41
45
  :create
@@ -26,6 +26,13 @@ The above example will place the contents of '/local/path' at '/path/on/server/n
26
26
 
27
27
  class Directory < Resource
28
28
 
29
+ dsl_methods :owner
30
+
31
+ default_options({
32
+ :recursive => true,
33
+ :mode => 0644
34
+ })
35
+
29
36
  def present
30
37
  :create
31
38
  end
@@ -25,6 +25,7 @@ Ensure a command is run on the instances
25
25
 
26
26
  class Exec < Resource
27
27
 
28
+ dsl_methods :cwd, :creates, :command
28
29
  default_options({
29
30
  :path => ["/usr/bin:/bin:/usr/local/bin:$PATH"]
30
31
  })
@@ -38,7 +39,7 @@ Ensure a command is run on the instances
38
39
  end
39
40
 
40
41
  def after_create
41
- options[:name] = options[:command] unless options.name
42
+ dsl_options[:name] = dsl_options[:command] unless dsl_options[:name]
42
43
  end
43
44
 
44
45
  end
@@ -29,11 +29,21 @@ To write a file to the template directory, use:
29
29
  == Example
30
30
  has_file(:name => '/etc/motd', :content => 'Hey and welcome to your node today!')
31
31
  =end
32
- class File < Resource
32
+ class File < Resource
33
33
  has_searchable_paths(:dir => "templates")
34
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
+ )
44
+
35
45
  def loaded(o={}, &block)
36
- parent.has_directory ::File.dirname(name) if parent
46
+ has_directory ::File.dirname(name)
37
47
  end
38
48
 
39
49
  def present
@@ -47,24 +57,28 @@ To write a file to the template directory, use:
47
57
  def after_create
48
58
  run_render = dsl_options.include?(:render_as) ? dsl_options.delete(:render_as) : false
49
59
 
50
- if dsl_options.include?(:template)
60
+ if dsl_options[:template]
51
61
  filename = find_file(dsl_options.delete(:template))
52
62
  file = ::File.basename( filename )
53
63
  raise TemplateNotFound.new("no template given") unless file
54
64
 
55
- template_opts = (parent ? options.merge(parent.options) : options)
56
- 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)
57
67
  end
58
68
 
59
69
  if dsl_options.include?(:content)
60
70
  cont = dsl_options.delete(:content)
61
- template_opts = (parent ? options.merge(parent.options) : options).merge(:renderer => run_render)
62
- 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)
63
73
  end
64
74
  end
65
75
 
66
- def method_missing m, *a, &block
67
- super rescue ::File.send(m, *a, &block)
76
+ # def method_missing m, *a, &block
77
+ # super rescue ::File.send(m, *a, &block)
78
+ # end
79
+
80
+ def variable(k,v)
81
+ set_default_options(k => v)
68
82
  end
69
83
 
70
84
  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
@@ -25,10 +25,11 @@ The host parameter sets hosts on the instances. Setting this, every node will ha
25
25
  class Host < Resource
26
26
 
27
27
  default_options({
28
+ :ip => "127.0.0.1"
28
29
  })
29
30
 
30
31
  def aka(i=nil)
31
- i ? options[:alias] = i : options[:alias]
32
+ i ? dsl_options[:alias] = i : dsl_options[:alias]
32
33
  end
33
34
 
34
35
  end
@@ -35,10 +35,6 @@ The mount specifies a mount that is to be mounted on the instances
35
35
  :atboot => "yes"
36
36
  })
37
37
 
38
- def disallowed_options
39
- [:name]
40
- end
41
-
42
38
  end
43
39
 
44
40
  end
@@ -43,7 +43,7 @@ To write a file to the template directory, use:
43
43
  })
44
44
 
45
45
  def source(arg=nil)
46
- arg ? options[:source] = arg : "#{Default.fileserver_base}/#{::File.basename(name)}"
46
+ arg ? dsl_options[:source] = arg : "#{Default.fileserver_base}/#{::File.basename(name)}"
47
47
  end
48
48
 
49
49
  end
@@ -23,8 +23,9 @@ The service resource specifies a service that must be running on the nodes
23
23
  =end
24
24
  class Service < Resource
25
25
 
26
+ dsl_methods :name # Name of the service
27
+
26
28
  default_options({
27
- :ensures => "enable",
28
29
  :enable => true
29
30
  })
30
31