serverspec 0.5.3 → 0.5.4
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/lib/serverspec.rb +13 -0
- data/lib/serverspec/backend/exec.rb +18 -19
- data/lib/serverspec/backend/ssh.rb +3 -1
- data/lib/serverspec/helper/exec.rb +3 -1
- data/lib/serverspec/helper/ssh.rb +3 -1
- data/lib/serverspec/matchers/be_default_gateway.rb +0 -1
- data/lib/serverspec/matchers/be_directory.rb +1 -1
- data/lib/serverspec/matchers/be_disabled.rb +1 -1
- data/lib/serverspec/matchers/be_enabled.rb +1 -1
- data/lib/serverspec/matchers/be_enforcing.rb +1 -1
- data/lib/serverspec/matchers/be_executable.rb +2 -2
- data/lib/serverspec/matchers/be_file.rb +1 -1
- data/lib/serverspec/matchers/be_group.rb +1 -1
- data/lib/serverspec/matchers/be_grouped_into.rb +1 -1
- data/lib/serverspec/matchers/be_installed.rb +2 -2
- data/lib/serverspec/matchers/be_linked_to.rb +1 -1
- data/lib/serverspec/matchers/be_listening.rb +1 -1
- data/lib/serverspec/matchers/be_mode.rb +1 -1
- data/lib/serverspec/matchers/be_mounted.rb +1 -1
- data/lib/serverspec/matchers/be_owned_by.rb +1 -1
- data/lib/serverspec/matchers/be_permissive.rb +1 -1
- data/lib/serverspec/matchers/be_reachable.rb +1 -1
- data/lib/serverspec/matchers/be_readable.rb +2 -2
- data/lib/serverspec/matchers/be_resolvable.rb +1 -1
- data/lib/serverspec/matchers/be_running.rb +2 -2
- data/lib/serverspec/matchers/be_user.rb +1 -1
- data/lib/serverspec/matchers/be_writable.rb +2 -2
- data/lib/serverspec/matchers/be_zfs.rb +1 -1
- data/lib/serverspec/matchers/belong_to_group.rb +1 -1
- data/lib/serverspec/matchers/have_authorized_key.rb +1 -1
- data/lib/serverspec/matchers/have_cron_entry.rb +1 -1
- data/lib/serverspec/matchers/have_entry.rb +1 -1
- data/lib/serverspec/matchers/have_gid.rb +1 -1
- data/lib/serverspec/matchers/have_home_directory.rb +1 -1
- data/lib/serverspec/matchers/have_ipfilter_rule.rb +1 -1
- data/lib/serverspec/matchers/have_ipnat_rule.rb +1 -1
- data/lib/serverspec/matchers/have_iptables_rule.rb +1 -1
- data/lib/serverspec/matchers/have_login_shell.rb +1 -1
- data/lib/serverspec/matchers/have_svcprop.rb +1 -1
- data/lib/serverspec/matchers/have_svcprops.rb +1 -1
- data/lib/serverspec/matchers/have_uid.rb +1 -1
- data/lib/serverspec/matchers/match_md5checksum.rb +1 -1
- data/lib/serverspec/type/cron.rb +1 -1
- data/lib/serverspec/type/file.rb +16 -16
- data/lib/serverspec/type/group.rb +2 -2
- data/lib/serverspec/type/host.rb +2 -2
- data/lib/serverspec/type/ipfilter.rb +1 -1
- data/lib/serverspec/type/ipnat.rb +1 -1
- data/lib/serverspec/type/iptables.rb +1 -1
- data/lib/serverspec/type/package.rb +2 -2
- data/lib/serverspec/type/port.rb +1 -1
- data/lib/serverspec/type/routing_table.rb +1 -1
- data/lib/serverspec/type/selinux.rb +3 -3
- data/lib/serverspec/type/service.rb +4 -4
- data/lib/serverspec/type/user.rb +6 -6
- data/lib/serverspec/type/zfs.rb +2 -2
- data/lib/serverspec/version.rb +1 -1
- data/spec/helpers/attributes_spec.rb +2 -0
- metadata +2 -2
data/lib/serverspec.rb
CHANGED
@@ -39,6 +39,7 @@ RSpec.configure do |c|
|
|
39
39
|
c.add_setting :sudo_password, :default => nil
|
40
40
|
Serverspec.configuration.defaults.each { |k, v| c.add_setting k, :default => v }
|
41
41
|
c.before :each do
|
42
|
+
backend.set_example(example)
|
42
43
|
if described_class.nil?
|
43
44
|
puts
|
44
45
|
puts "*****************************************"
|
@@ -72,6 +73,18 @@ module RSpec
|
|
72
73
|
message
|
73
74
|
end
|
74
75
|
end
|
76
|
+
def failure_message_for_should_not(&block)
|
77
|
+
if block.to_s =~ /serverspec\/matchers\/.+\.rb/
|
78
|
+
@custom = true
|
79
|
+
end
|
80
|
+
if @custom
|
81
|
+
cache_or_call_cached(:failure_message_for_should, &block)
|
82
|
+
else
|
83
|
+
message = "#{example.metadata[:command]}\n"
|
84
|
+
message += "#{example.metadata[:stdout]}"
|
85
|
+
message
|
86
|
+
end
|
87
|
+
end
|
75
88
|
end
|
76
89
|
end
|
77
90
|
end
|
@@ -1,8 +1,16 @@
|
|
1
|
+
require 'singleton'
|
2
|
+
|
1
3
|
module Serverspec
|
2
4
|
module Backend
|
3
5
|
class Exec
|
4
|
-
|
5
|
-
|
6
|
+
include Singleton
|
7
|
+
|
8
|
+
def set_commands(c)
|
9
|
+
@commands = c
|
10
|
+
end
|
11
|
+
|
12
|
+
def set_example(e)
|
13
|
+
@example = e
|
6
14
|
end
|
7
15
|
|
8
16
|
def commands
|
@@ -16,7 +24,7 @@ module Serverspec
|
|
16
24
|
# In ruby 1.9, it is possible to use Open3.capture3, but not in 1.8
|
17
25
|
#stdout, stderr, status = Open3.capture3(cmd)
|
18
26
|
|
19
|
-
if
|
27
|
+
if @example
|
20
28
|
@example.metadata[:command] = cmd
|
21
29
|
@example.metadata[:stdout] = stdout
|
22
30
|
end
|
@@ -49,13 +57,10 @@ module Serverspec
|
|
49
57
|
|
50
58
|
# Default action is to call check_zero with args
|
51
59
|
def method_missing(meth, *args, &block)
|
52
|
-
# Remove example object from *args
|
53
|
-
@example = args.shift
|
54
60
|
check_zero(meth, *args)
|
55
61
|
end
|
56
62
|
|
57
|
-
def check_running(
|
58
|
-
@example = example
|
63
|
+
def check_running(process)
|
59
64
|
ret = run_command(commands.check_running(process))
|
60
65
|
if ret[:exit_status] == 1 || ret[:stdout] =~ /stopped/
|
61
66
|
ret = run_command(commands.check_process(process))
|
@@ -63,14 +68,12 @@ module Serverspec
|
|
63
68
|
ret[:exit_status] == 0
|
64
69
|
end
|
65
70
|
|
66
|
-
def check_running_under_supervisor(
|
67
|
-
@example = example
|
71
|
+
def check_running_under_supervisor(process)
|
68
72
|
ret = run_command(commands.check_running_under_supervisor(process))
|
69
73
|
ret[:exit_status] == 0 && ret[:stdout] =~ /RUNNING/
|
70
74
|
end
|
71
75
|
|
72
|
-
def check_readable(
|
73
|
-
@example = example
|
76
|
+
def check_readable(file, by_whom)
|
74
77
|
mode = sprintf('%04s',run_command(commands.get_mode(file))[:stdout].strip)
|
75
78
|
mode = mode.split('')
|
76
79
|
mode_octal = mode[0].to_i * 512 + mode[1].to_i * 64 + mode[2].to_i * 8 + mode[3].to_i * 1
|
@@ -86,8 +89,7 @@ module Serverspec
|
|
86
89
|
end
|
87
90
|
end
|
88
91
|
|
89
|
-
def check_writable(
|
90
|
-
@example = example
|
92
|
+
def check_writable(file, by_whom)
|
91
93
|
mode = sprintf('%04s',run_command(commands.get_mode(file))[:stdout].strip)
|
92
94
|
mode = mode.split('')
|
93
95
|
mode_octal = mode[0].to_i * 512 + mode[1].to_i * 64 + mode[2].to_i * 8 + mode[3].to_i * 1
|
@@ -103,8 +105,7 @@ module Serverspec
|
|
103
105
|
end
|
104
106
|
end
|
105
107
|
|
106
|
-
def check_executable(
|
107
|
-
@example = example
|
108
|
+
def check_executable(file, by_whom)
|
108
109
|
mode = sprintf('%04s',run_command(commands.get_mode(file))[:stdout].strip)
|
109
110
|
mode = mode.split('')
|
110
111
|
mode_octal = mode[0].to_i * 512 + mode[1].to_i * 64 + mode[2].to_i * 8 + mode[3].to_i * 1
|
@@ -120,8 +121,7 @@ module Serverspec
|
|
120
121
|
end
|
121
122
|
end
|
122
123
|
|
123
|
-
def check_mounted(
|
124
|
-
@example = example
|
124
|
+
def check_mounted(path, expected_attr, only_with)
|
125
125
|
ret = run_command(commands.check_mounted(path))
|
126
126
|
if expected_attr.nil? || ret[:exit_status] != 0
|
127
127
|
return ret[:exit_status] == 0
|
@@ -154,8 +154,7 @@ module Serverspec
|
|
154
154
|
end
|
155
155
|
end
|
156
156
|
|
157
|
-
def check_routing_table(
|
158
|
-
@example = example
|
157
|
+
def check_routing_table(expected_attr)
|
159
158
|
return false if ! expected_attr[:destination]
|
160
159
|
ret = run_command(commands.check_routing_table(expected_attr[:destination]))
|
161
160
|
return false if ret[:exit_status] != 0
|
@@ -2,7 +2,9 @@ module Serverspec
|
|
2
2
|
module Helper
|
3
3
|
module Exec
|
4
4
|
def backend(commands_object=nil)
|
5
|
-
Serverspec::Backend::Exec.
|
5
|
+
instance = Serverspec::Backend::Exec.instance
|
6
|
+
instance.set_commands(commands_object || commands)
|
7
|
+
instance
|
6
8
|
end
|
7
9
|
end
|
8
10
|
end
|
@@ -2,7 +2,9 @@ module Serverspec
|
|
2
2
|
module Helper
|
3
3
|
module Ssh
|
4
4
|
def backend(commands_object=nil)
|
5
|
-
Serverspec::Backend::Ssh.
|
5
|
+
instance = Serverspec::Backend::Ssh.instance
|
6
|
+
instance.set_commands(commands_object || commands)
|
7
|
+
instance
|
6
8
|
end
|
7
9
|
end
|
8
10
|
end
|
@@ -4,9 +4,9 @@ RSpec::Matchers.define :be_executable do
|
|
4
4
|
file.executable?(@by_whom, @by_user)
|
5
5
|
else
|
6
6
|
if @by_user != nil
|
7
|
-
backend.check_access_by_user(
|
7
|
+
backend.check_access_by_user(file, @by_user, 'x')
|
8
8
|
else
|
9
|
-
backend.check_executable(
|
9
|
+
backend.check_executable(file, @by_whom)
|
10
10
|
end
|
11
11
|
end
|
12
12
|
end
|
@@ -4,7 +4,7 @@ RSpec::Matchers.define :be_installed do
|
|
4
4
|
name.installed?(@provider, @version)
|
5
5
|
else
|
6
6
|
if @provider.nil?
|
7
|
-
backend.check_installed(
|
7
|
+
backend.check_installed(name)
|
8
8
|
else
|
9
9
|
check_method = "check_installed_by_#{@provider}".to_sym
|
10
10
|
|
@@ -12,7 +12,7 @@ RSpec::Matchers.define :be_installed do
|
|
12
12
|
raise ArgumentError.new("`be_installed` matcher doesn't support #{@under}")
|
13
13
|
end
|
14
14
|
|
15
|
-
backend.send(check_method,
|
15
|
+
backend.send(check_method, name, @version)
|
16
16
|
end
|
17
17
|
end
|
18
18
|
end
|
@@ -11,7 +11,7 @@ RSpec::Matchers.define :be_reachable do
|
|
11
11
|
if host.respond_to?(:reachable?)
|
12
12
|
host.reachable?(port, proto, timeout)
|
13
13
|
else
|
14
|
-
backend.check_reachable(
|
14
|
+
backend.check_reachable(host, port, proto, timeout)
|
15
15
|
end
|
16
16
|
end
|
17
17
|
|
@@ -4,9 +4,9 @@ RSpec::Matchers.define :be_readable do
|
|
4
4
|
file.readable?(@by_whom, @by_user)
|
5
5
|
else
|
6
6
|
if @by_user != nil
|
7
|
-
backend.check_access_by_user(
|
7
|
+
backend.check_access_by_user(file, @by_user, 'r')
|
8
8
|
else
|
9
|
-
backend.check_readable(
|
9
|
+
backend.check_readable(file, @by_whom)
|
10
10
|
end
|
11
11
|
end
|
12
12
|
end
|
@@ -10,9 +10,9 @@ RSpec::Matchers.define :be_running do
|
|
10
10
|
raise ArgumentError.new("`be_running` matcher doesn't support #{@under}")
|
11
11
|
end
|
12
12
|
|
13
|
-
backend.send(check_method,
|
13
|
+
backend.send(check_method, process)
|
14
14
|
else
|
15
|
-
backend.check_running(
|
15
|
+
backend.check_running(process)
|
16
16
|
end
|
17
17
|
end
|
18
18
|
end
|
@@ -4,9 +4,9 @@ RSpec::Matchers.define :be_writable do
|
|
4
4
|
file.writable?(@by_whom, @by_user)
|
5
5
|
else
|
6
6
|
if @by_user != nil
|
7
|
-
backend.check_access_by_user(
|
7
|
+
backend.check_access_by_user(file, @by_user, 'w')
|
8
8
|
else
|
9
|
-
backend.check_writable(
|
9
|
+
backend.check_writable(file, @by_whom)
|
10
10
|
end
|
11
11
|
end
|
12
12
|
end
|
@@ -3,7 +3,7 @@ RSpec::Matchers.define :have_home_directory do |path_to_home|
|
|
3
3
|
if user.respond_to?(:has_home_directory?)
|
4
4
|
user.has_home_directory?(path_to_home)
|
5
5
|
else
|
6
|
-
backend.check_home_directory(
|
6
|
+
backend.check_home_directory(user, path_to_home)
|
7
7
|
end
|
8
8
|
end
|
9
9
|
end
|
@@ -3,7 +3,7 @@ RSpec::Matchers.define :have_login_shell do |path_to_shell|
|
|
3
3
|
if user.respond_to?(:has_login_shell?)
|
4
4
|
user.has_login_shell?(path_to_shell)
|
5
5
|
else
|
6
|
-
backend.check_login_shell(
|
6
|
+
backend.check_login_shell(user, path_to_shell)
|
7
7
|
end
|
8
8
|
end
|
9
9
|
end
|
data/lib/serverspec/type/cron.rb
CHANGED
data/lib/serverspec/type/file.rb
CHANGED
@@ -2,67 +2,67 @@ module Serverspec
|
|
2
2
|
module Type
|
3
3
|
class File < Base
|
4
4
|
def file?
|
5
|
-
backend.check_file(
|
5
|
+
backend.check_file(@name)
|
6
6
|
end
|
7
7
|
|
8
8
|
def directory?
|
9
|
-
backend.check_directory(
|
9
|
+
backend.check_directory(@name)
|
10
10
|
end
|
11
11
|
|
12
12
|
def contain(pattern, from, to)
|
13
13
|
if (@from || @to).nil?
|
14
|
-
cmd = backend.check_file_contain(
|
14
|
+
cmd = backend.check_file_contain(@name, pattern)
|
15
15
|
else
|
16
|
-
cmd = backend.check_file_contain_within(
|
16
|
+
cmd = backend.check_file_contain_within(@name, pattern, from, to)
|
17
17
|
end
|
18
18
|
end
|
19
19
|
|
20
20
|
def mode?(mode)
|
21
|
-
backend.check_mode(
|
21
|
+
backend.check_mode(@name, mode)
|
22
22
|
end
|
23
23
|
|
24
24
|
def owned_by?(owner)
|
25
|
-
backend.check_owner(
|
25
|
+
backend.check_owner(@name, owner)
|
26
26
|
end
|
27
27
|
|
28
28
|
def grouped_into?(group)
|
29
|
-
backend.check_grouped(
|
29
|
+
backend.check_grouped(@name, group)
|
30
30
|
end
|
31
31
|
|
32
32
|
def linked_to?(target)
|
33
|
-
backend.check_link(
|
33
|
+
backend.check_link(@name, target)
|
34
34
|
end
|
35
35
|
|
36
36
|
def readable?(by_whom, by_user)
|
37
37
|
if by_user != nil
|
38
|
-
backend.check_access_by_user(
|
38
|
+
backend.check_access_by_user(@name, by_user, 'r')
|
39
39
|
else
|
40
|
-
backend.check_readable(
|
40
|
+
backend.check_readable(@name, by_whom)
|
41
41
|
end
|
42
42
|
end
|
43
43
|
|
44
44
|
def writable?(by_whom, by_user)
|
45
45
|
if by_user != nil
|
46
|
-
backend.check_access_by_user(
|
46
|
+
backend.check_access_by_user(@name, by_user, 'w')
|
47
47
|
else
|
48
|
-
backend.check_writable(
|
48
|
+
backend.check_writable(@name, by_whom)
|
49
49
|
end
|
50
50
|
end
|
51
51
|
|
52
52
|
def executable?(by_whom, by_user)
|
53
53
|
if by_user != nil
|
54
|
-
backend.check_access_by_user(
|
54
|
+
backend.check_access_by_user(@name, by_user, 'x')
|
55
55
|
else
|
56
|
-
backend.check_executable(
|
56
|
+
backend.check_executable(@name, by_whom)
|
57
57
|
end
|
58
58
|
end
|
59
59
|
|
60
60
|
def mounted?(attr, only_with)
|
61
|
-
backend.check_mounted(
|
61
|
+
backend.check_mounted(@name, attr, only_with)
|
62
62
|
end
|
63
63
|
|
64
64
|
def match_md5checksum(md5sum)
|
65
|
-
backend.check_file_md5checksum(
|
65
|
+
backend.check_file_md5checksum(@name, md5sum)
|
66
66
|
end
|
67
67
|
|
68
68
|
end
|
data/lib/serverspec/type/host.rb
CHANGED
@@ -2,11 +2,11 @@ module Serverspec
|
|
2
2
|
module Type
|
3
3
|
class Host < Base
|
4
4
|
def resolvable?(type)
|
5
|
-
backend.check_resolvable(
|
5
|
+
backend.check_resolvable(@name, type)
|
6
6
|
end
|
7
7
|
|
8
8
|
def reachable?(port, proto, timeout)
|
9
|
-
backend.check_reachable(
|
9
|
+
backend.check_reachable(@name, port, proto, timeout)
|
10
10
|
end
|
11
11
|
end
|
12
12
|
end
|
@@ -3,7 +3,7 @@ module Serverspec
|
|
3
3
|
class Package < Base
|
4
4
|
def installed?(provider, version)
|
5
5
|
if provider.nil?
|
6
|
-
backend.check_installed(
|
6
|
+
backend.check_installed(@name)
|
7
7
|
else
|
8
8
|
check_method = "check_installed_by_#{provider}".to_sym
|
9
9
|
|
@@ -11,7 +11,7 @@ module Serverspec
|
|
11
11
|
raise ArgumentError.new("`be_installed` matcher doesn't support #{provider}")
|
12
12
|
end
|
13
13
|
|
14
|
-
backend.send(check_method,
|
14
|
+
backend.send(check_method, @name, version)
|
15
15
|
end
|
16
16
|
end
|
17
17
|
end
|
data/lib/serverspec/type/port.rb
CHANGED
@@ -2,15 +2,15 @@ module Serverspec
|
|
2
2
|
module Type
|
3
3
|
class Selinux < Base
|
4
4
|
def disabled?
|
5
|
-
backend.check_selinux(
|
5
|
+
backend.check_selinux('disabled')
|
6
6
|
end
|
7
7
|
|
8
8
|
def enforcing?
|
9
|
-
backend.check_selinux(
|
9
|
+
backend.check_selinux('enforcing')
|
10
10
|
end
|
11
11
|
|
12
12
|
def permissive?
|
13
|
-
backend.check_selinux(
|
13
|
+
backend.check_selinux('permissive')
|
14
14
|
end
|
15
15
|
|
16
16
|
def to_s
|
@@ -2,7 +2,7 @@ module Serverspec
|
|
2
2
|
module Type
|
3
3
|
class Service < Base
|
4
4
|
def enabled?
|
5
|
-
backend.check_enabled(
|
5
|
+
backend.check_enabled(@name)
|
6
6
|
end
|
7
7
|
|
8
8
|
def running? under
|
@@ -13,14 +13,14 @@ module Serverspec
|
|
13
13
|
raise ArgumentError.new("`be_running` matcher doesn't support #{@under}")
|
14
14
|
end
|
15
15
|
|
16
|
-
backend.send(check_method,
|
16
|
+
backend.send(check_method, @name)
|
17
17
|
else
|
18
|
-
backend.check_running(
|
18
|
+
backend.check_running(@name)
|
19
19
|
end
|
20
20
|
end
|
21
21
|
|
22
22
|
def has_property?(property)
|
23
|
-
backend.check_svcprops(
|
23
|
+
backend.check_svcprops(@name, property)
|
24
24
|
end
|
25
25
|
end
|
26
26
|
end
|
data/lib/serverspec/type/user.rb
CHANGED
@@ -2,27 +2,27 @@ module Serverspec
|
|
2
2
|
module Type
|
3
3
|
class User < Base
|
4
4
|
def exists?
|
5
|
-
backend.check_user(
|
5
|
+
backend.check_user(@name)
|
6
6
|
end
|
7
7
|
|
8
8
|
def belongs_to_group?(group)
|
9
|
-
backend.check_belonging_group(
|
9
|
+
backend.check_belonging_group(@name, group)
|
10
10
|
end
|
11
11
|
|
12
12
|
def has_uid?(uid)
|
13
|
-
backend.check_uid(
|
13
|
+
backend.check_uid(@name, uid)
|
14
14
|
end
|
15
15
|
|
16
16
|
def has_home_directory?(path)
|
17
|
-
backend.check_home_directory(
|
17
|
+
backend.check_home_directory(@name, path)
|
18
18
|
end
|
19
19
|
|
20
20
|
def has_login_shell?(shell)
|
21
|
-
backend.check_login_shell(
|
21
|
+
backend.check_login_shell(@name, shell)
|
22
22
|
end
|
23
23
|
|
24
24
|
def has_authorized_key?(key)
|
25
|
-
backend.check_authorized_key(
|
25
|
+
backend.check_authorized_key(@name, key)
|
26
26
|
end
|
27
27
|
end
|
28
28
|
end
|
data/lib/serverspec/type/zfs.rb
CHANGED
@@ -2,11 +2,11 @@ module Serverspec
|
|
2
2
|
module Type
|
3
3
|
class Zfs < Base
|
4
4
|
def exists?
|
5
|
-
backend.check_zfs(
|
5
|
+
backend.check_zfs(@name)
|
6
6
|
end
|
7
7
|
|
8
8
|
def has_property?(property)
|
9
|
-
backend.check_zfs(
|
9
|
+
backend.check_zfs(@name, property)
|
10
10
|
end
|
11
11
|
|
12
12
|
def to_s
|
data/lib/serverspec/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: serverspec
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.5.
|
4
|
+
version: 0.5.4
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-06-
|
12
|
+
date: 2013-06-09 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: net-ssh
|