specinfra 1.27.5 → 2.0.0.beta1
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 +18 -24
- data/lib/specinfra/backend/exec.rb +32 -48
- data/lib/specinfra/backend/powershell/support/find_iis_component.ps1 +5 -81
- data/lib/specinfra/backend/ssh.rb +9 -22
- data/lib/specinfra/command/arch.rb +4 -5
- data/lib/specinfra/command/base.rb +6 -35
- data/lib/specinfra/command/darwin.rb +0 -19
- data/lib/specinfra/command/debian.rb +2 -6
- data/lib/specinfra/command/freebsd.rb +0 -14
- data/lib/specinfra/command/linux.rb +1 -32
- data/lib/specinfra/command/openbsd.rb +2 -2
- data/lib/specinfra/command/redhat.rb +0 -4
- data/lib/specinfra/command/solaris.rb +2 -3
- data/lib/specinfra/command/ubuntu.rb +0 -14
- data/lib/specinfra/command/windows.rb +4 -81
- data/lib/specinfra/command.rb +0 -4
- data/lib/specinfra/configuration.rb +1 -9
- data/lib/specinfra/helper/detect_os.rb +7 -23
- data/lib/specinfra/helper/os.rb +0 -4
- data/lib/specinfra/version.rb +1 -1
- data/spec/backend/exec/build_command_spec.rb +89 -50
- data/spec/backend/ssh/build_command_spec.rb +91 -111
- data/spec/configuration_spec.rb +0 -5
- data/specinfra.gemspec +4 -2
- data/wercker.yml +14 -18
- metadata +34 -13
- data/lib/specinfra/backend/powershell/support/find_scheduled_task.ps1 +0 -7
- data/lib/specinfra/command/fedora.rb +0 -29
- data/lib/specinfra/command/nixos.rb +0 -28
- data/lib/specinfra/command/opensuse.rb +0 -14
- data/lib/specinfra/command/redhat7.rb +0 -9
- data/spec/helper/detect_os_spec.rb +0 -117
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0ebda9e1a8980f9cd098f5831d06e0a7cdce6d62
|
4
|
+
data.tar.gz: 9bf241f31f25c1f8e5ab0260f2a3461c8e45dd0a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 63aa54e8bd0578ed770798036e1f97b12868d37aefea6b163c28ee235435113d01b40d225eb03cac389d002ea4982d8e43531b292e7f1e34740a4c1574362d65
|
7
|
+
data.tar.gz: 7763ef61cc1fe078e44b0c4e879e2f0831ec8a67a16ab77e79ade0f57fef9fd7a4b2020811aca30260a247f2fdd4b65956256736acce0e7a267172c40384e35c
|
data/Rakefile
CHANGED
@@ -1,36 +1,30 @@
|
|
1
1
|
require "bundler/gem_tasks"
|
2
|
-
|
3
|
-
|
4
|
-
require "octorelease"
|
5
|
-
rescue LoadError
|
6
|
-
end
|
2
|
+
require "rspec/core/rake_task"
|
3
|
+
require "octorelease"
|
7
4
|
|
8
|
-
|
9
|
-
task :spec => 'spec:all'
|
5
|
+
task :spec => 'spec:all'
|
10
6
|
|
11
|
-
|
12
|
-
|
7
|
+
namespace :spec do
|
8
|
+
task :all => [ :helper, :backend, :configuration ]
|
13
9
|
|
14
|
-
|
15
|
-
|
16
|
-
|
10
|
+
RSpec::Core::RakeTask.new(:helper) do |t|
|
11
|
+
t.pattern = "spec/helper/*_spec.rb"
|
12
|
+
end
|
17
13
|
|
18
|
-
|
19
|
-
|
20
|
-
|
14
|
+
task :backend => 'backend:all'
|
15
|
+
namespace :backend do
|
16
|
+
backends = %w[exec ssh]
|
21
17
|
|
22
|
-
|
18
|
+
task :all => backends
|
23
19
|
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
end
|
20
|
+
backends.each do |backend|
|
21
|
+
RSpec::Core::RakeTask.new(backend) do |t|
|
22
|
+
t.pattern = "spec/backend/#{backend}/*_spec.rb"
|
28
23
|
end
|
29
24
|
end
|
25
|
+
end
|
30
26
|
|
31
|
-
|
32
|
-
|
33
|
-
end
|
27
|
+
RSpec::Core::RakeTask.new(:configuration) do |t|
|
28
|
+
t.pattern = "spec/configuration_spec.rb"
|
34
29
|
end
|
35
30
|
end
|
36
|
-
|
@@ -1,5 +1,6 @@
|
|
1
1
|
require 'singleton'
|
2
2
|
require 'fileutils'
|
3
|
+
require 'shellwords'
|
3
4
|
|
4
5
|
module SpecInfra
|
5
6
|
module Backend
|
@@ -33,22 +34,25 @@ module SpecInfra
|
|
33
34
|
end
|
34
35
|
|
35
36
|
def build_command(cmd)
|
37
|
+
shell = SpecInfra.configuration.shell || '/bin/sh'
|
38
|
+
cmd = cmd.shelljoin if cmd.is_a?(Array)
|
39
|
+
cmd = "#{shell.shellescape} -c #{cmd.shellescape}"
|
40
|
+
|
36
41
|
path = SpecInfra.configuration.path
|
37
42
|
if path
|
38
|
-
cmd = "env PATH=#{path}
|
39
|
-
cmd.gsub!(/(\&\&\s*!?\(?\s*)/, "\\1env PATH=#{path}:$PATH ")
|
40
|
-
cmd.gsub!(/(\|\|\s*!?\(?\s*)/, "\\1env PATH=#{path}:$PATH ")
|
43
|
+
cmd = "env PATH=#{path.shellescape}:\"$PATH\" #{cmd}"
|
41
44
|
end
|
45
|
+
|
42
46
|
cmd
|
43
47
|
end
|
44
48
|
|
45
49
|
def add_pre_command(cmd)
|
46
|
-
path = SpecInfra.configuration.path
|
47
50
|
if SpecInfra.configuration.pre_command
|
48
|
-
|
49
|
-
|
51
|
+
pre_cmd = build_command(SpecInfra.configuration.pre_command)
|
52
|
+
"#{pre_cmd} && #{cmd}"
|
53
|
+
else
|
54
|
+
cmd
|
50
55
|
end
|
51
|
-
cmd
|
52
56
|
end
|
53
57
|
|
54
58
|
def check_running(process)
|
@@ -181,38 +185,20 @@ module SpecInfra
|
|
181
185
|
|
182
186
|
def check_os
|
183
187
|
return SpecInfra.configuration.os if SpecInfra.configuration.os
|
184
|
-
|
185
|
-
# Fedora also has an /etc/redhat-release so the Fedora check must
|
186
|
-
# come before the RedHat check
|
187
|
-
if run_command('ls /etc/fedora-release').success?
|
188
|
-
line = run_command('cat /etc/redhat-release').stdout
|
189
|
-
if line =~ /release (\d[\d]*)/
|
190
|
-
release = $1
|
191
|
-
end
|
192
|
-
{ :family => 'Fedora', :release => release }
|
193
|
-
elsif run_command('ls /etc/redhat-release').success?
|
188
|
+
if run_command('ls /etc/redhat-release').success?
|
194
189
|
line = run_command('cat /etc/redhat-release').stdout
|
195
190
|
if line =~ /release (\d[\d.]*)/
|
196
191
|
release = $1
|
197
192
|
end
|
198
|
-
|
199
|
-
if release =~ /7./
|
200
|
-
{ :family => 'RedHat7', :release => release, :arch => arch }
|
201
|
-
else
|
202
|
-
{ :family => 'RedHat', :release => release, :arch => arch }
|
203
|
-
end
|
193
|
+
{ :family => 'RedHat', :release => release }
|
204
194
|
elsif run_command('ls /etc/system-release').success?
|
205
|
-
{ :family => 'RedHat', :release => nil
|
195
|
+
{ :family => 'RedHat', :release => nil } # Amazon Linux
|
206
196
|
elsif run_command('ls /etc/SuSE-release').success?
|
207
197
|
line = run_command('cat /etc/SuSE-release').stdout
|
208
198
|
if line =~ /SUSE Linux Enterprise Server (\d+)/
|
209
199
|
release = $1
|
210
|
-
family = 'SuSE'
|
211
|
-
elsif line =~ /openSUSE (\d+\.\d+|\d+)/
|
212
|
-
release = $1
|
213
|
-
family = 'OpenSUSE'
|
214
200
|
end
|
215
|
-
{ :family =>
|
201
|
+
{ :family => 'SuSE', :release => release }
|
216
202
|
elsif run_command('ls /etc/debian_version').success?
|
217
203
|
lsb_release = run_command("lsb_release -ir")
|
218
204
|
if lsb_release.success?
|
@@ -231,39 +217,37 @@ module SpecInfra
|
|
231
217
|
end
|
232
218
|
distro ||= 'Debian'
|
233
219
|
release ||= nil
|
234
|
-
{ :family => distro.strip, :release => release
|
220
|
+
{ :family => distro.strip, :release => release }
|
235
221
|
elsif run_command('ls /etc/gentoo-release').success?
|
236
|
-
{ :family => 'Gentoo', :release => nil
|
222
|
+
{ :family => 'Gentoo', :release => nil }
|
237
223
|
elsif run_command('ls /usr/lib/setup/Plamo-*').success?
|
238
|
-
{ :family => 'Plamo', :release => nil
|
239
|
-
elsif run_command('ls /var/run/current-system/sw').success?
|
240
|
-
{ :family => 'NixOS', :release => nil, :arch => arch }
|
224
|
+
{ :family => 'Plamo', :release => nil }
|
241
225
|
elsif run_command('uname -s').stdout =~ /AIX/i
|
242
|
-
{ :family => 'AIX', :release => nil
|
243
|
-
elsif (
|
244
|
-
if
|
245
|
-
{ :family => 'Solaris10', :release => nil
|
226
|
+
{ :family => 'AIX', :release => nil }
|
227
|
+
elsif (os = run_command('uname -sr').stdout) && os =~ /SunOS/i
|
228
|
+
if os =~ /5.10/
|
229
|
+
{ :family => 'Solaris10', :release => nil }
|
246
230
|
elsif run_command('grep -q "Oracle Solaris 11" /etc/release').success?
|
247
|
-
{ :family => 'Solaris11', :release => nil
|
231
|
+
{ :family => 'Solaris11', :release => nil }
|
248
232
|
elsif run_command('grep -q SmartOS /etc/release').success?
|
249
|
-
{ :family => 'SmartOS', :release => nil
|
233
|
+
{ :family => 'SmartOS', :release => nil }
|
250
234
|
else
|
251
|
-
{ :family => 'Solaris', :release => nil
|
235
|
+
{ :family => 'Solaris', :release => nil }
|
252
236
|
end
|
253
237
|
elsif run_command('uname -s').stdout =~ /Darwin/i
|
254
238
|
{ :family => 'Darwin', :release => nil }
|
255
|
-
elsif (
|
256
|
-
if
|
257
|
-
{ :family => 'FreeBSD10', :release => nil
|
239
|
+
elsif (os = run_command('uname -sr').stdout) && os =~ /FreeBSD/i
|
240
|
+
if os =~ /10./
|
241
|
+
{ :family => 'FreeBSD10', :release => nil }
|
258
242
|
else
|
259
|
-
{ :family => 'FreeBSD', :release => nil
|
243
|
+
{ :family => 'FreeBSD', :release => nil }
|
260
244
|
end
|
261
245
|
elsif run_command('uname -sr').stdout =~ /Arch/i
|
262
|
-
{ :family => 'Arch', :release => nil
|
246
|
+
{ :family => 'Arch', :release => nil }
|
263
247
|
elsif run_command('uname -s').stdout =~ /OpenBSD/i
|
264
|
-
{ :family => 'OpenBSD', :release => nil
|
248
|
+
{ :family => 'OpenBSD', :release => nil }
|
265
249
|
else
|
266
|
-
{ :family => 'Base', :release => nil
|
250
|
+
{ :family => 'Base', :release => nil }
|
267
251
|
end
|
268
252
|
end
|
269
253
|
|
@@ -1,89 +1,13 @@
|
|
1
1
|
function FindIISWebsite
|
2
2
|
{
|
3
3
|
param($name)
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
Try {
|
8
|
-
Get-Item "IIS:\Sites\$name" -Erroraction silentlycontinue
|
9
|
-
}
|
10
|
-
Catch [System.IO.FileNotFoundException] {
|
11
|
-
Get-Item "IIS:\Sites\$name" -Erroraction silentlycontinue
|
12
|
-
}
|
4
|
+
import-module WebAdministration
|
5
|
+
Get-Website | Where { $_.name -match $name }
|
13
6
|
}
|
14
7
|
|
15
8
|
function FindIISAppPool
|
16
9
|
{
|
17
10
|
param($name)
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
Get-Item "IIS:\AppPools\$name" -Erroraction silentlycontinue
|
22
|
-
}
|
23
|
-
Catch [System.IO.FileNotFoundException] {
|
24
|
-
Get-Item "IIS:\AppPools\$name" -Erroraction silentlycontinue
|
25
|
-
|
26
|
-
}
|
27
|
-
}
|
28
|
-
|
29
|
-
function FindSiteBindings
|
30
|
-
{
|
31
|
-
param($name, $protocol, $hostHeader, $port, $ipAddress)
|
32
|
-
|
33
|
-
Import-Module WebAdministration
|
34
|
-
Try {
|
35
|
-
Get-WebBinding -Name $name -Protocol $protocol -HostHeader $hostHeader -Port $port -IPAddress $ipAddress
|
36
|
-
}
|
37
|
-
Catch [System.IO.FileNotFoundException] {
|
38
|
-
Get-WebBinding -Name $name -Protocol $protocol -HostHeader $hostHeader -Port $port -IPAddress $ipAddress
|
39
|
-
}
|
40
|
-
}
|
41
|
-
|
42
|
-
function FindSiteVirtualDir
|
43
|
-
{
|
44
|
-
param($name, $vdir, $path)
|
45
|
-
|
46
|
-
Import-Module WebAdministration
|
47
|
-
|
48
|
-
$webVirtDirPath = [string]::Format('IIS:\Sites\{0}\{1}',$name, $vdir);
|
49
|
-
if (Test-Path $webVirtDirPath)
|
50
|
-
{
|
51
|
-
if ([string]::IsNullOrEmpty($path))
|
52
|
-
{
|
53
|
-
$true
|
54
|
-
}
|
55
|
-
else
|
56
|
-
{
|
57
|
-
(Get-Item $webVirtDirPath).physicalPath -eq $path
|
58
|
-
}
|
59
|
-
}
|
60
|
-
else
|
61
|
-
{
|
62
|
-
$false
|
63
|
-
}
|
64
|
-
}
|
65
|
-
|
66
|
-
function FindSiteApplication
|
67
|
-
{
|
68
|
-
param($name, $app, $pool, $physicalPath)
|
69
|
-
|
70
|
-
Import-Module WebAdministration
|
71
|
-
|
72
|
-
$path = "IIS:\Sites\${name}\${app}"
|
73
|
-
$result = $false
|
74
|
-
if (Test-Path $path)
|
75
|
-
{
|
76
|
-
$result = $true
|
77
|
-
if ([string]::IsNullOrEmpty($pool) -eq $false)
|
78
|
-
{
|
79
|
-
$result = $result -and (Get-Item $path).applicationPool -eq $pool
|
80
|
-
}
|
81
|
-
|
82
|
-
if ([string]::IsNullOrEmpty($physicalPath) -eq $false)
|
83
|
-
{
|
84
|
-
$result = $result -and (Get-Item $path).physicalPath -eq $physicalPath
|
85
|
-
}
|
86
|
-
}
|
87
|
-
|
88
|
-
$result
|
89
|
-
}
|
11
|
+
import-module WebAdministration
|
12
|
+
Get-Item "IIS:\AppPools\$name" -Erroraction silentlycontinue
|
13
|
+
}
|
@@ -24,19 +24,6 @@ module SpecInfra
|
|
24
24
|
disable_sudo = SpecInfra.configuration.disable_sudo
|
25
25
|
if user != 'root' && !disable_sudo
|
26
26
|
cmd = "#{sudo} #{cmd}"
|
27
|
-
cmd.gsub!(/(\&\&\s*!?\(?\s*)/, "\\1#{sudo} ")
|
28
|
-
cmd.gsub!(/(\|\|\s*!?\(?\s*)/, "\\1#{sudo} ")
|
29
|
-
end
|
30
|
-
cmd
|
31
|
-
end
|
32
|
-
|
33
|
-
def add_pre_command(cmd)
|
34
|
-
cmd = super(cmd)
|
35
|
-
user = SpecInfra.configuration.ssh.options[:user]
|
36
|
-
pre_command = SpecInfra.configuration.pre_command
|
37
|
-
disable_sudo = SpecInfra.configuration.disable_sudo
|
38
|
-
if pre_command && user != 'root' && !disable_sudo
|
39
|
-
cmd = "#{sudo} #{cmd}"
|
40
27
|
end
|
41
28
|
cmd
|
42
29
|
end
|
@@ -58,7 +45,6 @@ module SpecInfra
|
|
58
45
|
exit_status = nil
|
59
46
|
exit_signal = nil
|
60
47
|
pass_prompt = SpecInfra.configuration.pass_prompt || /^\[sudo\] password for/
|
61
|
-
retry_prompt = /^Sorry, try again/
|
62
48
|
|
63
49
|
ssh = SpecInfra.configuration.ssh
|
64
50
|
ssh.open_channel do |channel|
|
@@ -70,9 +56,7 @@ module SpecInfra
|
|
70
56
|
channel.exec("#{command}") do |ch, success|
|
71
57
|
abort "FAILED: couldn't execute command (ssh.channel.exec)" if !success
|
72
58
|
channel.on_data do |ch, data|
|
73
|
-
if data.match
|
74
|
-
abort 'Wrong sudo password! Please confirm your password.'
|
75
|
-
elsif data.match pass_prompt
|
59
|
+
if data.match pass_prompt
|
76
60
|
channel.send_data "#{SpecInfra.configuration.sudo_password}\n"
|
77
61
|
else
|
78
62
|
stdout_data += data
|
@@ -81,7 +65,7 @@ module SpecInfra
|
|
81
65
|
|
82
66
|
channel.on_extended_data do |ch, type, data|
|
83
67
|
if data.match /you must have a tty to run sudo/
|
84
|
-
abort 'Please set "SpecInfra.configuration.request_pty = true" or "c.request_pty = true" in your spec_helper.rb or other
|
68
|
+
abort 'Please set "SpecInfra.configuration.request_pty = true" or "c.request_pty = true" in your spec_helper.rb or other appropreate file.'
|
85
69
|
end
|
86
70
|
|
87
71
|
if data.match /^sudo: no tty present and no askpass program specified/
|
@@ -105,16 +89,19 @@ module SpecInfra
|
|
105
89
|
end
|
106
90
|
|
107
91
|
def sudo
|
108
|
-
sudo_path = SpecInfra.configuration.sudo_path
|
109
|
-
|
92
|
+
if sudo_path = SpecInfra.configuration.sudo_path
|
93
|
+
sudo_path += '/sudo'
|
94
|
+
else
|
95
|
+
sudo_path = 'sudo'
|
96
|
+
end
|
110
97
|
|
111
98
|
sudo_options = SpecInfra.configuration.sudo_options
|
112
99
|
if sudo_options
|
113
|
-
sudo_options = sudo_options.
|
100
|
+
sudo_options = sudo_options.shelljoin if sudo_options.is_a?(Array)
|
114
101
|
sudo_options = ' ' + sudo_options
|
115
102
|
end
|
116
103
|
|
117
|
-
"#{sudo_path}
|
104
|
+
"#{sudo_path.shellescape}#{sudo_options}"
|
118
105
|
end
|
119
106
|
end
|
120
107
|
end
|
@@ -1,4 +1,3 @@
|
|
1
|
-
# encoding: utf-8
|
2
1
|
module SpecInfra
|
3
2
|
module Command
|
4
3
|
class Arch < Linux
|
@@ -8,7 +7,7 @@ module SpecInfra
|
|
8
7
|
|
9
8
|
def check_enabled(service, level)
|
10
9
|
level = "multi-user.target" if level == 3
|
11
|
-
"systemctl --plain list-dependencies #{level} | grep '
|
10
|
+
"systemctl --plain list-dependencies #{level} | grep '^#{escape(service)}.service$'"
|
12
11
|
end
|
13
12
|
|
14
13
|
def check_running(service)
|
@@ -17,12 +16,12 @@ module SpecInfra
|
|
17
16
|
|
18
17
|
def check_installed(package,version=nil)
|
19
18
|
if version
|
20
|
-
|
21
|
-
"pacman -Q #{escape(package)} | awk '{print $2}' | grep '#{grep}'"
|
19
|
+
"pacman -Q | grep #{escape(package)} #{espace(version)}"
|
22
20
|
else
|
23
|
-
"pacman -Q #{escape(package)}"
|
21
|
+
"pacman -Q | grep #{escape(package)}"
|
24
22
|
end
|
25
23
|
end
|
24
|
+
|
26
25
|
def sync_repos
|
27
26
|
"pacman -Syy"
|
28
27
|
end
|
@@ -29,8 +29,8 @@ module SpecInfra
|
|
29
29
|
end
|
30
30
|
|
31
31
|
def check_mounted(path)
|
32
|
-
regexp = "on #{path}
|
33
|
-
"mount | grep --
|
32
|
+
regexp = "on #{path}"
|
33
|
+
"mount | grep -w -- #{escape(regexp)}"
|
34
34
|
end
|
35
35
|
|
36
36
|
def check_routing_table(destination)
|
@@ -59,14 +59,6 @@ module SpecInfra
|
|
59
59
|
"test -f #{escape(file)}"
|
60
60
|
end
|
61
61
|
|
62
|
-
def get_file_mtime(file)
|
63
|
-
"stat -c %Y #{escape(file)}"
|
64
|
-
end
|
65
|
-
|
66
|
-
def get_file_size(file)
|
67
|
-
"stat -c %s #{escape(file)}"
|
68
|
-
end
|
69
|
-
|
70
62
|
def check_socket(file)
|
71
63
|
"test -S #{escape(file)}"
|
72
64
|
end
|
@@ -80,7 +72,7 @@ module SpecInfra
|
|
80
72
|
end
|
81
73
|
|
82
74
|
def check_group(group)
|
83
|
-
"getent group #{escape(group)}"
|
75
|
+
"getent group | grep -wq -- #{escape(group)}"
|
84
76
|
end
|
85
77
|
|
86
78
|
def check_installed(package, version=nil)
|
@@ -129,10 +121,6 @@ module SpecInfra
|
|
129
121
|
"ps aux | grep -w -- #{escape(process)} | grep -qv grep"
|
130
122
|
end
|
131
123
|
|
132
|
-
def check_process_count(process, count)
|
133
|
-
"test $(ps aux | grep -w -- #{escape(process)} | grep -v grep | wc -l) -eq #{escape(count)}"
|
134
|
-
end
|
135
|
-
|
136
124
|
def get_process(process, opts)
|
137
125
|
"ps -C #{escape(process)} -o #{opts[:format]} | head -1"
|
138
126
|
end
|
@@ -142,11 +130,11 @@ module SpecInfra
|
|
142
130
|
end
|
143
131
|
|
144
132
|
def check_file_contain_with_regexp(file, expected_pattern)
|
145
|
-
"grep -
|
133
|
+
"grep -q -- #{escape(expected_pattern)} #{escape(file)}"
|
146
134
|
end
|
147
135
|
|
148
136
|
def check_file_contain_with_fixed_strings(file, expected_pattern)
|
149
|
-
"grep -
|
137
|
+
"grep -qF -- #{escape(expected_pattern)} #{escape(file)}"
|
150
138
|
end
|
151
139
|
|
152
140
|
def check_file_checksum(file, expected)
|
@@ -168,7 +156,6 @@ module SpecInfra
|
|
168
156
|
from ||= '1'
|
169
157
|
to ||= '$'
|
170
158
|
sed = "sed -n #{escape(from)},#{escape(to)}p #{escape(file)}"
|
171
|
-
sed += " | sed -n 1,#{escape(to)}p" if from != '1' and to != '$'
|
172
159
|
checker_with_regexp = check_file_contain_with_regexp("-", expected_pattern)
|
173
160
|
checker_with_fixed = check_file_contain_with_fixed_strings("-", expected_pattern)
|
174
161
|
"#{sed} | #{checker_with_regexp} || #{sed} | #{checker_with_fixed}"
|
@@ -201,7 +188,7 @@ module SpecInfra
|
|
201
188
|
end
|
202
189
|
|
203
190
|
def check_cron_entry(user, entry)
|
204
|
-
entry_escaped = entry.gsub(/\*/, '\\*')
|
191
|
+
entry_escaped = entry.gsub(/\*/, '\\*')
|
205
192
|
if user.nil?
|
206
193
|
"crontab -l | grep -v \"#\" -- | grep -- #{escape(entry_escaped)}"
|
207
194
|
else
|
@@ -258,10 +245,6 @@ module SpecInfra
|
|
258
245
|
"id #{escape(user)} | awk '{print $3}' | grep -- #{escape(group)}"
|
259
246
|
end
|
260
247
|
|
261
|
-
def check_primary_group(group)
|
262
|
-
raise NotImplementedError.new
|
263
|
-
end
|
264
|
-
|
265
248
|
def check_gid(group, gid)
|
266
249
|
regexp = "^#{group}"
|
267
250
|
"getent group | grep -w -- #{escape(regexp)} | cut -f 3 -d ':' | grep -w -- #{escape(gid)}"
|
@@ -289,10 +272,6 @@ module SpecInfra
|
|
289
272
|
raise NotImplementedError.new
|
290
273
|
end
|
291
274
|
|
292
|
-
def check_ip6tables_rule(rule, table=nil, chain=nil)
|
293
|
-
raise NotImplementedError.new
|
294
|
-
end
|
295
|
-
|
296
275
|
def check_zfs(zfs, property=nil, value=nil)
|
297
276
|
raise NotImplementedError.new
|
298
277
|
end
|
@@ -332,10 +311,6 @@ module SpecInfra
|
|
332
311
|
def check_ipv4_address(interface, ip_address)
|
333
312
|
raise NotImplementedError.new
|
334
313
|
end
|
335
|
-
|
336
|
-
def check_ipv6_address(interface, ip_address)
|
337
|
-
raise NotImplementedError.new
|
338
|
-
end
|
339
314
|
|
340
315
|
def check_mail_alias(recipient, target)
|
341
316
|
target = "[[:space:]]#{target}"
|
@@ -354,10 +329,6 @@ module SpecInfra
|
|
354
329
|
raise NotImplementedError.new
|
355
330
|
end
|
356
331
|
|
357
|
-
def check_immutable(file)
|
358
|
-
raise NotImplementedError.new
|
359
|
-
end
|
360
|
-
|
361
332
|
def get_package_version(package, opts=nil)
|
362
333
|
raise NotImplementedError.new
|
363
334
|
end
|
@@ -1,19 +1,6 @@
|
|
1
1
|
module SpecInfra
|
2
2
|
module Command
|
3
3
|
class Darwin < Base
|
4
|
-
def check_enabled(service, level=nil)
|
5
|
-
"launchctl list | grep #{escape(service)}"
|
6
|
-
end
|
7
|
-
|
8
|
-
def check_running(service)
|
9
|
-
"launchctl list | grep #{escape(service)} | grep -E '^[0-9]+'"
|
10
|
-
end
|
11
|
-
|
12
|
-
def check_listening(port)
|
13
|
-
regexp = ":#{port} "
|
14
|
-
"lsof -nP -iTCP -sTCP:LISTEN | grep -- #{escape(regexp)}"
|
15
|
-
end
|
16
|
-
|
17
4
|
def check_file_md5checksum(file, expected)
|
18
5
|
"openssl md5 #{escape(file)} | cut -d'=' -f2 | cut -c 2- | grep -E ^#{escape(expected)}$"
|
19
6
|
end
|
@@ -58,12 +45,6 @@ module SpecInfra
|
|
58
45
|
end
|
59
46
|
cmd
|
60
47
|
end
|
61
|
-
alias :check_installed_by_homebrew :check_installed
|
62
|
-
|
63
|
-
def check_installed_by_pkgutil(package, version=nil)
|
64
|
-
cmd = "pkgutil --pkg-info #{package}"
|
65
|
-
cmd = "#{cmd} | grep '^version: #{escape(version)}'" if version
|
66
|
-
end
|
67
48
|
|
68
49
|
def install(package)
|
69
50
|
cmd = "brew install '#{package}'"
|
@@ -2,12 +2,8 @@ module SpecInfra
|
|
2
2
|
module Command
|
3
3
|
class Debian < Linux
|
4
4
|
def check_enabled(service, level=3)
|
5
|
-
#
|
6
|
-
#
|
7
|
-
cmd = "if [ -d /run/systemd/system ]; then systemctl --plain list-dependencies runlevel#{level}.target | grep '^#{escape(service)}.service$'; "
|
8
|
-
cmd += "else ls /etc/rc#{level}.d/ | grep -- '^S..#{escape(service)}' || grep 'start on' /etc/init/#{escape(service)}.conf; "
|
9
|
-
cmd += "fi"
|
10
|
-
"sh -c \"#{cmd}\""
|
5
|
+
# Until everything uses Upstart, this needs an OR.
|
6
|
+
"ls /etc/rc#{level}.d/ | grep -- '^S..#{escape(service)}' || grep 'start on' /etc/init/#{escape(service)}.conf"
|
11
7
|
end
|
12
8
|
|
13
9
|
def check_installed(package, version=nil)
|
@@ -23,20 +23,6 @@ module SpecInfra
|
|
23
23
|
"stat -f%Lp #{escape(file)} | grep -- #{escape(regexp)}"
|
24
24
|
end
|
25
25
|
|
26
|
-
def check_owner(file, owner)
|
27
|
-
regexp = "^#{owner}$"
|
28
|
-
"stat -f%Su #{escape(file)} | grep -- #{escape(regexp)}"
|
29
|
-
end
|
30
|
-
|
31
|
-
def check_grouped(file, group)
|
32
|
-
regexp = "^#{group}$"
|
33
|
-
"stat -f%Sg #{escape(file)} | grep -- #{escape(regexp)}"
|
34
|
-
end
|
35
|
-
|
36
|
-
def check_link(link, target)
|
37
|
-
"stat -f%Y #{escape(link)} | grep -- #{escape(target)}"
|
38
|
-
end
|
39
|
-
|
40
26
|
def get_mode(file)
|
41
27
|
"stat -f%Lp #{escape(file)}"
|
42
28
|
end
|
@@ -17,18 +17,6 @@ module SpecInfra
|
|
17
17
|
cmd
|
18
18
|
end
|
19
19
|
|
20
|
-
def check_ip6tables_rule(rule, table=nil, chain=nil)
|
21
|
-
cmd = "ip6tables"
|
22
|
-
cmd += " -t #{escape(table)}" if table
|
23
|
-
cmd += " -S"
|
24
|
-
cmd += " #{escape(chain)}" if chain
|
25
|
-
cmd += " | grep -- #{escape(rule)}"
|
26
|
-
cmd += " || ip6tables-save"
|
27
|
-
cmd += " -t #{escape(table)}" if table
|
28
|
-
cmd += " | grep -- #{escape(rule)}"
|
29
|
-
cmd
|
30
|
-
end
|
31
|
-
|
32
20
|
def check_selinux(mode)
|
33
21
|
cmd = ""
|
34
22
|
cmd += "test ! -f /etc/selinux/config || (" if mode == "disabled"
|
@@ -56,17 +44,6 @@ module SpecInfra
|
|
56
44
|
ip_address.gsub!(".", "\\.")
|
57
45
|
"ip addr show #{interface} | grep 'inet #{ip_address}'"
|
58
46
|
end
|
59
|
-
|
60
|
-
def check_ipv6_address(interface, ip_address)
|
61
|
-
ip_address = ip_address.dup
|
62
|
-
if ip_address =~ /\/\d+$/
|
63
|
-
ip_address << " "
|
64
|
-
else
|
65
|
-
ip_address << "/"
|
66
|
-
end
|
67
|
-
ip_address.downcase!
|
68
|
-
"ip addr show #{interface} | grep 'inet6 #{ip_address}'"
|
69
|
-
end
|
70
47
|
|
71
48
|
def check_zfs(zfs, property=nil)
|
72
49
|
if property.nil?
|
@@ -86,15 +63,7 @@ module SpecInfra
|
|
86
63
|
end
|
87
64
|
|
88
65
|
def check_container_running(container)
|
89
|
-
"lxc-info -n #{escape(container)} -
|
90
|
-
end
|
91
|
-
|
92
|
-
def check_attribute(file, attribute)
|
93
|
-
"lsattr -d #{escape(file)} 2>&1 | awk '$1~/^-*#{escape(attribute)}-*$/ {exit 0} {exit 1}'"
|
94
|
-
end
|
95
|
-
|
96
|
-
def check_immutable(file)
|
97
|
-
check_attribute(file, 'i')
|
66
|
+
"lxc-info -n #{escape(container)} -t RUNNING"
|
98
67
|
end
|
99
68
|
|
100
69
|
end
|
@@ -2,7 +2,7 @@ module SpecInfra
|
|
2
2
|
module Command
|
3
3
|
class OpenBSD < Base
|
4
4
|
def check_enabled(service, level=3)
|
5
|
-
"
|
5
|
+
"egrep '(#{escape(service)}_flags=|^pkg_scripts=\"(.*)#{escape(service)}(.*)\")' /etc/rc.conf.local | grep -v \=NO"
|
6
6
|
end
|
7
7
|
|
8
8
|
def check_file_md5checksum(file, expected)
|
@@ -76,7 +76,7 @@ module SpecInfra
|
|
76
76
|
# end
|
77
77
|
|
78
78
|
def check_running(service)
|
79
|
-
"
|
79
|
+
"/etc/rc.d/#{escape(service)} status"
|
80
80
|
end
|
81
81
|
|
82
82
|
def get_mode(file)
|
@@ -6,10 +6,6 @@ module SpecInfra
|
|
6
6
|
"runuser -s /bin/sh -c \"test -#{access} #{file}\" #{user}"
|
7
7
|
end
|
8
8
|
|
9
|
-
def check_belonging_primary_group(user, group)
|
10
|
-
"id -gn #{escape(user)}| grep ^#{escape(group)}$"
|
11
|
-
end
|
12
|
-
|
13
9
|
def check_enabled(service, level=3)
|
14
10
|
"chkconfig --list #{escape(service)} | grep #{level}:on"
|
15
11
|
end
|