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.
- data/Manifest.txt +21 -1
- data/PostInstall.txt +1 -1
- data/lib/poolparty/core/class.rb +24 -0
- data/lib/poolparty/core/module.rb +2 -2
- data/lib/poolparty/dependency_resolutions/puppet.rb +9 -2
- data/lib/poolparty/helpers/provisioners/master.rb +1 -6
- data/lib/poolparty/plugins/deploydirectory.rb +5 -1
- data/lib/poolparty/pool/cloud.rb +2 -1
- data/lib/poolparty/pool/resource.rb +8 -5
- data/lib/poolparty/pool/script.rb +1 -1
- data/lib/poolparty/spec/core/string.rb +10 -0
- data/lib/poolparty/spec/matchers/a_spec_extensions_base.rb +24 -0
- data/lib/poolparty/spec/matchers/have_cron.rb +28 -0
- data/lib/poolparty/spec/matchers/have_deploydirectory.rb +15 -0
- data/lib/poolparty/spec/matchers/have_directory.rb +31 -0
- data/lib/poolparty/spec/matchers/have_exec.rb +28 -0
- data/lib/poolparty/spec/matchers/have_file.rb +28 -0
- data/lib/poolparty/spec/matchers/have_gempackage.rb +28 -0
- data/lib/poolparty/spec/matchers/have_git.rb +28 -0
- data/lib/poolparty/spec/matchers/have_host.rb +28 -0
- data/lib/poolparty/spec/matchers/have_mount.rb +28 -0
- data/lib/poolparty/spec/matchers/have_package.rb +28 -0
- data/lib/poolparty/spec/matchers/have_remotefile.rb +28 -0
- data/lib/poolparty/spec/matchers/have_rsyncmirror.rb +28 -0
- data/lib/poolparty/spec/matchers/have_service.rb +28 -0
- data/lib/poolparty/spec/matchers/have_sshkey.rb +28 -0
- data/lib/poolparty/spec/matchers/have_symlink.rb +28 -0
- data/lib/poolparty/spec/matchers/have_variable.rb +32 -0
- data/lib/poolparty/spec/spec/dynamic_matchers.rb +63 -0
- data/lib/poolparty/spec/spec/ensure_matchers_exist.rb +7 -0
- data/lib/poolparty/spec/{have_base.rb → templates/have_base.rb} +5 -6
- data/lib/poolparty/version.rb +1 -1
- data/lib/poolpartyspec.rb +11 -17
- data/poolparty.gemspec +599 -61
- data/website/index.html +1 -1
- 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/
|
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
data/lib/poolparty/core/class.rb
CHANGED
@@ -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
|
@@ -54,9 +54,16 @@ module PoolParty
|
|
54
54
|
end
|
55
55
|
|
56
56
|
def to_s
|
57
|
-
|
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
|
-
|
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
|
data/lib/poolparty/pool/cloud.rb
CHANGED
@@ -48,7 +48,8 @@ module PoolParty
|
|
48
48
|
plugin_directory
|
49
49
|
|
50
50
|
p = pare.is_a?(PoolParty::Pool::Pool) ? pare : nil
|
51
|
-
|
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
|
-
|
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
|
@@ -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
|