auser-poolparty 0.2.70 → 0.2.71

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 (36) hide show
  1. data/Manifest.txt +21 -1
  2. data/PostInstall.txt +1 -1
  3. data/lib/poolparty/core/class.rb +24 -0
  4. data/lib/poolparty/core/module.rb +2 -2
  5. data/lib/poolparty/dependency_resolutions/puppet.rb +9 -2
  6. data/lib/poolparty/helpers/provisioners/master.rb +1 -6
  7. data/lib/poolparty/plugins/deploydirectory.rb +5 -1
  8. data/lib/poolparty/pool/cloud.rb +2 -1
  9. data/lib/poolparty/pool/resource.rb +8 -5
  10. data/lib/poolparty/pool/script.rb +1 -1
  11. data/lib/poolparty/spec/core/string.rb +10 -0
  12. data/lib/poolparty/spec/matchers/a_spec_extensions_base.rb +24 -0
  13. data/lib/poolparty/spec/matchers/have_cron.rb +28 -0
  14. data/lib/poolparty/spec/matchers/have_deploydirectory.rb +15 -0
  15. data/lib/poolparty/spec/matchers/have_directory.rb +31 -0
  16. data/lib/poolparty/spec/matchers/have_exec.rb +28 -0
  17. data/lib/poolparty/spec/matchers/have_file.rb +28 -0
  18. data/lib/poolparty/spec/matchers/have_gempackage.rb +28 -0
  19. data/lib/poolparty/spec/matchers/have_git.rb +28 -0
  20. data/lib/poolparty/spec/matchers/have_host.rb +28 -0
  21. data/lib/poolparty/spec/matchers/have_mount.rb +28 -0
  22. data/lib/poolparty/spec/matchers/have_package.rb +28 -0
  23. data/lib/poolparty/spec/matchers/have_remotefile.rb +28 -0
  24. data/lib/poolparty/spec/matchers/have_rsyncmirror.rb +28 -0
  25. data/lib/poolparty/spec/matchers/have_service.rb +28 -0
  26. data/lib/poolparty/spec/matchers/have_sshkey.rb +28 -0
  27. data/lib/poolparty/spec/matchers/have_symlink.rb +28 -0
  28. data/lib/poolparty/spec/matchers/have_variable.rb +32 -0
  29. data/lib/poolparty/spec/spec/dynamic_matchers.rb +63 -0
  30. data/lib/poolparty/spec/spec/ensure_matchers_exist.rb +7 -0
  31. data/lib/poolparty/spec/{have_base.rb → templates/have_base.rb} +5 -6
  32. data/lib/poolparty/version.rb +1 -1
  33. data/lib/poolpartyspec.rb +11 -17
  34. data/poolparty.gemspec +599 -61
  35. data/website/index.html +1 -1
  36. metadata +28 -4
data/Manifest.txt CHANGED
@@ -303,7 +303,27 @@ lib/poolparty/pool/resources/sshkey.rb
303
303
  lib/poolparty/pool/resources/symlink.rb
304
304
  lib/poolparty/pool/resources/variable.rb
305
305
  lib/poolparty/pool/script.rb
306
- lib/poolparty/spec/have_base.rb
306
+ lib/poolparty/spec/core/string.rb
307
+ lib/poolparty/spec/matchers/a_spec_extensions_base.rb
308
+ lib/poolparty/spec/matchers/have_cron.rb
309
+ lib/poolparty/spec/matchers/have_deploydirectory.rb
310
+ lib/poolparty/spec/matchers/have_directory.rb
311
+ lib/poolparty/spec/matchers/have_exec.rb
312
+ lib/poolparty/spec/matchers/have_file.rb
313
+ lib/poolparty/spec/matchers/have_gempackage.rb
314
+ lib/poolparty/spec/matchers/have_git.rb
315
+ lib/poolparty/spec/matchers/have_host.rb
316
+ lib/poolparty/spec/matchers/have_mount.rb
317
+ lib/poolparty/spec/matchers/have_package.rb
318
+ lib/poolparty/spec/matchers/have_remotefile.rb
319
+ lib/poolparty/spec/matchers/have_rsyncmirror.rb
320
+ lib/poolparty/spec/matchers/have_service.rb
321
+ lib/poolparty/spec/matchers/have_sshkey.rb
322
+ lib/poolparty/spec/matchers/have_symlink.rb
323
+ lib/poolparty/spec/matchers/have_variable.rb
324
+ lib/poolparty/spec/spec/dynamic_matchers.rb
325
+ lib/poolparty/spec/spec/ensure_matchers_exist.rb
326
+ lib/poolparty/spec/templates/have_base.rb
307
327
  lib/poolparty/templates/authkeys
