Class: Inspec::InspecCLI
Instance Method Summary
collapse
Methods inherited from BaseCLI
default_options, detect, exec_options, exit_on_failure?, parse_reporters, profile_options, target_options, validate_reporters
Instance Method Details
#archive(path) ⇒ Object
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
|
# File 'lib/inspec/cli.rb', line 136
def archive(path)
o = opts.dup
diagnose(o)
o[:logger] = Logger.new(STDOUT)
o[:logger].level = get_log_level(o.log_level)
o[:backend] = Inspec::Backend.create(target: 'mock://')
profile = Inspec::Profile.for_target(path, o)
result = profile.check
if result && !o[:ignore_errors] == false
o[:logger].info 'Profile check failed. Please fix the profile before generating an archive.'
return exit 1
end
exit 1 unless profile.archive(o)
rescue StandardError => e
pretty_handle_exception(e)
end
|
#check(path) ⇒ Object
rubocop:disable Metrics/AbcSize
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
|
# File 'lib/inspec/cli.rb', line 67
def check(path) o = opts.dup
diagnose(o)
o[:ignore_supports] = true o[:backend] = Inspec::Backend.create(target: 'mock://')
o[:check_mode] = true
profile = Inspec::Profile.for_target(path, o)
result = profile.check
if o['format'] == 'json'
puts JSON.generate(result)
else
%w{location profile controls timestamp valid}.each do |item|
puts format('%-12s %s', item.to_s.capitalize + ':',
mark_text(result[:summary][item.to_sym]))
end
puts
if result[:errors].empty? and result[:warnings].empty?
puts 'No errors or warnings'
else
red = "\033[31m"
yellow = "\033[33m"
rst = "\033[0m"
item_msg = lambda { |item|
pos = [item[:file], item[:line], item[:column]].compact.join(':')
pos.empty? ? item[:msg] : pos + ': ' + item[:msg]
}
result[:errors].each do |item|
puts "#{red} ✖ #{item_msg.call(item)}#{rst}"
end
result[:warnings].each do |item|
puts "#{yellow} ! #{item_msg.call(item)}#{rst}"
end
puts
puts format('Summary: %s%d errors%s, %s%d warnings%s',
red, result[:errors].length, rst,
yellow, result[:warnings].length, rst)
end
end
exit 1 unless result[:summary][:valid]
rescue StandardError => e
pretty_handle_exception(e)
end
|
#detect ⇒ Object
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
|
# File 'lib/inspec/cli.rb', line 179
def detect
o = opts(:detect).dup
o[:command] = 'platform.params'
(_, res) = run_command(o)
if o['format'] == 'json'
puts res.to_json
else
headline('Platform Details')
puts Inspec::BaseCLI.detect(params: res, indent: 0, color: 36)
end
rescue ArgumentError, RuntimeError, Train::UserError => e
$stderr.puts e.message
exit 1
rescue StandardError => e
pretty_handle_exception(e)
end
|
#env(shell = nil) ⇒ Object
235
236
237
238
239
240
|
# File 'lib/inspec/cli.rb', line 235
def env(shell = nil)
p = Inspec::EnvPrinter.new(self.class, shell)
p.print_and_exit!
rescue StandardError => e
pretty_handle_exception(e)
end
|
#exec(*targets) ⇒ Object
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
|
# File 'lib/inspec/cli.rb', line 160
def exec(*targets)
o = opts(:exec).dup
diagnose(o)
configure_logger(o)
runner = Inspec::Runner.new(o)
targets.each { |target| runner.add_target(target) }
exit runner.run
rescue ArgumentError, RuntimeError, Train::UserError => e
$stderr.puts e.message
exit 1
rescue StandardError => e
pretty_handle_exception(e)
end
|
#json(target) ⇒ Object
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
|
# File 'lib/inspec/cli.rb', line 34
def json(target)
o = opts.dup
diagnose(o)
o[:ignore_supports] = true
o[:backend] = Inspec::Backend.create(target: 'mock://')
o[:check_mode] = true
profile = Inspec::Profile.for_target(target, o)
info = profile.info
info[:generator] = {
name: 'inspec',
version: Inspec::VERSION,
}
dst = o[:output].to_s
if dst.empty?
puts JSON.dump(info)
else
if File.exist? dst
puts "----> updating #{dst}"
else
puts "----> creating #{dst}"
end
fdst = File.expand_path(dst)
File.write(fdst, JSON.dump(info))
end
rescue StandardError => e
pretty_handle_exception(e)
end
|
#schema(name) ⇒ Object
243
244
245
246
247
248
|
# File 'lib/inspec/cli.rb', line 243
def schema(name)
puts Inspec::Schema.json(name)
rescue StandardError => e
puts e
puts "Valid schemas are #{Inspec::Schema.names.join(', ')}"
end
|
#shell_func ⇒ Object
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
|
# File 'lib/inspec/cli.rb', line 207
def shell_func
o = opts(:shell).dup
diagnose(o)
o[:debug_shell] = true
log_device = suppress_log_output?(o) ? nil : STDOUT
o[:logger] = Logger.new(log_device)
o[:logger].level = get_log_level(o.log_level)
if o[:command].nil?
runner = Inspec::Runner.new(o)
return Inspec::Shell.new(runner).start
end
run_type, res = run_command(o)
exit res unless run_type == :ruby_eval
res = (res.respond_to?(:to_json) ? res.to_json : JSON.dump(res)) if o['reporter']&.keys&.include?('json')
puts res
exit 0
rescue RuntimeError, Train::UserError => e
$stderr.puts e.message
rescue StandardError => e
pretty_handle_exception(e)
end
|
#vendor(path = nil) ⇒ Object
119
120
121
122
|
# File 'lib/inspec/cli.rb', line 119
def vendor(path = nil)
o = opts.dup
vendor_deps(path, o)
end
|
#version ⇒ Object
252
253
254
255
256
257
258
259
260
261
262
263
264
|
# File 'lib/inspec/cli.rb', line 252
def version
if opts['format'] == 'json'
v = { version: Inspec::VERSION }
puts v.to_json
else
puts Inspec::VERSION
latest = LatestInSpecVersion.new.latest
if Gem::Version.new(Inspec::VERSION) < Gem::Version.new(latest)
puts "\nYour version of InSpec is out of date! The latest version is #{latest}."
end
end
end
|