serverspec 0.6.15 → 0.6.16
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/.gitignore +1 -0
- data/lib/serverspec.rb +2 -0
- data/lib/serverspec/backend/exec.rb +5 -1
- data/lib/serverspec/commands/smartos.rb +13 -0
- data/lib/serverspec/commands/solaris.rb +2 -2
- data/lib/serverspec/helper.rb +1 -0
- data/lib/serverspec/helper/smartos.rb +10 -0
- data/lib/serverspec/version.rb +1 -1
- data/spec/smartos/commands_spec.rb +193 -0
- data/spec/solaris/commands_spec.rb +2 -2
- metadata +6 -2
data/.gitignore
CHANGED
data/lib/serverspec.rb
CHANGED
@@ -12,6 +12,7 @@ require 'serverspec/commands/redhat'
|
|
12
12
|
require 'serverspec/commands/debian'
|
13
13
|
require 'serverspec/commands/gentoo'
|
14
14
|
require 'serverspec/commands/solaris'
|
15
|
+
require 'serverspec/commands/smartos'
|
15
16
|
require 'serverspec/commands/darwin'
|
16
17
|
require 'serverspec/configuration'
|
17
18
|
require 'rspec/core/formatters/base_formatter'
|
@@ -32,6 +33,7 @@ RSpec.configure do |c|
|
|
32
33
|
c.include(Serverspec::Helper::Debian, :os => :debian)
|
33
34
|
c.include(Serverspec::Helper::Gentoo, :os => :gentoo)
|
34
35
|
c.include(Serverspec::Helper::Solaris, :os => :solaris)
|
36
|
+
c.include(Serverspec::Helper::SmartOS, :os => :smartos)
|
35
37
|
c.include(Serverspec::Helper::Darwin, :os => :darwin)
|
36
38
|
c.add_setting :os, :default => nil
|
37
39
|
c.add_setting :host, :default => nil
|
@@ -182,7 +182,11 @@ module Serverspec
|
|
182
182
|
elsif run_command('ls /etc/gentoo-release')[:exit_status] == 0
|
183
183
|
'Gentoo'
|
184
184
|
elsif run_command('uname -s')[:stdout] =~ /SunOS/i
|
185
|
-
'
|
185
|
+
if run_command('grep -q SmartOS /etc/release')
|
186
|
+
'SmartOS'
|
187
|
+
else
|
188
|
+
'Solaris'
|
189
|
+
end
|
186
190
|
elsif run_command('uname -s')[:stdout] =~ /Darwin/i
|
187
191
|
'Darwin'
|
188
192
|
else
|
@@ -0,0 +1,13 @@
|
|
1
|
+
module Serverspec
|
2
|
+
module Commands
|
3
|
+
class SmartOS < Serverspec::Commands::Solaris
|
4
|
+
def check_installed(package, version=nil)
|
5
|
+
cmd = "/opt/local/bin/pkgin list 2> /dev/null | grep -qw ^#{escape(package)}"
|
6
|
+
if version
|
7
|
+
cmd = "#{cmd}-#{escape(version)}"
|
8
|
+
end
|
9
|
+
cmd
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -2,7 +2,7 @@ module Serverspec
|
|
2
2
|
module Commands
|
3
3
|
class Solaris < Base
|
4
4
|
def check_enabled(service, level=3)
|
5
|
-
"svcs -l #{escape(service)} 2> /dev/null | grep 'enabled
|
5
|
+
"svcs -l #{escape(service)} 2> /dev/null | grep -wx '^enabled.*true$'"
|
6
6
|
end
|
7
7
|
|
8
8
|
def check_installed(package, version=nil)
|
@@ -19,7 +19,7 @@ module Serverspec
|
|
19
19
|
end
|
20
20
|
|
21
21
|
def check_running(service)
|
22
|
-
"svcs -l #{escape(service)} status 2> /dev/null |grep 'state
|
22
|
+
"svcs -l #{escape(service)} status 2> /dev/null |grep -wx '^state.*online$'"
|
23
23
|
end
|
24
24
|
|
25
25
|
def check_cron_entry(user, entry)
|
data/lib/serverspec/helper.rb
CHANGED
@@ -10,6 +10,7 @@ require 'serverspec/helper/redhat'
|
|
10
10
|
require 'serverspec/helper/debian'
|
11
11
|
require 'serverspec/helper/gentoo'
|
12
12
|
require 'serverspec/helper/solaris'
|
13
|
+
require 'serverspec/helper/smartos'
|
13
14
|
require 'serverspec/helper/darwin'
|
14
15
|
require 'serverspec/helper/detect_os'
|
15
16
|
|
data/lib/serverspec/version.rb
CHANGED
@@ -0,0 +1,193 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
include Serverspec::Helper::SmartOS
|
4
|
+
|
5
|
+
describe 'Serverspec commands of Solaris family specified SmartOS' do
|
6
|
+
it_behaves_like 'support command check_file', '/etc/passwd'
|
7
|
+
it_behaves_like 'support command check_directory', '/var/log'
|
8
|
+
it_behaves_like 'support command check_socket', '/var/run/unicorn.sock'
|
9
|
+
|
10
|
+
it_behaves_like 'support command check_installed_by_gem', 'jekyll'
|
11
|
+
it_behaves_like 'support command check_installed_by_gem with_version', 'jekyll', '1.0.2'
|
12
|
+
|
13
|
+
it_behaves_like 'support command check_installed_by_npm', 'hubot'
|
14
|
+
it_behaves_like 'support command check_installed_by_npm with_version', 'hubot', '1.0.2'
|
15
|
+
|
16
|
+
it_behaves_like 'support command check_installed_by_pecl', 'mongo'
|
17
|
+
it_behaves_like 'support command check_installed_by_pecl with_version', 'mongo', '1.4.1'
|
18
|
+
|
19
|
+
it_behaves_like 'support command check_mounted', '/'
|
20
|
+
|
21
|
+
it_behaves_like 'support command check_routing_table', '192.168.100.1/24'
|
22
|
+
it_behaves_like 'support command check_resolvable'
|
23
|
+
|
24
|
+
it_behaves_like 'support command check_user', 'root'
|
25
|
+
it_behaves_like 'support command check_user', 'wheel'
|
26
|
+
|
27
|
+
it_behaves_like 'support command check_file_md5checksum', '/etc/passewd', '96c8c50f81a29965f7af6de371ab4250'
|
28
|
+
|
29
|
+
it_behaves_like 'support command check_running_under_supervisor', 'httpd'
|
30
|
+
it_behaves_like 'support command check_process', 'httpd'
|
31
|
+
|
32
|
+
it_behaves_like 'support command check_file_contain', '/etc/passwd', 'root'
|
33
|
+
|
34
|
+
it_behaves_like 'support command check_mode', '/etc/sudoers', 440
|
35
|
+
it_behaves_like 'support command check_owner', '/etc/sudoers', 'root'
|
36
|
+
it_behaves_like 'support command check_grouped', '/etc/sudoers', 'wheel'
|
37
|
+
|
38
|
+
it_behaves_like 'support command check_link', '/etc/system-release', '/etc/redhat-release'
|
39
|
+
|
40
|
+
it_behaves_like 'support command check_uid', 'root', 0
|
41
|
+
|
42
|
+
it_behaves_like 'support command check_login_shell', 'root', '/bin/bash'
|
43
|
+
it_behaves_like 'support command check_home_directory', 'root', '/root'
|
44
|
+
|
45
|
+
it_behaves_like 'support command check_authorized_key'
|
46
|
+
|
47
|
+
it_behaves_like 'support command get_mode'
|
48
|
+
end
|
49
|
+
|
50
|
+
describe 'check_enabled' do
|
51
|
+
subject { commands.check_enabled('httpd') }
|
52
|
+
it { should eq "svcs -l httpd 2> /dev/null | grep -wx '^enabled.*true$'" }
|
53
|
+
end
|
54
|
+
|
55
|
+
## SmartOS
|
56
|
+
describe 'check_installed' do
|
57
|
+
subject { commands.check_installed('httpd') }
|
58
|
+
it { should eq '/opt/local/bin/pkgin list 2> /dev/null | grep -qw ^httpd' }
|
59
|
+
end
|
60
|
+
|
61
|
+
## SmartOS
|
62
|
+
describe 'check_installed' do
|
63
|
+
subject { commands.check_installed('httpd', '2.2') }
|
64
|
+
it { should eq '/opt/local/bin/pkgin list 2> /dev/null | grep -qw ^httpd-2.2' }
|
65
|
+
end
|
66
|
+
|
67
|
+
describe 'check_file_contain_within' do
|
68
|
+
context 'contain a pattern in the file' do
|
69
|
+
subject { commands.check_file_contain_within('Gemfile', 'rspec') }
|
70
|
+
it { should eq "sed -n 1,\\$p Gemfile | grep -q -- rspec /dev/stdin" }
|
71
|
+
end
|
72
|
+
|
73
|
+
context 'contain a pattern after a line in a file' do
|
74
|
+
subject { commands.check_file_contain_within('Gemfile', 'rspec', '/^group :test do/') }
|
75
|
+
it { should eq "sed -n /\\^group\\ :test\\ do/,\\$p Gemfile | grep -q -- rspec /dev/stdin" }
|
76
|
+
end
|
77
|
+
|
78
|
+
context 'contain a pattern before a line in a file' do
|
79
|
+
subject {commands.check_file_contain_within('Gemfile', 'rspec', nil, '/^end/') }
|
80
|
+
it { should eq "sed -n 1,/\\^end/p Gemfile | grep -q -- rspec /dev/stdin" }
|
81
|
+
end
|
82
|
+
|
83
|
+
context 'contain a pattern from within a line and another line in a file' do
|
84
|
+
subject { commands.check_file_contain_within('Gemfile', 'rspec', '/^group :test do/', '/^end/') }
|
85
|
+
it { should eq "sed -n /\\^group\\ :test\\ do/,/\\^end/p Gemfile | grep -q -- rspec /dev/stdin" }
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
describe 'check_listening' do
|
90
|
+
subject { commands.check_listening(80) }
|
91
|
+
it { should eq "netstat -an 2> /dev/null | egrep 'LISTEN|Idle' | grep -- .80\\ " }
|
92
|
+
end
|
93
|
+
|
94
|
+
describe 'check_running' do
|
95
|
+
subject { commands.check_running('httpd') }
|
96
|
+
it { should eq "svcs -l httpd status 2> /dev/null |grep -wx '^state.*online$'" }
|
97
|
+
end
|
98
|
+
|
99
|
+
describe 'check_cron_entry' do
|
100
|
+
context 'specify root user' do
|
101
|
+
subject { commands.check_cron_entry('root', '* * * * * /usr/local/bin/batch.sh') }
|
102
|
+
it { should eq 'crontab -l root | grep -- \\\\\\*\\ \\\\\\*\\ \\\\\\*\\ \\\\\\*\\ \\\\\\*\\ /usr/local/bin/batch.sh' }
|
103
|
+
end
|
104
|
+
|
105
|
+
context 'no specified user' do
|
106
|
+
subject { commands.check_cron_entry(nil, '* * * * * /usr/local/bin/batch.sh') }
|
107
|
+
it { should eq 'crontab -l | grep -- \\\\\\*\\ \\\\\\*\\ \\\\\\*\\ \\\\\\*\\ \\\\\\*\\ /usr/local/bin/batch.sh' }
|
108
|
+
end
|
109
|
+
end
|
110
|
+
|
111
|
+
describe 'check_belonging_group' do
|
112
|
+
subject { commands.check_belonging_group('root', 'wheel') }
|
113
|
+
it { should eq "id -Gn root | grep -- wheel" }
|
114
|
+
end
|
115
|
+
|
116
|
+
describe 'check_gid' do
|
117
|
+
subject { commands.check_gid('root', 0) }
|
118
|
+
it { should eq "getent group | grep -- \\^root: | cut -f 3 -d ':' | grep -w -- 0" }
|
119
|
+
end
|
120
|
+
|
121
|
+
describe 'check_zfs' do
|
122
|
+
context 'check without properties' do
|
123
|
+
subject { commands.check_zfs('rpool') }
|
124
|
+
it { should eq "zfs list -H rpool" }
|
125
|
+
end
|
126
|
+
|
127
|
+
context 'check with a property' do
|
128
|
+
subject { commands.check_zfs('rpool', { 'mountpoint' => '/rpool' }) }
|
129
|
+
it { should eq "zfs list -H -o mountpoint rpool | grep -- \\^/rpool\\$" }
|
130
|
+
end
|
131
|
+
|
132
|
+
context 'check with multiple properties' do
|
133
|
+
subject { commands.check_zfs('rpool', { 'mountpoint' => '/rpool', 'compression' => 'off' }) }
|
134
|
+
it { should eq "zfs list -H -o compression rpool | grep -- \\^off\\$ && zfs list -H -o mountpoint rpool | grep -- \\^/rpool\\$" }
|
135
|
+
end
|
136
|
+
end
|
137
|
+
|
138
|
+
describe 'check_ip_filter_rule' do
|
139
|
+
subject { commands.check_ipfilter_rule('pass in quick on lo0 all') }
|
140
|
+
it { should eq "ipfstat -io 2> /dev/null | grep -- pass\\ in\\ quick\\ on\\ lo0\\ all" }
|
141
|
+
end
|
142
|
+
|
143
|
+
describe 'check_ipnat_rule' do
|
144
|
+
subject { commands.check_ipnat_rule('map net1 192.168.0.0/24 -> 0.0.0.0/32') }
|
145
|
+
it { should eq "ipnat -l 2> /dev/null | grep -- \\^map\\ net1\\ 192.168.0.0/24\\ -\\>\\ 0.0.0.0/32\\$" }
|
146
|
+
end
|
147
|
+
|
148
|
+
describe 'check_svcprop' do
|
149
|
+
subject { commands.check_svcprop('svc:/network/http:apache22', 'httpd/enable_64bit','false') }
|
150
|
+
it { should eq "svcprop -p httpd/enable_64bit svc:/network/http:apache22 | grep -- \\^false\\$" }
|
151
|
+
end
|
152
|
+
|
153
|
+
describe 'check_svcprops' do
|
154
|
+
subject {
|
155
|
+
commands.check_svcprops('svc:/network/http:apache22', {
|
156
|
+
'httpd/enable_64bit' => 'false',
|
157
|
+
'httpd/server_type' => 'worker',
|
158
|
+
})
|
159
|
+
}
|
160
|
+
it { should eq "svcprop -p httpd/enable_64bit svc:/network/http:apache22 | grep -- \\^false\\$ && svcprop -p httpd/server_type svc:/network/http:apache22 | grep -- \\^worker\\$" }
|
161
|
+
end
|
162
|
+
|
163
|
+
describe 'check_access_by_user' do
|
164
|
+
context 'read access' do
|
165
|
+
subject {commands.check_access_by_user '/tmp/something', 'dummyuser1', 'r'}
|
166
|
+
it { should eq 'su dummyuser1 -c "test -r /tmp/something"' }
|
167
|
+
end
|
168
|
+
|
169
|
+
context 'write access' do
|
170
|
+
subject {commands.check_access_by_user '/tmp/somethingw', 'dummyuser2', 'w'}
|
171
|
+
it { should eq 'su dummyuser2 -c "test -w /tmp/somethingw"' }
|
172
|
+
end
|
173
|
+
|
174
|
+
context 'execute access' do
|
175
|
+
subject {commands.check_access_by_user '/tmp/somethingx', 'dummyuser3', 'x'}
|
176
|
+
it { should eq 'su dummyuser3 -c "test -x /tmp/somethingx"' }
|
177
|
+
end
|
178
|
+
end
|
179
|
+
|
180
|
+
describe 'check_reachable' do
|
181
|
+
context "connect with name from /etc/services to localhost" do
|
182
|
+
subject { commands.check_reachable('localhost', 'ssh', 'tcp', 1) }
|
183
|
+
it { should eq "nc -vvvvzt -w 1 localhost ssh" }
|
184
|
+
end
|
185
|
+
context "connect with ip and port 11111 and timeout of 5" do
|
186
|
+
subject { commands.check_reachable('127.0.0.1', '11111', 'udp', 5) }
|
187
|
+
it { should eq "nc -vvvvzu -w 5 127.0.0.1 11111" }
|
188
|
+
end
|
189
|
+
context "do a ping" do
|
190
|
+
subject { commands.check_reachable('127.0.0.1', nil, 'icmp', 1) }
|
191
|
+
it { should eq "ping -n 127.0.0.1 1" }
|
192
|
+
end
|
193
|
+
end
|
@@ -49,7 +49,7 @@ end
|
|
49
49
|
|
50
50
|
describe 'check_enabled' do
|
51
51
|
subject { commands.check_enabled('httpd') }
|
52
|
-
it { should eq "svcs -l httpd 2> /dev/null | grep 'enabled
|
52
|
+
it { should eq "svcs -l httpd 2> /dev/null | grep -wx '^enabled.*true$'" }
|
53
53
|
end
|
54
54
|
|
55
55
|
describe 'check_installed' do
|
@@ -91,7 +91,7 @@ end
|
|
91
91
|
|
92
92
|
describe 'check_running' do
|
93
93
|
subject { commands.check_running('httpd') }
|
94
|
-
it { should eq "svcs -l httpd status 2> /dev/null |grep 'state
|
94
|
+
it { should eq "svcs -l httpd status 2> /dev/null |grep -wx '^state.*online$'" }
|
95
95
|
end
|
96
96
|
|
97
97
|
describe 'check_cron_entry' do
|
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.6.
|
4
|
+
version: 0.6.16
|
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-30 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: net-ssh
|
@@ -150,6 +150,7 @@ files:
|
|
150
150
|
- lib/serverspec/commands/gentoo.rb
|
151
151
|
- lib/serverspec/commands/linux.rb
|
152
152
|
- lib/serverspec/commands/redhat.rb
|
153
|
+
- lib/serverspec/commands/smartos.rb
|
153
154
|
- lib/serverspec/commands/solaris.rb
|
154
155
|
- lib/serverspec/configuration.rb
|
155
156
|
- lib/serverspec/helper.rb
|
@@ -163,6 +164,7 @@ files:
|
|
163
164
|
- lib/serverspec/helper/gentoo.rb
|
164
165
|
- lib/serverspec/helper/puppet.rb
|
165
166
|
- lib/serverspec/helper/redhat.rb
|
167
|
+
- lib/serverspec/helper/smartos.rb
|
166
168
|
- lib/serverspec/helper/solaris.rb
|
167
169
|
- lib/serverspec/helper/ssh.rb
|
168
170
|
- lib/serverspec/helper/type.rb
|
@@ -275,6 +277,7 @@ files:
|
|
275
277
|
- spec/redhat/service_spec.rb
|
276
278
|
- spec/redhat/user_spec.rb
|
277
279
|
- spec/redhat/yumrepo_spec.rb
|
280
|
+
- spec/smartos/commands_spec.rb
|
278
281
|
- spec/solaris/command_spec.rb
|
279
282
|
- spec/solaris/commands_spec.rb
|
280
283
|
- spec/solaris/cron_spec.rb
|
@@ -401,6 +404,7 @@ test_files:
|
|
401
404
|
- spec/redhat/service_spec.rb
|
402
405
|
- spec/redhat/user_spec.rb
|
403
406
|
- spec/redhat/yumrepo_spec.rb
|
407
|
+
- spec/smartos/commands_spec.rb
|
404
408
|
- spec/solaris/command_spec.rb
|
405
409
|
- spec/solaris/commands_spec.rb
|
406
410
|
- spec/solaris/cron_spec.rb
|