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.
- 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
|