308
328
  lib/poolparty/templates/cib.xml
309
329
  lib/poolparty/templates/gem
data/PostInstall.txt CHANGED
@@ -1,4 +1,4 @@
1
- Get ready to jump in the pool, you just installed PoolParty! (Updated at 16:15 11/25/08)
1
+ Get ready to jump in the pool, you just installed PoolParty! (Updated at 17:10 11/26/08)
2
2
 
3
3
  To get started, run the generator:
4
4
 
@@ -1,2 +1,26 @@
1
+ # Taken from rspec with high respect.
2
+ # Mainly unused, for now
1
3
  class Class
4
+ # Creates a new subclass of self, with a name "under" our own name.
5
+ # Example:
6
+ #
7
+ # x = Foo::Bar.subclass('Zap'){}
8
+ # x.name # => Foo::Bar::Zap_1
9
+ # x.superclass.name # => Foo::Bar
10
+ def subclass(base_name, &body)
11
+ klass = Class.new(self)
12
+ class_name = "#{base_name}_#{class_count!}"
13
+ instance_eval do
14
+ const_set(class_name, klass)
15
+ end
16
+ klass.instance_eval(&body)
17
+ klass
18
+ end
19
+
20
+ private
21
+ def class_count!
22
+ @class_count ||= 0
23
+ @class_count += 1
24
+ @class_count
25
+ end
2
26
  end
@@ -34,7 +34,7 @@ class Module
34
34
  end
35
35
  nil
36
36
  end
37
- def set(*args)
37
+ def instance_variables_from_hash(h={})
38
+ h.each {|k,v| instance_eval "@#{k} = #{v}"}
38
39
  end
39
- alias_method :custom, :set
40
40
  end
@@ -54,9 +54,16 @@ module PoolParty
54
54
  end
55
55
 
56
56
  def to_s
57
- "#{class_type_name.capitalize}['#{key}']"
57
+ self.class.resource_string_name(class_type_name.capitalize, key)
58
+ end
59
+ end
60
+ end
61
+
62
+ module Resources
63
+ class Resource
64
+ def self.resource_string_name(name, key)
65
+ "#{name}['#{key}']"
58
66
  end
59
-
60
67
  end
61
68
  end
62
69
  end
@@ -192,14 +192,9 @@ cp #{Base.remote_storage_path}/poolparty.pp /etc/puppet/manifests/classes/poolpa
192
192
  def restart_puppetd
193
193
  <<-EOS
194
194
  echo "Running puppet manifest"
195
- /usr/bin/puppetrunner
195
+ /usr/bin/puppetrunner;/usr/bin/puppetrerun
196
196
  EOS
197
197
  end
198
- def last_install_tasks
199
- [
200
- "/usr/bin/puppetrerun"
201
- ]
202
- end
203
198
  end
204
199
  end
205
200
  end
@@ -45,7 +45,11 @@ module PoolParty
45
45
 
46
46
  def to(dir)
47
47
  cwd dir
48
- has_directory(:name => "#{dir}", :requires => get_directory("#{::File.dirname(dir)}"))
48
+ name dir
49
+ has_directory(:name => "#{dir}",
50
+ :requires => get_directory("#{::File.dirname(dir)}"),
51
+ :owner => owner,
52
+ :mode => mode)
49
53
  end
50
54
 
51
55
  # Since git is not a native type, we have to say which core resource
