serverspec 2.0.0.beta2 → 2.0.0.beta3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +7 -6
- data/Rakefile +2 -27
- data/lib/serverspec/helper.rb +0 -1
- data/lib/serverspec/helper/os.rb +2 -0
- data/lib/serverspec/helper/type.rb +1 -1
- data/lib/serverspec/setup.rb +11 -12
- data/lib/serverspec/type/base.rb +2 -1
- data/lib/serverspec/type/cgroup.rb +1 -1
- data/lib/serverspec/type/command.rb +1 -1
- data/lib/serverspec/type/cron.rb +1 -1
- data/lib/serverspec/type/default_gateway.rb +2 -2
- data/lib/serverspec/type/file.rb +22 -22
- data/lib/serverspec/type/group.rb +2 -2
- data/lib/serverspec/type/host.rb +3 -3
- data/lib/serverspec/type/iis_app_pool.rb +2 -2
- data/lib/serverspec/type/iis_website.rb +5 -5
- data/lib/serverspec/type/interface.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/kernel_module.rb +1 -1
- data/lib/serverspec/type/linux_kernel_parameter.rb +1 -1
- data/lib/serverspec/type/lxc.rb +2 -2
- data/lib/serverspec/type/mail_alias.rb +1 -1
- data/lib/serverspec/type/package.rb +4 -4
- data/lib/serverspec/type/php_config.rb +1 -1
- data/lib/serverspec/type/port.rb +2 -2
- data/lib/serverspec/type/process.rb +2 -2
- data/lib/serverspec/type/routing_table.rb +1 -1
- data/lib/serverspec/type/selinux.rb +3 -3
- data/lib/serverspec/type/service.rb +7 -8
- data/lib/serverspec/type/user.rb +6 -6
- data/lib/serverspec/type/windows_feature.rb +1 -1
- data/lib/serverspec/type/windows_hot_fix.rb +1 -1
- data/lib/serverspec/type/windows_registry_key.rb +4 -4
- data/lib/serverspec/type/windows_scheduled_task.rb +9 -0
- data/lib/serverspec/type/yumrepo.rb +2 -2
- data/lib/serverspec/type/zfs.rb +2 -2
- data/lib/serverspec/version.rb +1 -1
- data/spec/spec_helper.rb +2 -33
- data/spec/type/cgroup_spec.rb +13 -0
- data/spec/type/command_spec.rb +64 -0
- data/spec/type/cron_spec.rb +19 -0
- data/spec/type/default_gateway_spec.rb +14 -0
- data/spec/type/file_spec.rb +392 -0
- data/spec/type/group_spec.rb +19 -0
- data/spec/type/host_spec.rb +56 -0
- data/spec/type/interface_spec.rb +21 -0
- data/spec/type/iptables_spec.rb +19 -0
- data/spec/type/kernel_module_spec.rb +11 -0
- data/spec/type/linux_kernel_parameter_spec.rb +33 -0
- data/spec/type/lxc_spec.rb +20 -0
- data/spec/type/mail_alias_spec.rb +11 -0
- data/spec/type/package_spec.rb +104 -0
- data/spec/type/php_config_spec.rb +33 -0
- data/spec/type/port_spec.rb +27 -0
- data/spec/type/process_spec.rb +35 -0
- data/spec/type/routing_table_spec.rb +118 -0
- data/spec/type/selinux_spec.rb +15 -0
- data/spec/type/service_spec.rb +94 -0
- data/spec/type/user_spec.rb +51 -0
- data/spec/type/yumrepo_spec.rb +25 -0
- data/spec/type/zfs_spec.rb +15 -0
- metadata +49 -3
- data/lib/serverspec/helper/backend.rb +0 -11
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9498cdcc8009438a0e2ea00b06d9b02cf295eb0c
|
4
|
+
data.tar.gz: a41a66337d3929e1f940a1b7be962a375d3de319
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5304cf1b1c87ed692e75976840c85ee83df258d31293ab73dbee915b8cde0f539497c5b2fd8f2af3d2710194e7cd4b309b818c2d713c314007ff9ecf03675b0c
|
7
|
+
data.tar.gz: 142748c3e19538fee987c0c1ba6c2afd1cc4640ac1732cf7a60d13f49f5df9c3ee1fc91169fc867277cb7147e2e6588e7a3ef7f2762017f578b88dd372729765
|
data/README.md
CHANGED
@@ -130,12 +130,13 @@ end
|
|
130
130
|
|
131
131
|
You can select from:
|
132
132
|
|
133
|
-
*
|
134
|
-
*
|
135
|
-
*
|
136
|
-
*
|
137
|
-
*
|
138
|
-
*
|
133
|
+
* SpecInfra::Helper::RedHat
|
134
|
+
* SpecInfra::Helper::Debian
|
135
|
+
* SpecInfra::Helper::Fedora
|
136
|
+
* SpecInfra::Helper::Gentoo
|
137
|
+
* SpecInfra::Helper::Solaris
|
138
|
+
* SpecInfra::Helper::Darwin
|
139
|
+
* SpecInfra::Helper::Arch
|
139
140
|
|
140
141
|
## Vagrant support
|
141
142
|
|
data/Rakefile
CHANGED
@@ -2,31 +2,6 @@ require "bundler/gem_tasks"
|
|
2
2
|
require "rspec/core/rake_task"
|
3
3
|
require "octorelease"
|
4
4
|
|
5
|
-
|
6
|
-
|
7
|
-
namespace :spec do
|
8
|
-
oses = %w( darwin debian gentoo plamo redhat aix solaris solaris10 solaris11 smartos windows freebsd freebsd10 arch)
|
9
|
-
backends = %w( exec ssh cmd winrm powershell )
|
10
|
-
|
11
|
-
task :all => [ oses.map {|os| "spec:#{os}" }, backends, :helper, :unit ].flatten
|
12
|
-
|
13
|
-
oses.each do |os|
|
14
|
-
RSpec::Core::RakeTask.new(os.to_sym) do |t|
|
15
|
-
t.pattern = "spec/#{os}/*_spec.rb"
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
19
|
-
backends.each do |backend|
|
20
|
-
RSpec::Core::RakeTask.new(backend) do |t|
|
21
|
-
t.pattern = "spec/backend/#{backend.to_s}/*_spec.rb"
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
25
|
-
RSpec::Core::RakeTask.new(:helper) do |t|
|
26
|
-
t.pattern = "spec/helper/*_spec.rb"
|
27
|
-
end
|
28
|
-
|
29
|
-
RSpec::Core::RakeTask.new(:unit) do |t|
|
30
|
-
t.pattern = "spec/unit/*_spec.rb"
|
31
|
-
end
|
5
|
+
RSpec::Core::RakeTask.new('spec') do |t|
|
6
|
+
t.pattern = 'spec/*/*_spec.rb'
|
32
7
|
end
|
data/lib/serverspec/helper.rb
CHANGED
data/lib/serverspec/helper/os.rb
CHANGED
@@ -5,7 +5,7 @@ module Serverspec
|
|
5
5
|
base cgroup command cron default_gateway file group host iis_website iis_app_pool interface
|
6
6
|
ipfilter ipnat iptables kernel_module linux_kernel_parameter lxc mail_alias
|
7
7
|
package php_config port process routing_table selinux service user yumrepo
|
8
|
-
windows_feature windows_hot_fix windows_registry_key zfs
|
8
|
+
windows_feature windows_hot_fix windows_registry_key windows_scheduled_task zfs
|
9
9
|
)
|
10
10
|
|
11
11
|
types.each {|type| require "serverspec/type/#{type}" }
|
data/lib/serverspec/setup.rb
CHANGED
@@ -14,11 +14,11 @@ module Serverspec
|
|
14
14
|
end
|
15
15
|
|
16
16
|
if @backend_type == 'Ssh'
|
17
|
-
print
|
17
|
+
print 'Vagrant instance y/n: '
|
18
18
|
@vagrant = $stdin.gets.chomp
|
19
19
|
if @vagrant =~ (/(true|t|yes|y|1)$/i)
|
20
20
|
@vagrant = true
|
21
|
-
print
|
21
|
+
print 'Auto-configure Vagrant from Vagrantfile? y/n: '
|
22
22
|
auto_config = $stdin.gets.chomp
|
23
23
|
if auto_config =~ (/(true|t|yes|y|1)$/i)
|
24
24
|
auto_vagrant_configuration
|
@@ -35,7 +35,7 @@ module Serverspec
|
|
35
35
|
@hostname = 'localhost'
|
36
36
|
end
|
37
37
|
|
38
|
-
[
|
38
|
+
['spec', "spec/#{@hostname}"].each { |dir| safe_mkdir(dir) }
|
39
39
|
safe_create_spec
|
40
40
|
safe_create_spec_helper
|
41
41
|
safe_create_rakefile
|
@@ -55,7 +55,7 @@ EOF
|
|
55
55
|
num = $stdin.gets.to_i - 1
|
56
56
|
puts
|
57
57
|
|
58
|
-
@os_type = [
|
58
|
+
@os_type = ['UN*X', 'Windows'][num] || 'UN*X'
|
59
59
|
end
|
60
60
|
|
61
61
|
def self.ask_unix_backend
|
@@ -71,7 +71,7 @@ EOF
|
|
71
71
|
num = $stdin.gets.to_i - 1
|
72
72
|
puts
|
73
73
|
|
74
|
-
@backend_type = [
|
74
|
+
@backend_type = ['Ssh', 'Exec'][num] || 'Exec'
|
75
75
|
end
|
76
76
|
|
77
77
|
def self.ask_windows_backend
|
@@ -87,7 +87,7 @@ EOF
|
|
87
87
|
num = $stdin.gets.to_i - 1
|
88
88
|
puts
|
89
89
|
|
90
|
-
@backend_type = [
|
90
|
+
@backend_type = ['WinRM', 'Cmd'][num] || 'Exec'
|
91
91
|
end
|
92
92
|
|
93
93
|
def self.safe_create_spec
|
@@ -138,7 +138,6 @@ EOF
|
|
138
138
|
end
|
139
139
|
|
140
140
|
def self.safe_create_spec_helper
|
141
|
-
requirements = []
|
142
141
|
content = ERB.new(spec_helper_template, nil, '-').result(binding)
|
143
142
|
if File.exists? 'spec/spec_helper.rb'
|
144
143
|
old_content = File.read('spec/spec_helper.rb')
|
@@ -167,7 +166,7 @@ task :default => :spec
|
|
167
166
|
if File.exists? 'Rakefile'
|
168
167
|
old_content = File.read('Rakefile')
|
169
168
|
if old_content != content
|
170
|
-
$stderr.puts
|
169
|
+
$stderr.puts '!! Rakefile already exists and differs from template'
|
171
170
|
end
|
172
171
|
else
|
173
172
|
File.open('Rakefile', 'w') do |f|
|
@@ -179,7 +178,7 @@ task :default => :spec
|
|
179
178
|
|
180
179
|
def self.find_vagrantfile
|
181
180
|
Pathname.new(Dir.pwd).ascend do |dir|
|
182
|
-
path = File.expand_path(
|
181
|
+
path = File.expand_path('Vagrantfile', dir)
|
183
182
|
return path if File.exists?(path)
|
184
183
|
end
|
185
184
|
nil
|
@@ -199,16 +198,16 @@ task :default => :spec
|
|
199
198
|
@hostname = list_of_vms[0]
|
200
199
|
else
|
201
200
|
list_of_vms.each_with_index { |vm, index | puts "#{index}) #{vm}\n" }
|
202
|
-
print
|
201
|
+
print 'Choose a VM from the Vagrantfile: '
|
203
202
|
chosen_vm = $stdin.gets.chomp
|
204
203
|
@hostname = list_of_vms[chosen_vm.to_i]
|
205
204
|
end
|
206
205
|
else
|
207
|
-
$stderr.puts
|
206
|
+
$stderr.puts 'Vagrant status error - Check your Vagrantfile or .vagrant'
|
208
207
|
exit 1
|
209
208
|
end
|
210
209
|
else
|
211
|
-
$stderr.puts
|
210
|
+
$stderr.puts 'Vagrantfile not found in directory!'
|
212
211
|
exit 1
|
213
212
|
end
|
214
213
|
end
|
data/lib/serverspec/type/base.rb
CHANGED
@@ -8,7 +8,7 @@ module Serverspec
|
|
8
8
|
self
|
9
9
|
else
|
10
10
|
param = "#{@subsystem}.#{meth.to_s}"
|
11
|
-
ret =
|
11
|
+
ret = @runner.run_command("cgget -n -r #{param} #{@name} | awk '{print $2}'")
|
12
12
|
val = ret.stdout.strip
|
13
13
|
val = val.to_i if val.match(/^\d+$/)
|
14
14
|
val
|
data/lib/serverspec/type/cron.rb
CHANGED
@@ -2,13 +2,13 @@ module Serverspec
|
|
2
2
|
module Type
|
3
3
|
class DefaultGateway < Base
|
4
4
|
def ipaddress
|
5
|
-
ret =
|
5
|
+
ret = @runner.run_command(commands.check_routing_table('default'))
|
6
6
|
ret.stdout =~ /^(\S+)(?: via (\S+))? dev (\S+).+(?:\r)?\n(?:default via (\S+))?/
|
7
7
|
$2 ? $2 : $4
|
8
8
|
end
|
9
9
|
|
10
10
|
def interface
|
11
|
-
ret =
|
11
|
+
ret = @runner.run_command(commands.check_routing_table('default'))
|
12
12
|
ret.stdout =~ /^(\S+)(?: via (\S+))? dev (\S+).+(?:\r)?\n(?:default via (\S+))?/
|
13
13
|
$3
|
14
14
|
end
|
data/lib/serverspec/type/file.rb
CHANGED
@@ -4,94 +4,94 @@ module Serverspec
|
|
4
4
|
attr_accessor :content
|
5
5
|
|
6
6
|
def file?
|
7
|
-
|
7
|
+
@runner.check_file(@name)
|
8
8
|
end
|
9
9
|
|
10
10
|
def socket?
|
11
|
-
|
11
|
+
@runner.check_socket(@name)
|
12
12
|
end
|
13
13
|
|
14
14
|
def directory?
|
15
|
-
|
15
|
+
@runner.check_directory(@name)
|
16
16
|
end
|
17
17
|
|
18
18
|
def contain(pattern, from, to)
|
19
19
|
if pattern.is_a?(Array)
|
20
|
-
|
20
|
+
@runner.check_file_contain_lines(@name, pattern, from, to)
|
21
21
|
else
|
22
22
|
if (from || to).nil?
|
23
|
-
|
23
|
+
@runner.check_file_contain(@name, pattern)
|
24
24
|
else
|
25
|
-
|
25
|
+
@runner.check_file_contain_within(@name, pattern, from, to)
|
26
26
|
end
|
27
27
|
end
|
28
28
|
end
|
29
29
|
|
30
30
|
def mode?(mode)
|
31
|
-
|
31
|
+
@runner.check_mode(@name, mode)
|
32
32
|
end
|
33
33
|
|
34
34
|
def owned_by?(owner)
|
35
|
-
|
35
|
+
@runner.check_owner(@name, owner)
|
36
36
|
end
|
37
37
|
|
38
38
|
def grouped_into?(group)
|
39
|
-
|
39
|
+
@runner.check_grouped(@name, group)
|
40
40
|
end
|
41
41
|
|
42
42
|
def linked_to?(target)
|
43
|
-
|
43
|
+
@runner.check_link(@name, target)
|
44
44
|
end
|
45
45
|
|
46
46
|
def readable?(by_whom, by_user)
|
47
47
|
if by_user != nil
|
48
|
-
|
48
|
+
@runner.check_access_by_user(@name, by_user, 'r')
|
49
49
|
else
|
50
|
-
|
50
|
+
@runner.check_readable(@name, by_whom)
|
51
51
|
end
|
52
52
|
end
|
53
53
|
|
54
54
|
def writable?(by_whom, by_user)
|
55
55
|
if by_user != nil
|
56
|
-
|
56
|
+
@runner.check_access_by_user(@name, by_user, 'w')
|
57
57
|
else
|
58
|
-
|
58
|
+
@runner.check_writable(@name, by_whom)
|
59
59
|
end
|
60
60
|
end
|
61
61
|
|
62
62
|
def executable?(by_whom, by_user)
|
63
63
|
if by_user != nil
|
64
|
-
|
64
|
+
@runner.check_access_by_user(@name, by_user, 'x')
|
65
65
|
else
|
66
|
-
|
66
|
+
@runner.check_executable(@name, by_whom)
|
67
67
|
end
|
68
68
|
end
|
69
69
|
|
70
70
|
def mounted?(attr, only_with)
|
71
|
-
|
71
|
+
@runner.check_mounted(@name, attr, only_with)
|
72
72
|
end
|
73
73
|
|
74
74
|
def match_checksum(checksum)
|
75
|
-
|
75
|
+
@runner.check_file_checksum(@name, checksum)
|
76
76
|
end
|
77
77
|
|
78
78
|
def match_md5checksum(md5sum)
|
79
|
-
|
79
|
+
@runner.check_file_md5checksum(@name, md5sum)
|
80
80
|
end
|
81
81
|
|
82
82
|
def match_sha256checksum(sha256sum)
|
83
|
-
|
83
|
+
@runner.check_file_sha256checksum(@name, sha256sum)
|
84
84
|
end
|
85
85
|
|
86
86
|
def content
|
87
87
|
if @content.nil?
|
88
|
-
@content =
|
88
|
+
@content = @runner.run_command(commands.get_file_content(@name)).stdout
|
89
89
|
end
|
90
90
|
@content
|
91
91
|
end
|
92
92
|
|
93
93
|
def version?(version)
|
94
|
-
|
94
|
+
@runner.check_file_version(@name, version)
|
95
95
|
end
|
96
96
|
end
|
97
97
|
end
|
data/lib/serverspec/type/host.rb
CHANGED
@@ -2,15 +2,15 @@ module Serverspec
|
|
2
2
|
module Type
|
3
3
|
class Host < Base
|
4
4
|
def resolvable?(type)
|
5
|
-
|
5
|
+
@runner.check_resolvable(@name, type)
|
6
6
|
end
|
7
7
|
|
8
8
|
def reachable?(port, proto, timeout)
|
9
|
-
|
9
|
+
@runner.check_reachable(@name, port, proto, timeout)
|
10
10
|
end
|
11
11
|
|
12
12
|
def ipaddress
|
13
|
-
|
13
|
+
@runner.get_ipaddress_of_host(@name).stdout.strip
|
14
14
|
end
|
15
15
|
end
|
16
16
|
end
|
@@ -2,11 +2,11 @@ module Serverspec
|
|
2
2
|
module Type
|
3
3
|
class IisAppPool < Base
|
4
4
|
def exists?()
|
5
|
-
|
5
|
+
@runner.check_iis_app_pool(@name)
|
6
6
|
end
|
7
7
|
|
8
8
|
def has_dotnet_version?(dotnet)
|
9
|
-
|
9
|
+
@runner.check_iis_app_pool_dotnet(@name, dotnet)
|
10
10
|
end
|
11
11
|
|
12
12
|
def to_s
|
@@ -3,23 +3,23 @@ module Serverspec
|
|
3
3
|
class IisWebsite < Base
|
4
4
|
|
5
5
|
def exists?()
|
6
|
-
|
6
|
+
@runner.check_iis_website_installed(@name)
|
7
7
|
end
|
8
8
|
|
9
9
|
def enabled?()
|
10
|
-
|
10
|
+
@runner.check_iis_website_enabled(@name)
|
11
11
|
end
|
12
12
|
|
13
13
|
def running?()
|
14
|
-
|
14
|
+
@runner.check_iis_website_running(@name)
|
15
15
|
end
|
16
16
|
|
17
17
|
def in_app_pool?(app_pool)
|
18
|
-
|
18
|
+
@runner.check_iis_website_app_pool(@name, app_pool)
|
19
19
|
end
|
20
20
|
|
21
21
|
def has_physical_path?(path)
|
22
|
-
|
22
|
+
@runner.check_iis_website_path(@name, path)
|
23
23
|
end
|
24
24
|
|
25
25
|
def to_s
|