specinfra 2.0.0.beta8 → 2.0.0.beta9
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/lib/specinfra/backend/base.rb +8 -4
- data/lib/specinfra/backend/exec.rb +0 -128
- data/lib/specinfra/command/processor.rb +139 -0
- data/lib/specinfra/version.rb +1 -1
- data/wercker.yml +0 -16
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 572f8250ba4ca99acbaa3740b61bb646103cd041
|
4
|
+
data.tar.gz: d8cec18e50e69cd12c3186dbcbc7835e8896df93
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7250feadcc58c2e9672a5e5580674b2283cbb2c5109ee8e3c7b3ec330e83985d3494d39c332c8ea1825ebd211f82e7a1ddafae6c7468a2c43dc94cdfa3a84518
|
7
|
+
data.tar.gz: a8e345e42bb720faa2d8001e17513d2b76ccc0c3135884aa0beff203f9681d04542f169b5101fbc7ff0a96925d855092f0f7f70c51cf9562713da17b6f6910ab
|
@@ -1,5 +1,6 @@
|
|
1
1
|
require 'singleton'
|
2
2
|
require 'specinfra/command_result'
|
3
|
+
require 'specinfra/command/processor'
|
3
4
|
|
4
5
|
module Specinfra
|
5
6
|
module Backend
|
@@ -22,12 +23,15 @@ module Specinfra
|
|
22
23
|
run_command(commands.send(cmd, *args)).success?
|
23
24
|
end
|
24
25
|
|
25
|
-
# Default action is to call check_zero with args
|
26
26
|
def method_missing(meth, *args, &block)
|
27
|
-
if
|
28
|
-
|
27
|
+
if os[:family] == 'windows'
|
28
|
+
if meth.to_s =~ /^check/
|
29
|
+
backend.check_zero(meth, *args)
|
30
|
+
else
|
31
|
+
backend.run_command(commands.send(meth, *args))
|
32
|
+
end
|
29
33
|
else
|
30
|
-
|
34
|
+
Specinfra::Command::Processor.send(meth, *args)
|
31
35
|
end
|
32
36
|
end
|
33
37
|
end
|
@@ -55,134 +55,6 @@ module Specinfra
|
|
55
55
|
end
|
56
56
|
end
|
57
57
|
|
58
|
-
def check_service_is_running(service)
|
59
|
-
ret = run_command(commands.check_service_is_running(service))
|
60
|
-
|
61
|
-
# In Ubuntu, some services are under upstart and "service foo status" returns
|
62
|
-
# exit status 0 even though they are stopped.
|
63
|
-
# So return false if stdout contains "stopped/waiting".
|
64
|
-
return false if ret.stdout =~ /stopped\/waiting/
|
65
|
-
|
66
|
-
# If the service is not registered, check by ps command
|
67
|
-
if ret.exit_status == 1
|
68
|
-
ret = run_command(commands.check_process_is_running(service))
|
69
|
-
end
|
70
|
-
|
71
|
-
ret.success?
|
72
|
-
end
|
73
|
-
|
74
|
-
def check_service_is_monitored_by_monit(process)
|
75
|
-
ret = run_command(commands.check_service_is_monitored_by_monit(process))
|
76
|
-
return false unless ret.stdout != nil && ret.success?
|
77
|
-
|
78
|
-
retlines = ret.stdout.split(/[\r\n]+/).map(&:strip)
|
79
|
-
proc_index = retlines.index("Process '#{process}'")
|
80
|
-
return false unless proc_index
|
81
|
-
|
82
|
-
retlines[proc_index+2].match(/\Amonitoring status\s+monitored\Z/i) != nil
|
83
|
-
end
|
84
|
-
|
85
|
-
def check_file_is_readable(file, by_whom)
|
86
|
-
mode = sprintf('%04s',run_command(commands.get_file_mode(file)).stdout.strip)
|
87
|
-
mode = mode.split('')
|
88
|
-
mode_octal = mode[0].to_i * 512 + mode[1].to_i * 64 + mode[2].to_i * 8 + mode[3].to_i * 1
|
89
|
-
case by_whom
|
90
|
-
when nil
|
91
|
-
mode_octal & 0444 != 0
|
92
|
-
when 'owner'
|
93
|
-
mode_octal & 0400 != 0
|
94
|
-
when 'group'
|
95
|
-
mode_octal & 0040 != 0
|
96
|
-
when 'others'
|
97
|
-
mode_octal & 0004 != 0
|
98
|
-
end
|
99
|
-
end
|
100
|
-
|
101
|
-
def check_file_is_writable(file, by_whom)
|
102
|
-
mode = sprintf('%04s',run_command(commands.get_file_mode(file)).stdout.strip)
|
103
|
-
mode = mode.split('')
|
104
|
-
mode_octal = mode[0].to_i * 512 + mode[1].to_i * 64 + mode[2].to_i * 8 + mode[3].to_i * 1
|
105
|
-
case by_whom
|
106
|
-
when nil
|
107
|
-
mode_octal & 0222 != 0
|
108
|
-
when 'owner'
|
109
|
-
mode_octal & 0200 != 0
|
110
|
-
when 'group'
|
111
|
-
mode_octal & 0020 != 0
|
112
|
-
when 'others'
|
113
|
-
mode_octal & 0002 != 0
|
114
|
-
end
|
115
|
-
end
|
116
|
-
|
117
|
-
def check_file_is_executable(file, by_whom)
|
118
|
-
mode = sprintf('%04s',run_command(commands.get_file_mode(file)).stdout.strip)
|
119
|
-
mode = mode.split('')
|
120
|
-
mode_octal = mode[0].to_i * 512 + mode[1].to_i * 64 + mode[2].to_i * 8 + mode[3].to_i * 1
|
121
|
-
case by_whom
|
122
|
-
when nil
|
123
|
-
mode_octal & 0111 != 0
|
124
|
-
when 'owner'
|
125
|
-
mode_octal & 0100 != 0
|
126
|
-
when 'group'
|
127
|
-
mode_octal & 0010 != 0
|
128
|
-
when 'others'
|
129
|
-
mode_octal & 0001 != 0
|
130
|
-
end
|
131
|
-
end
|
132
|
-
|
133
|
-
def check_file_is_mounted(path, expected_attr, only_with)
|
134
|
-
ret = run_command(commands.check_file_is_mounted(path))
|
135
|
-
if expected_attr.nil? || ret.failure?
|
136
|
-
return ret.success?
|
137
|
-
end
|
138
|
-
|
139
|
-
mount = ret.stdout.scan(/\S+/)
|
140
|
-
actual_attr = { :device => mount[0], :type => mount[4] }
|
141
|
-
mount[5].gsub(/\(|\)/, '').split(',').each do |option|
|
142
|
-
name, val = option.split('=')
|
143
|
-
if val.nil?
|
144
|
-
actual_attr[name.to_sym] = true
|
145
|
-
else
|
146
|
-
val = val.to_i if val.match(/^\d+$/)
|
147
|
-
actual_attr[name.to_sym] = val
|
148
|
-
end
|
149
|
-
end
|
150
|
-
|
151
|
-
if ! expected_attr[:options].nil?
|
152
|
-
expected_attr.merge!(expected_attr[:options])
|
153
|
-
expected_attr.delete(:options)
|
154
|
-
end
|
155
|
-
|
156
|
-
if only_with
|
157
|
-
actual_attr == expected_attr
|
158
|
-
else
|
159
|
-
expected_attr.each do |key, val|
|
160
|
-
return false if actual_attr[key] != val
|
161
|
-
end
|
162
|
-
true
|
163
|
-
end
|
164
|
-
end
|
165
|
-
|
166
|
-
def check_routing_table_has_entry(expected_attr)
|
167
|
-
return false if ! expected_attr[:destination]
|
168
|
-
ret = run_command(commands.check_routing_table_has_entry(expected_attr[:destination]))
|
169
|
-
return false if ret.failure?
|
170
|
-
|
171
|
-
ret.stdout.gsub!(/\r\n/, "\n")
|
172
|
-
|
173
|
-
ret.stdout =~ /^(\S+)(?: via (\S+))? dev (\S+).+\n(?:default via (\S+))?/
|
174
|
-
actual_attr = {
|
175
|
-
:destination => $1,
|
176
|
-
:gateway => $2 ? $2 : $4,
|
177
|
-
:interface => expected_attr[:interface] ? $3 : nil
|
178
|
-
}
|
179
|
-
|
180
|
-
expected_attr.each do |key, val|
|
181
|
-
return false if actual_attr[key] != val
|
182
|
-
end
|
183
|
-
true
|
184
|
-
end
|
185
|
-
|
186
58
|
def copy_file(from, to)
|
187
59
|
begin
|
188
60
|
FileUtils.cp(from, to)
|
@@ -0,0 +1,139 @@
|
|
1
|
+
module Specinfra::Command
|
2
|
+
class Processor
|
3
|
+
def self.method_missing(meth, *args, &block)
|
4
|
+
if meth.to_s =~ /^check/
|
5
|
+
backend.check_zero(meth, *args)
|
6
|
+
else
|
7
|
+
backend.run_command(commands.send(meth, *args))
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
def self.check_service_is_running(service)
|
12
|
+
ret = backend.run_command(commands.check_service_is_running(service))
|
13
|
+
|
14
|
+
# In Ubuntu, some services are under upstart and "service foo status" returns
|
15
|
+
# exit status 0 even though they are stopped.
|
16
|
+
# So return false if stdout contains "stopped/waiting".
|
17
|
+
return false if ret.stdout =~ /stopped\/waiting/
|
18
|
+
|
19
|
+
# If the service is not registered, check by ps command
|
20
|
+
if ret.exit_status == 1
|
21
|
+
ret = backend.run_command(commands.check_process_is_running(service))
|
22
|
+
end
|
23
|
+
|
24
|
+
ret.success?
|
25
|
+
end
|
26
|
+
|
27
|
+
def self.check_service_is_monitored_by_monit(process)
|
28
|
+
ret = backend.run_command(commands.check_service_is_monitored_by_monit(process))
|
29
|
+
return false unless ret.stdout != nil && ret.success?
|
30
|
+
|
31
|
+
retlines = ret.stdout.split(/[\r\n]+/).map(&:strip)
|
32
|
+
proc_index = retlines.index("Process '#{process}'")
|
33
|
+
return false unless proc_index
|
34
|
+
|
35
|
+
retlines[proc_index+2].match(/\Amonitoring status\s+monitored\Z/i) != nil
|
36
|
+
end
|
37
|
+
|
38
|
+
def self.check_file_is_readable(file, by_whom)
|
39
|
+
mode = sprintf('%04s',backend.run_command(commands.get_file_mode(file)).stdout.strip)
|
40
|
+
mode = mode.split('')
|
41
|
+
mode_octal = mode[0].to_i * 512 + mode[1].to_i * 64 + mode[2].to_i * 8 + mode[3].to_i * 1
|
42
|
+
case by_whom
|
43
|
+
when nil
|
44
|
+
mode_octal & 0444 != 0
|
45
|
+
when 'owner'
|
46
|
+
mode_octal & 0400 != 0
|
47
|
+
when 'group'
|
48
|
+
mode_octal & 0040 != 0
|
49
|
+
when 'others'
|
50
|
+
mode_octal & 0004 != 0
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
def self.check_file_is_writable(file, by_whom)
|
55
|
+
mode = sprintf('%04s',backend.run_command(commands.get_file_mode(file)).stdout.strip)
|
56
|
+
mode = mode.split('')
|
57
|
+
mode_octal = mode[0].to_i * 512 + mode[1].to_i * 64 + mode[2].to_i * 8 + mode[3].to_i * 1
|
58
|
+
case by_whom
|
59
|
+
when nil
|
60
|
+
mode_octal & 0222 != 0
|
61
|
+
when 'owner'
|
62
|
+
mode_octal & 0200 != 0
|
63
|
+
when 'group'
|
64
|
+
mode_octal & 0020 != 0
|
65
|
+
when 'others'
|
66
|
+
mode_octal & 0002 != 0
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
def self.check_file_is_executable(file, by_whom)
|
71
|
+
mode = sprintf('%04s',backend.run_command(commands.get_file_mode(file)).stdout.strip)
|
72
|
+
mode = mode.split('')
|
73
|
+
mode_octal = mode[0].to_i * 512 + mode[1].to_i * 64 + mode[2].to_i * 8 + mode[3].to_i * 1
|
74
|
+
case by_whom
|
75
|
+
when nil
|
76
|
+
mode_octal & 0111 != 0
|
77
|
+
when 'owner'
|
78
|
+
mode_octal & 0100 != 0
|
79
|
+
when 'group'
|
80
|
+
mode_octal & 0010 != 0
|
81
|
+
when 'others'
|
82
|
+
mode_octal & 0001 != 0
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
def self.check_file_is_mounted(path, expected_attr, only_with)
|
87
|
+
ret = backend.run_command(commands.check_file_is_mounted(path))
|
88
|
+
if expected_attr.nil? || ret.failure?
|
89
|
+
return ret.success?
|
90
|
+
end
|
91
|
+
|
92
|
+
mount = ret.stdout.scan(/\S+/)
|
93
|
+
actual_attr = { :device => mount[0], :type => mount[4] }
|
94
|
+
mount[5].gsub(/\(|\)/, '').split(',').each do |option|
|
95
|
+
name, val = option.split('=')
|
96
|
+
if val.nil?
|
97
|
+
actual_attr[name.to_sym] = true
|
98
|
+
else
|
99
|
+
val = val.to_i if val.match(/^\d+$/)
|
100
|
+
actual_attr[name.to_sym] = val
|
101
|
+
end
|
102
|
+
end
|
103
|
+
|
104
|
+
if ! expected_attr[:options].nil?
|
105
|
+
expected_attr.merge!(expected_attr[:options])
|
106
|
+
expected_attr.delete(:options)
|
107
|
+
end
|
108
|
+
|
109
|
+
if only_with
|
110
|
+
actual_attr == expected_attr
|
111
|
+
else
|
112
|
+
expected_attr.each do |key, val|
|
113
|
+
return false if actual_attr[key] != val
|
114
|
+
end
|
115
|
+
true
|
116
|
+
end
|
117
|
+
end
|
118
|
+
|
119
|
+
def self.check_routing_table_has_entry(expected_attr)
|
120
|
+
return false if ! expected_attr[:destination]
|
121
|
+
ret = backend.run_command(commands.check_routing_table_has_entry(expected_attr[:destination]))
|
122
|
+
return false if ret.failure?
|
123
|
+
|
124
|
+
ret.stdout.gsub!(/\r\n/, "\n")
|
125
|
+
|
126
|
+
ret.stdout =~ /^(\S+)(?: via (\S+))? dev (\S+).+\n(?:default via (\S+))?/
|
127
|
+
actual_attr = {
|
128
|
+
:destination => $1,
|
129
|
+
:gateway => $2 ? $2 : $4,
|
130
|
+
:interface => expected_attr[:interface] ? $3 : nil
|
131
|
+
}
|
132
|
+
|
133
|
+
expected_attr.each do |key, val|
|
134
|
+
return false if actual_attr[key] != val
|
135
|
+
end
|
136
|
+
true
|
137
|
+
end
|
138
|
+
end
|
139
|
+
end
|
data/lib/specinfra/version.rb
CHANGED
data/wercker.yml
CHANGED
@@ -34,18 +34,6 @@ build:
|
|
34
34
|
name: Run rake spec:centos65
|
35
35
|
code: rake spec:centos65
|
36
36
|
cwd: $WORKING_DIR
|
37
|
-
- script:
|
38
|
-
name: Run vagrant up centos70
|
39
|
-
code: vagrant up centos70 --provider=digital_ocean
|
40
|
-
cwd: $WORKING_DIR
|
41
|
-
- script:
|
42
|
-
name: Run vagrant reload centos70
|
43
|
-
code: vagrant reload centos70
|
44
|
-
cwd: $WORKING_DIR
|
45
|
-
- script:
|
46
|
-
name: Run rake spec:centos70
|
47
|
-
code: rake spec:centos70
|
48
|
-
cwd: $WORKING_DIR
|
49
37
|
- script:
|
50
38
|
name: Run vagrant up ubuntu1404
|
51
39
|
code: vagrant up ubuntu1404 --provider=digital_ocean
|
@@ -64,10 +52,6 @@ build:
|
|
64
52
|
name: Run vagrant destroy centos65
|
65
53
|
code: vagrant destroy centos65 --force
|
66
54
|
cwd: $WORKING_DIR
|
67
|
-
- script:
|
68
|
-
name: Run vagrant destroy centos70
|
69
|
-
code: vagrant destroy centos70 --force
|
70
|
-
cwd: $WORKING_DIR
|
71
55
|
- script:
|
72
56
|
name: Run vagrant destroy ubuntu1404
|
73
57
|
code: vagrant destroy ubuntu1404 --force
|
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: 2.0.0.
|
4
|
+
version: 2.0.0.beta9
|
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-07-
|
11
|
+
date: 2014-07-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: net-ssh
|
@@ -206,6 +206,7 @@ files:
|
|
206
206
|
- lib/specinfra/command/plamo/base.rb
|
207
207
|
- lib/specinfra/command/plamo/base/package.rb
|
208
208
|
- lib/specinfra/command/plamo/base/service.rb
|
209
|
+
- lib/specinfra/command/processor.rb
|
209
210
|
- lib/specinfra/command/redhat.rb
|
210
211
|
- lib/specinfra/command/redhat/base.rb
|
211
212
|
- lib/specinfra/command/redhat/base/file.rb
|