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