@@ -48,7 +48,8 @@ module PoolParty
48
48
  plugin_directory
49
49
 
50
50
  p = pare.is_a?(PoolParty::Pool::Pool) ? pare : nil
51
- run_setup(p, &block)
51
+ store_block(&block)
52
+ run_setup(p, &block)
52
53
 
53
54
  # set_parent(parent) if parent && !@parent
54
55
  # self.run_in_context parent, &block if block
@@ -86,6 +86,9 @@ module PoolParty
86
86
 
87
87
  include CloudResourcer
88
88
  include Configurable
89
+ # For the time being, we'll make puppet the only available dependency resolution
90
+ # base, but in the future, we can rip this out and make it an option
91
+ include PoolParty::DependencyResolutions::Puppet
89
92
 
90
93
  extend PoolParty::Resources
91
94
  include PoolParty::Resources
@@ -101,7 +104,11 @@ module PoolParty
101
104
  add_resource(:#{lowercase_class_name}, opts, parent, &blk)
102
105
  end
103
106
  def get_#{lowercase_class_name}(name)
104
- get_resource(:#{lowercase_class_name}, name) if in_a_resource_store?(:#{lowercase_class_name}, name)
107
+ res = in_a_resource_store?(:#{lowercase_class_name}, name) ?
108
+ get_resource(:#{lowercase_class_name}, name) :
109
+ self.class.resource_string_name(ty, key)
110
+ res ||= self.class.resource_string_name(ty, key)
111
+ res
105
112
  end
106
113
  EOE
107
114
  PoolParty::Resources.module_eval method
@@ -254,10 +261,6 @@ module PoolParty
254
261
  end
255
262
  @modified_options
256
263
  end
257
-
258
- # For the time being, we'll make puppet the only available dependency resolution
259
- # base, but in the future, we can rip this out and make it an option
260
- include PoolParty::DependencyResolutions::Puppet
261
264
  end
262
265
 
263
266
  # Adds two methods to the module
@@ -3,7 +3,7 @@ module PoolParty
3
3
  class Script
4
4
 
5
5
  def self.inflate_file(file)
6
- inflate open(file).read
6
+ inflate open(file).read if file
7
7
  end
8
8
 
9
9
  def self.inflate(script, file="__SCRIPT__")
@@ -0,0 +1,10 @@
1
+ class String
2
+ def grab_entry_for(type, name)
3
+ begin
4
+ allowed = /[ \$\._\-\[\]\n\t\\\/&,\(\)"':=>0-9a-zA-Z]/
5
+ matches = self.match(/#{type}(.*)\{(.*)#{name}\":(.*)(#{allowed})*\}/)[0]
6
+ rescue
7
+ ""
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,24 @@
1
+ module Spec
2
+ module Matchers
3
+ module SpecExtensions
4
+ class SpecExtensionsBase
5
+ def ensured_as(ensured="present")
6
+ str = "ensure => '#{ensured}'"
7
+ !grab_entry.scan(/#{str}/).empty?
8
+ end
9
+ def is_present?
10
+ !grab_entry.empty? && is_valid_resource?
11
+ end
12
+ def grab_entry
13
+ @target.grab_entry_for(type, @expected)
14
+ end
15
+ def type
16
+ "file"
17
+ end
18
+ def is_valid_resource?
19
+ grab_entry.split(/\n/).select {|l| l.match(/(.*)=>([ \t]*),$/) }.empty?
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,28 @@
1
+ module Spec
2
+ module Matchers
3
+ module SpecExtensions
4
+ class HaveCron < SpecExtensionsBase
5
+ def initialize(expected,extra="")
6
+ @expected = expected
7
+ @extra = extra
8
+ end
9
+ def matches?(target)
10
+ @target = target
11
+ is_present?
12
+ end
13
+ def failure_message
14
+ "expected #{@target.inspect} to have cron #{@expected}"
15
+ end
16
+ def negative_failure_message
17
+ "expected #{@target.inspect} not to have cron #{@expected}"
18
+ end
19
+ def type
20
+ "cron"
21
+ end
22
+ end
23
+ end
24
+ def have_cron(name, extra="")
25
+ SpecExtensions::HaveCron.new(name, extra)
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,15 @@
1
+ module PoolParty
2
+ class SpecCore
3
+ dynamic_matcher_for(:deploydirectory) do
4
+ it "should have the directory" do
5
+ @manifest.should have_directory(@to)
6
+ end
7
+ it "should have the rsyncmirror" do
8
+ @manifest.should have_rsyncmirror("deploydirectory-#{@to}")
9
+ end
10
+ it "should have the exec to unpack the archive" do
11
+ @manifest.should have_exec("deploy-directory-#{@to}")
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,31 @@
1
+ module Spec
2
+ module Matchers
3
+ module SpecExtensions
4
+ class HaveDirectory < SpecExtensionsBase
5
+ def initialize(expected,extra="")
6
+ @expected = expected
7
+ @extra = extra
8
+ end
9
+ def matches?(target)
10
+ @target = target
11
+ is_present? && is_a_directory?
12
+ end
13
+ def is_a_directory?
14
+ ensured_as("directory")
15
+ end
16
+ def failure_message
17
+ "expected #{@target.inspect} to have directory #{@expected}"
18
+ end
19
+ def negative_failure_message
20
+ "expected #{@target.inspect} not to have directory #{@expected}"
21
+ end
22
+ def type
23
+ "file"
24
+ end
25
+ end
26
+ end
27
+ def have_directory(name, extra="")
28
+ SpecExtensions::HaveDirectory.new(name, extra)
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,28 @@
1
+ module Spec
2
+ module Matchers
3
+ module SpecExtensions
4
+ class HaveExec < SpecExtensionsBase
5
+ def initialize(expected,extra="")
6
+ @expected = expected
7
+ @extra = extra
8
+ end
9
+ def matches?(target)
10
+ @target = target
11
+ is_present?
12
+ end
13
+ def failure_message
14
+ "expected #{@target.inspect} to have exec #{@expected}"
15
+ end
16
+ def negative_failure_message
17
+ "expected #{@target.inspect} not to have exec #{@expected}"
18
+ end
19
+ def type
20
+ "exec"
21
+ end
22
+ end
23
+ end
24
+ def have_exec(name, extra="")
25
+ SpecExtensions::HaveExec.new(name, extra)
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,28 @@
1
+ module Spec
2
+ module Matchers
3
+ module SpecExtensions
4
+ class HaveFile < SpecExtensionsBase
5
+ def initialize(expected,extra="")
6
+ @expected = expected
7
+ @extra = extra
8
+ end
9
+ def matches?(target)
10
+ @target = target
11
+ is_present?
12
+ end
13
+ def failure_message
14
+ "expected #{@target.inspect} to have file #{@expected}"
15
+ end
16
+ def negative_failure_message
17
+ "expected #{@target.inspect} not to have file #{@expected}"
18
+ end
19
+ def type
20
+ "file"
21
+ end
22
+ end
23
+ end
24
+ def have_file(name, extra="")
25
+ SpecExtensions::HaveFile.new(name, extra)
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,28 @@
1
+ module Spec
2
+ module Matchers
3
+ module SpecExtensions
4
+ class HaveGempackage < SpecExtensionsBase
5
+ def initialize(expected,extra="")
6
+ @expected = expected
7
+ @extra = extra
8
+ end
9
+ def matches?(target)
10
+ @target = target
11
+ is_present?
12
+ end
13
+ def failure_message
14
+ "expected #{@target.inspect} to have gempackage #{@expected}"
15
+ end
16
+ def negative_failure_message
17
+ "expected #{@target.inspect} not to have gempackage #{@expected}"
18
+ end
19
+ def type
20
+ "gempackage"
21
+ end
22
+ end
23
+ end
24
+ def have_gempackage(name, extra="")
25
+ SpecExtensions::HaveGempackage.new(name, extra)
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,28 @@
1
+ module Spec
2
+ module Matchers
3
+ module SpecExtensions
4
+ class HaveGit < SpecExtensionsBase
5
+ def initialize(expected,extra="")
6
+ @expected = expected
7
+ @extra = extra
8
+ end
9
+ def matches?(target)
10
+ @target = target
11
+ is_present?
12
+ end
13
+ def failure_message
14
+ "expected #{@target.inspect} to have git #{@expected}"
15
+ end
16
+ def negative_failure_message
17
+ "expected #{@target.inspect} not to have git #{@expected}"
18
+ end
19
+ def type
20
+ "git"
21
+ end
22
+ end
23
+ end
24
+ def have_git(name, extra="")
25
+ SpecExtensions::HaveGit.new(name, extra)
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,28 @@
1
+ module Spec
2
+ module Matchers
3
+ module SpecExtensions
4
+ class HaveHost < SpecExtensionsBase
5
+ def initialize(expected,extra="")
6
+ @expected = expected
7
+ @extra = extra
8
+ end
9
+ def matches?(target)
10
+ @target = target
11
+ is_present?
12
+ end
13
+ def failure_message
14
+ "expected #{@target.inspect} to have host #{@expected}"
15
+ end
16
+ def negative_failure_message
17
+ "expected #{@target.inspect} not to have host #{@expected}"
18
+ end
19
+ def type
20
+ "host"
21
+ end
22
+ end
23
+ end
24
+ def have_host(name, extra="")
25
+ SpecExtensions::HaveHost.new(name, extra)
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,28 @@
1
+ module Spec
2
+ module Matchers
3
+ module SpecExtensions
4
+ class HaveMount < SpecExtensionsBase
5
+ def initialize(expected,extra="")
6
+ @expected = expected
7
+ @extra = extra
8
+ end
9
+ def matches?(target)
10
+ @target = target
11
+ is_present?
12
+ end
13
+ def failure_message
14
+ "expected #{@target.inspect} to have mount #{@expected}"
15
+ end
16
+ def negative_failure_message
17
+ "expected #{@target.inspect} not to have mount #{@expected}"
18
+ end
19
+ def type
20
+ "mount"
21
+ end
22
+ end
23
+ end
24
+ def have_mount(name, extra="")
25
+ SpecExtensions::HaveMount.new(name, extra)
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,28 @@
1
+ module Spec
2
+ module Matchers
3
+ module SpecExtensions
4
+ class HavePackage < SpecExtensionsBase
5
+ def initialize(expected,extra="")
6
+ @expected = expected
7
+ @extra = extra
8
+ end
9
+ def matches?(target)
10
+ @target = target
11
+ is_present?
12
+ end
13
+ def failure_message
14
+ "expected #{@target.inspect} to have package #{@expected}"
15
+ end
16
+ def negative_failure_message
17
+ "expected #{@target.inspect} not to have package #{@expected}"
18
+ end
19
+ def type
20
+ "package"
21
+ end
22
+ end
23
+ end
24
+ def have_package(name, extra="")
25
+ SpecExtensions::HavePackage.new(name, extra)
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,28 @@
1
+ module Spec
2
+ module Matchers
3
+ module SpecExtensions
4
+ class HaveRemotefile < SpecExtensionsBase
5
+ def initialize(expected,extra="")
6
+ @expected = expected
7
+ @extra = extra
8
+ end
9
+ def matches?(target)
10
+ @target = target
11
+ is_present?
12
+ end
13
+ def failure_message
14
+ "expected #{@target.inspect} to have remotefile #{@expected}"
15
+ end
16
+ def negative_failure_message
17
+ "expected #{@target.inspect} not to have remotefile #{@expected}"
18
+ end
19
+ def type
20
+ "remotefile"
21
+ end
22
+ end
23
+ end
24
+ def have_remotefile(name, extra="")
25
+ SpecExtensions::HaveRemotefile.new(name, extra)
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,28 @@
1
+ module Spec
2
+ module Matchers
3
+ module SpecExtensions
4
+ class HaveRsyncmirror < SpecExtensionsBase
5
+ def initialize(expected,extra="")
6
+ @expected = expected
7
+ @extra = extra
8
+ end
9
+ def matches?(target)
10
+ @target = target
11
+ is_present?
12
+ end
13
+ def failure_message
14
+ "expected #{@target.inspect} to have rsyncmirror #{@expected}"
15
+ end
16
+ def negative_failure_message
17
+ "expected #{@target.inspect} not to have rsyncmirror #{@expected}"
18
+ end
19
+ def type
20
+ "rsyncmirror"
21
+ end
22
+ end
23
+ end
24
+ def have_rsyncmirror(name, extra="")
25
+ SpecExtensions::HaveRsyncmirror.new(name, extra)
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,28 @@
1
+ module Spec
2
+ module Matchers
3
+ module SpecExtensions
4
+ class HaveService < SpecExtensionsBase
5
+ def initialize(expected,extra="")
6
+ @expected = expected
7
+ @extra = extra
8
+ end
9
+ def matches?(target)
10
+ @target = target
11
+ is_present?
12
+ end
13
+ def failure_message
14
+ "expected #{@target.inspect} to have service #{@expected}"
15
+ end
16
+ def negative_failure_message
17
+ "expected #{@target.inspect} not to have service #{@expected}"
18
+ end
19
+ def type
20
+ "service"
21
+ end
22
+ end
23
+ end
24
+ def have_service(name, extra="")
25
+ SpecExtensions::HaveService.new(name, extra)
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,28 @@
1
+ module Spec
2
+ module Matchers
3
+ module SpecExtensions
4
+ class HaveSshkey < SpecExtensionsBase
5
+ def initialize(expected,extra="")
6
+ @expected = expected
7
+ @extra = extra
8
+ end
9
+ def matches?(target)
10
+ @target = target
11
+ is_present?
12
+ end
13
+ def failure_message
14
+ "expected #{@target.inspect} to have sshkey #{@expected}"
15
+ end
16
+ def negative_failure_message
17
+ "expected #{@target.inspect} not to have sshkey #{@expected}"
18
+ end
19
+ def type
20
+ "sshkey"
21
+ end
22
+ end
23
+ end
24
+ def have_sshkey(name, extra="")
25
+ SpecExtensions::HaveSshkey.new(name, extra)
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,28 @@
1
+ module Spec
2
+ module Matchers
3
+ module SpecExtensions
4
+ class HaveSymlink < SpecExtensionsBase
5
+ def initialize(expected,extra="")
6
+ @expected = expected
7
+ @extra = extra
8
+ end
9
+ def matches?(target)
10
+ @target = target
11
+ is_present?
12
+ end
13
+ def failure_message
14
+ "expected #{@target.inspect} to have symlink #{@expected}"
15
+ end
16
+ def negative_failure_message
17
+ "expected #{@target.inspect} not to have symlink #{@expected}"
18
+ end
19
+ def type
20
+ "symlink"
21
+ end
22
+ end
23
+ end
24
+ def have_symlink(name, extra="")
25
+ SpecExtensions::HaveSymlink.new(name, extra)
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,32 @@
1
+ module Spec
2
+ module Matchers
3
+ module SpecExtensions
4
+ class HaveVariable < SpecExtensionsBase
5
+ def initialize(varname, expected,extra="")
6
+ @varname = varname
7
+ @expected = expected
8
+ @extra = extra
9
+ end
10
+ def matches?(target)
11
+ @target = target
12
+ is_present?
13
+ end
14
+ def is_present?
15
+ @target.match(/\$#{@varname}(\W+)=(\W+)#{@expected}/)[0]
16
+ end
17
+ def failure_message
18
+ "expected #{@target.inspect} to have variable #{@expected}"
19
+ end
20
+ def negative_failure_message
21
+ "expected #{@target.inspect} not to have variable #{@expected}"
22
+ end
23
+ def type
24
+ "variable"
25
+ end
26
+ end
27
+ end
28
+ def have_variable(name, extra="")
29
+ SpecExtensions::HaveVariable.new(name, extra)
30
+ end
31
+ end
32
+ end