auser-poolparty 0.2.70 → 0.2.71

Sign up to get free protection for your applications and to get access to all the features.
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