specinfra 0.4.1 → 0.5.0
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.
- checksums.yaml +4 -4
- data/Rakefile +11 -2
- data/lib/specinfra/backend/base.rb +2 -2
- data/lib/specinfra/backend/cmd.rb +2 -2
- data/lib/specinfra/backend/docker.rb +2 -2
- data/lib/specinfra/backend/dockerfile.rb +1 -2
- data/lib/specinfra/backend/exec.rb +31 -32
- data/lib/specinfra/backend/powershell/script_helper.rb +2 -2
- data/lib/specinfra/backend/shellscript.rb +1 -2
- data/lib/specinfra/backend/ssh.rb +1 -1
- data/lib/specinfra/backend/winrm.rb +2 -2
- data/lib/specinfra/command_result.rb +28 -0
- data/lib/specinfra/version.rb +1 -1
- data/lib/specinfra.rb +1 -0
- data/spec/backend/exec/build_command_spec.rb +32 -0
- data/spec/spec_helper.rb +1 -2
- metadata +5 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c43b0fc54df451fdfd3f4d2277ccd43b086903b4
|
4
|
+
data.tar.gz: 0ea1cdca32da29426db6c404424fe88eb0a5ce04
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: fe76cc14f1638e62d32e5e617d7efd61d333245228c5d4d4a6c3cb9ee52f39eb662b7bea29993e0bbf116afe34754f85a3080a1ef3d779817686d6d878a3adbf
|
7
|
+
data.tar.gz: 31590df84b9539f7a2f1a3d2e4f8d34021a182a3f87d0f38ebd86db16de9c85a44fc9b505de1aac2464192e71ed95ecd66766822b657d3fc9cc07cc07be2f13a
|
data/Rakefile
CHANGED
@@ -10,8 +10,17 @@ namespace :spec do
|
|
10
10
|
t.pattern = "spec/helper/*_spec.rb"
|
11
11
|
end
|
12
12
|
|
13
|
-
|
14
|
-
|
13
|
+
task :backend => 'backend:all'
|
14
|
+
namespace :backend do
|
15
|
+
backends = %w[exec ssh]
|
16
|
+
|
17
|
+
task :all => backends
|
18
|
+
|
19
|
+
backends.each do |backend|
|
20
|
+
RSpec::Core::RakeTask.new(backend) do |t|
|
21
|
+
t.pattern = "spec/backend/#{backend}/*_spec.rb"
|
22
|
+
end
|
23
|
+
end
|
15
24
|
end
|
16
25
|
|
17
26
|
RSpec::Core::RakeTask.new(:configuration) do |t|
|
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'singleton'
|
2
|
+
require 'specinfra/command_result'
|
2
3
|
|
3
4
|
module SpecInfra
|
4
5
|
module Backend
|
@@ -18,8 +19,7 @@ module SpecInfra
|
|
18
19
|
end
|
19
20
|
|
20
21
|
def check_zero(cmd, *args)
|
21
|
-
|
22
|
-
ret[:exit_status] == 0
|
22
|
+
run_command(commands.send(cmd, *args)).success?
|
23
23
|
end
|
24
24
|
|
25
25
|
# Default action is to call check_zero with args
|
@@ -13,8 +13,8 @@ module SpecInfra
|
|
13
13
|
@example.metadata[:command] = script
|
14
14
|
@example.metadata[:stdout] = result[:stdout] + result[:stderr]
|
15
15
|
end
|
16
|
-
|
17
|
-
:exit_status => result[:status]
|
16
|
+
CommandResult.new :stdout => result[:stdout], :stderr => result[:stderr],
|
17
|
+
:exit_status => result[:status]
|
18
18
|
end
|
19
19
|
|
20
20
|
def execute_script script
|
@@ -54,8 +54,8 @@ module SpecInfra
|
|
54
54
|
begin
|
55
55
|
stdout, stderr = container.attach
|
56
56
|
result = container.wait
|
57
|
-
return
|
58
|
-
:exit_status => result['StatusCode']
|
57
|
+
return CommandResult.new :stdout => stdout.join, :stderr => stderr.join,
|
58
|
+
:exit_status => result['StatusCode']
|
59
59
|
rescue
|
60
60
|
container.kill
|
61
61
|
end
|
@@ -19,8 +19,7 @@ module SpecInfra
|
|
19
19
|
@example.metadata[:stdout] = stdout
|
20
20
|
end
|
21
21
|
|
22
|
-
|
23
|
-
:exit_status => $?.exitstatus, :exit_signal => nil }
|
22
|
+
CommandResult.new :stdout => stdout, :exit_status => $?.exitstatus
|
24
23
|
end
|
25
24
|
|
26
25
|
def run_with_no_ruby_environment
|
@@ -58,21 +57,21 @@ module SpecInfra
|
|
58
57
|
# In Ubuntu, some services are under upstart and "service foo status" returns
|
59
58
|
# exit status 0 even though they are stopped.
|
60
59
|
# So return false if stdout contains "stopped/waiting".
|
61
|
-
return false if ret
|
60
|
+
return false if ret.stdout =~ /stopped\/waiting/
|
62
61
|
|
63
62
|
# If the service is not registered, check by ps command
|
64
|
-
if ret
|
63
|
+
if ret.exit_status == 1
|
65
64
|
ret = run_command(commands.check_process(process))
|
66
65
|
end
|
67
66
|
|
68
|
-
ret
|
67
|
+
ret.success?
|
69
68
|
end
|
70
69
|
|
71
70
|
def check_monitored_by_monit(process)
|
72
71
|
ret = run_command(commands.check_monitored_by_monit(process))
|
73
|
-
return false unless ret
|
72
|
+
return false unless ret.stdout != nil && ret.success?
|
74
73
|
|
75
|
-
retlines = ret
|
74
|
+
retlines = ret.stdout.split(/[\r\n]+/).map(&:strip)
|
76
75
|
proc_index = retlines.index("Process '#{process}'")
|
77
76
|
return false unless proc_index
|
78
77
|
|
@@ -80,7 +79,7 @@ module SpecInfra
|
|
80
79
|
end
|
81
80
|
|
82
81
|
def check_readable(file, by_whom)
|
83
|
-
mode = sprintf('%04s',run_command(commands.get_mode(file))
|
82
|
+
mode = sprintf('%04s',run_command(commands.get_mode(file)).stdout.strip)
|
84
83
|
mode = mode.split('')
|
85
84
|
mode_octal = mode[0].to_i * 512 + mode[1].to_i * 64 + mode[2].to_i * 8 + mode[3].to_i * 1
|
86
85
|
case by_whom
|
@@ -96,7 +95,7 @@ module SpecInfra
|
|
96
95
|
end
|
97
96
|
|
98
97
|
def check_writable(file, by_whom)
|
99
|
-
mode = sprintf('%04s',run_command(commands.get_mode(file))
|
98
|
+
mode = sprintf('%04s',run_command(commands.get_mode(file)).stdout.strip)
|
100
99
|
mode = mode.split('')
|
101
100
|
mode_octal = mode[0].to_i * 512 + mode[1].to_i * 64 + mode[2].to_i * 8 + mode[3].to_i * 1
|
102
101
|
case by_whom
|
@@ -112,7 +111,7 @@ module SpecInfra
|
|
112
111
|
end
|
113
112
|
|
114
113
|
def check_executable(file, by_whom)
|
115
|
-
mode = sprintf('%04s',run_command(commands.get_mode(file))
|
114
|
+
mode = sprintf('%04s',run_command(commands.get_mode(file)).stdout.strip)
|
116
115
|
mode = mode.split('')
|
117
116
|
mode_octal = mode[0].to_i * 512 + mode[1].to_i * 64 + mode[2].to_i * 8 + mode[3].to_i * 1
|
118
117
|
case by_whom
|
@@ -129,11 +128,11 @@ module SpecInfra
|
|
129
128
|
|
130
129
|
def check_mounted(path, expected_attr, only_with)
|
131
130
|
ret = run_command(commands.check_mounted(path))
|
132
|
-
if expected_attr.nil? || ret
|
133
|
-
return ret
|
131
|
+
if expected_attr.nil? || ret.failure?
|
132
|
+
return ret.success?
|
134
133
|
end
|
135
134
|
|
136
|
-
mount = ret
|
135
|
+
mount = ret.stdout.scan(/\S+/)
|
137
136
|
actual_attr = { :device => mount[0], :type => mount[4] }
|
138
137
|
mount[5].gsub(/\(|\)/, '').split(',').each do |option|
|
139
138
|
name, val = option.split('=')
|
@@ -163,11 +162,11 @@ module SpecInfra
|
|
163
162
|
def check_routing_table(expected_attr)
|
164
163
|
return false if ! expected_attr[:destination]
|
165
164
|
ret = run_command(commands.check_routing_table(expected_attr[:destination]))
|
166
|
-
return false if ret
|
165
|
+
return false if ret.failure?
|
167
166
|
|
168
|
-
ret
|
167
|
+
ret.stdout.gsub!(/\r\n/, "\n")
|
169
168
|
|
170
|
-
ret
|
169
|
+
ret.stdout =~ /^(\S+)(?: via (\S+))? dev (\S+).+\n(?:default via (\S+))?/
|
171
170
|
actual_attr = {
|
172
171
|
:destination => $1,
|
173
172
|
:gateway => $2 ? $2 : $4,
|
@@ -182,47 +181,47 @@ module SpecInfra
|
|
182
181
|
|
183
182
|
def check_os
|
184
183
|
return SpecInfra.configuration.os if SpecInfra.configuration.os
|
185
|
-
if run_command('ls /etc/redhat-release')
|
186
|
-
line = run_command('cat /etc/redhat-release')
|
184
|
+
if run_command('ls /etc/redhat-release').success?
|
185
|
+
line = run_command('cat /etc/redhat-release').stdout
|
187
186
|
if line =~ /release (\d[\d.]*)/
|
188
187
|
release = $1
|
189
188
|
end
|
190
189
|
{ :family => 'RedHat', :release => release }
|
191
|
-
elsif run_command('ls /etc/system-release')
|
190
|
+
elsif run_command('ls /etc/system-release').success?
|
192
191
|
{ :family => 'RedHat', :release => nil } # Amazon Linux
|
193
|
-
elsif run_command('ls /etc/debian_version')
|
192
|
+
elsif run_command('ls /etc/debian_version').success?
|
194
193
|
lsb_release = run_command("lsb_release -i")
|
195
|
-
if lsb_release
|
196
|
-
distro = $' if lsb_release
|
194
|
+
if lsb_release.success?
|
195
|
+
distro = $' if lsb_release.stdout =~ /:/
|
197
196
|
else
|
198
197
|
lsb_release = run_command("cat /etc/lsb-release")
|
199
|
-
if lsb_release
|
200
|
-
lsb_release
|
198
|
+
if lsb_release.success?
|
199
|
+
lsb_release.stdout.each_line do |line|
|
201
200
|
distro = $' if line =~ /^DISTRIB_ID=/
|
202
201
|
end
|
203
202
|
end
|
204
203
|
end
|
205
204
|
distro ||= 'Debian'
|
206
205
|
{ :family => distro.strip, :release => nil }
|
207
|
-
elsif run_command('ls /etc/gentoo-release')
|
206
|
+
elsif run_command('ls /etc/gentoo-release').success?
|
208
207
|
{ :family => 'Gentoo', :release => nil }
|
209
|
-
elsif run_command('ls /usr/lib/setup/Plamo-*')
|
208
|
+
elsif run_command('ls /usr/lib/setup/Plamo-*').success?
|
210
209
|
{ :family => 'Plamo', :release => nil }
|
211
|
-
elsif run_command('uname -s')
|
210
|
+
elsif run_command('uname -s').stdout =~ /AIX/i
|
212
211
|
{ :family => 'AIX', :release => nil }
|
213
|
-
elsif (os = run_command('uname -sr')
|
212
|
+
elsif (os = run_command('uname -sr').stdout) && os =~ /SunOS/i
|
214
213
|
if os =~ /5.10/
|
215
214
|
{ :family => 'Solaris10', :release => nil }
|
216
|
-
elsif run_command('grep -q "Oracle Solaris 11" /etc/release')
|
215
|
+
elsif run_command('grep -q "Oracle Solaris 11" /etc/release').success?
|
217
216
|
{ :family => 'Solaris11', :release => nil }
|
218
|
-
elsif run_command('grep -q SmartOS /etc/release')
|
217
|
+
elsif run_command('grep -q SmartOS /etc/release').success?
|
219
218
|
{ :family => 'SmartOS', :release => nil }
|
220
219
|
else
|
221
220
|
{ :family => 'Solaris', :release => nil }
|
222
221
|
end
|
223
|
-
elsif run_command('uname -s')
|
222
|
+
elsif run_command('uname -s').stdout =~ /Darwin/i
|
224
223
|
{ :family => 'Darwin', :release => nil }
|
225
|
-
elsif run_command('uname -s')
|
224
|
+
elsif run_command('uname -s').stdout =~ /FreeBSD/i
|
226
225
|
{ :family => 'FreeBSD', :release => nil }
|
227
226
|
else
|
228
227
|
{ :family => 'Base', :release => nil }
|
@@ -73,11 +73,11 @@ exit $exitCode
|
|
73
73
|
ret = run_command(commands.check_running(process))
|
74
74
|
|
75
75
|
# If the service is not registered, check the process
|
76
|
-
if ret
|
76
|
+
if ret.exit_status == 1
|
77
77
|
ret = run_command(commands.check_process(process))
|
78
78
|
end
|
79
79
|
|
80
|
-
ret
|
80
|
+
ret.success?
|
81
81
|
end
|
82
82
|
end
|
83
83
|
end
|
@@ -18,8 +18,8 @@ module SpecInfra
|
|
18
18
|
@example.metadata[:stdout] = stdout + stderr
|
19
19
|
end
|
20
20
|
|
21
|
-
|
22
|
-
:exit_status => result[:exitcode]
|
21
|
+
CommandResult.new :stdout => stdout, :stderr => stderr,
|
22
|
+
:exit_status => result[:exitcode]
|
23
23
|
end
|
24
24
|
end
|
25
25
|
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
module SpecInfra
|
2
|
+
class CommandResult
|
3
|
+
attr_reader :stdout, :stderr, :exit_status, :exit_signal
|
4
|
+
|
5
|
+
def initialize(args = {})
|
6
|
+
@stdout = args[:stdout] || ''
|
7
|
+
@stderr = args[:stderr] || ''
|
8
|
+
@exit_status = args[:exit_status] || 0
|
9
|
+
@exit_signal = args[:exit_signal]
|
10
|
+
end
|
11
|
+
|
12
|
+
def success?
|
13
|
+
@exit_status == 0
|
14
|
+
end
|
15
|
+
|
16
|
+
def failure?
|
17
|
+
@exit_status != 0
|
18
|
+
end
|
19
|
+
|
20
|
+
def [](x)
|
21
|
+
warn "CommandResult#[] is obsolete. Use accessors instead. in #{caller[0]}"
|
22
|
+
case x
|
23
|
+
when :stdout, :stderr, :exit_status, :exit_signal
|
24
|
+
self.send(x)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
data/lib/specinfra/version.rb
CHANGED
data/lib/specinfra.rb
CHANGED
@@ -0,0 +1,32 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
include SpecInfra::Helper::Exec
|
4
|
+
|
5
|
+
describe 'build command with path' do
|
6
|
+
before :each do
|
7
|
+
RSpec.configure do |c|
|
8
|
+
c.path = '/sbin:/usr/sbin'
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
context 'command pattern 1' do
|
13
|
+
subject { backend.build_command('test -f /etc/passwd') }
|
14
|
+
it { should eq 'env PATH=/sbin:/usr/sbin:$PATH test -f /etc/passwd' }
|
15
|
+
end
|
16
|
+
|
17
|
+
context 'command pattern 2' do
|
18
|
+
subject { backend.build_command('test ! -f /etc/selinux/config || (getenforce | grep -i -- disabled && grep -i -- ^SELINUX=disabled$ /etc/selinux/config)') }
|
19
|
+
it { should eq 'env PATH=/sbin:/usr/sbin:$PATH test ! -f /etc/selinux/config || (env PATH=/sbin:/usr/sbin:$PATH getenforce | grep -i -- disabled && env PATH=/sbin:/usr/sbin:$PATH grep -i -- ^SELINUX=disabled$ /etc/selinux/config)' }
|
20
|
+
end
|
21
|
+
|
22
|
+
context 'command pattern 3' do
|
23
|
+
subject { backend.build_command("dpkg -s apache2 && ! dpkg -s apache2 | grep -E '^Status: .+ not-installed$'") }
|
24
|
+
it { should eq "env PATH=/sbin:/usr/sbin:$PATH dpkg -s apache2 && ! env PATH=/sbin:/usr/sbin:$PATH dpkg -s apache2 | grep -E '^Status: .+ not-installed$'" }
|
25
|
+
end
|
26
|
+
|
27
|
+
after :each do
|
28
|
+
RSpec.configure do |c|
|
29
|
+
c.path = nil
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: specinfra
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Gosuke Miyashita
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-01-
|
11
|
+
date: 2014-01-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -101,6 +101,7 @@ files:
|
|
101
101
|
- lib/specinfra/command/solaris11.rb
|
102
102
|
- lib/specinfra/command/ubuntu.rb
|
103
103
|
- lib/specinfra/command/windows.rb
|
104
|
+
- lib/specinfra/command_result.rb
|
104
105
|
- lib/specinfra/configuration.rb
|
105
106
|
- lib/specinfra/helper.rb
|
106
107
|
- lib/specinfra/helper/backend.rb
|
@@ -111,6 +112,7 @@ files:
|
|
111
112
|
- lib/specinfra/helper/properties.rb
|
112
113
|
- lib/specinfra/properties.rb
|
113
114
|
- lib/specinfra/version.rb
|
115
|
+
- spec/backend/exec/build_command_spec.rb
|
114
116
|
- spec/backend/ssh/build_command_spec.rb
|
115
117
|
- spec/configuration_spec.rb
|
116
118
|
- spec/helper/backend_spec.rb
|
@@ -142,6 +144,7 @@ signing_key:
|
|
142
144
|
specification_version: 4
|
143
145
|
summary: Common layer for serverspec and configspec
|
144
146
|
test_files:
|
147
|
+
- spec/backend/exec/build_command_spec.rb
|
145
148
|
- spec/backend/ssh/build_command_spec.rb
|
146
149
|
- spec/configuration_spec.rb
|
147
150
|
- spec/helper/backend_spec.rb
|