mirror of
https://github.com/inspec/inspec
synced 2024-11-23 13:13:22 +00:00
add cmd for executing calls against the inspec api
This commit is contained in:
parent
ab9f5f9c1a
commit
01caf05020
4 changed files with 45 additions and 28 deletions
|
@ -116,21 +116,13 @@ class Inspec::InspecCLI < Inspec::BaseCLI # rubocop:disable Metrics/ClassLength
|
||||||
desc 'detect', 'detect the target OS'
|
desc 'detect', 'detect the target OS'
|
||||||
target_options
|
target_options
|
||||||
def detect
|
def detect
|
||||||
diagnose
|
options_json[:command] = 'os.params'
|
||||||
|
shell_func
|
||||||
rel = File.join(File.dirname(__FILE__), *%w{.. utils detect.rb})
|
|
||||||
detect_util = File.expand_path(rel)
|
|
||||||
# exits on execution:
|
|
||||||
runner = Inspec::Runner.new(opts)
|
|
||||||
profile = Inspec::Profile.for_target(detect_util, opts)
|
|
||||||
runner.add_profile(profile)
|
|
||||||
exit runner.run
|
|
||||||
rescue RuntimeError => e
|
|
||||||
puts e.message
|
|
||||||
end
|
end
|
||||||
|
|
||||||
desc 'shell', 'open an interactive debugging shell'
|
desc 'shell', 'open an interactive debugging shell'
|
||||||
target_options
|
target_options
|
||||||
|
option :command, aliases: :c
|
||||||
option :format, type: :string, default: Inspec::NoSummaryFormatter, hide: true
|
option :format, type: :string, default: Inspec::NoSummaryFormatter, hide: true
|
||||||
def shell_func
|
def shell_func
|
||||||
diagnose
|
diagnose
|
||||||
|
@ -138,8 +130,16 @@ class Inspec::InspecCLI < Inspec::BaseCLI # rubocop:disable Metrics/ClassLength
|
||||||
o[:logger] = Logger.new(STDOUT)
|
o[:logger] = Logger.new(STDOUT)
|
||||||
o[:logger].level = get_log_level(o.log_level)
|
o[:logger].level = get_log_level(o.log_level)
|
||||||
|
|
||||||
runner = Inspec::Runner.new(o)
|
if o[:command].nil?
|
||||||
Inspec::Shell.new(runner).start
|
runner = Inspec::Runner.new(o)
|
||||||
|
return Inspec::Shell.new(runner).start
|
||||||
|
else
|
||||||
|
opts[:test_collector] = 'mock'
|
||||||
|
runner = Inspec::Runner.new(opts)
|
||||||
|
res = runner.create_context.load(o[:command])
|
||||||
|
jres = res.respond_to?(:to_json) ? res.to_json : JSON.dump(res)
|
||||||
|
puts jres
|
||||||
|
end
|
||||||
rescue RuntimeError => e
|
rescue RuntimeError => e
|
||||||
puts e.message
|
puts e.message
|
||||||
end
|
end
|
||||||
|
|
|
@ -25,6 +25,15 @@ module Inspec::Resources
|
||||||
inspec.backend.os[name]
|
inspec.backend.os[name]
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def params
|
||||||
|
{
|
||||||
|
name: inspec.backend.os[:name],
|
||||||
|
family: inspec.backend.os[:family],
|
||||||
|
release: inspec.backend.os[:release],
|
||||||
|
arch: inspec.backend.os[:arch],
|
||||||
|
}
|
||||||
|
end
|
||||||
|
|
||||||
def to_s
|
def to_s
|
||||||
'Operating System Detection'
|
'Operating System Detection'
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,15 +0,0 @@
|
||||||
# encoding: utf-8
|
|
||||||
# Copyright 2015, Vulcano Security GmbH
|
|
||||||
# author: Christoph Hartmann
|
|
||||||
# author: Dominik Richter
|
|
||||||
# Tiny test file to return OS info of the tested node
|
|
||||||
|
|
||||||
# print OS detection infos
|
|
||||||
conf = {
|
|
||||||
name: os[:name],
|
|
||||||
family: os[:family],
|
|
||||||
release: os[:release],
|
|
||||||
arch: os[:arch],
|
|
||||||
}
|
|
||||||
puts JSON.dump(conf)
|
|
||||||
exit 0
|
|
|
@ -20,6 +20,29 @@ describe 'command tests' do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
describe 'cmd' do
|
||||||
|
it 'can run arbitrary ruby' do
|
||||||
|
x = rand
|
||||||
|
y = rand
|
||||||
|
out = inspec("shell -c '#{x} + #{y}'")
|
||||||
|
out.stderr.must_equal ''
|
||||||
|
out.exit_status.must_equal 0
|
||||||
|
j = JSON.load(out.stdout)
|
||||||
|
j.must_equal x+y
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'retrieves resources in JSON' do
|
||||||
|
out = inspec("shell -c 'os.params'")
|
||||||
|
out.stderr.must_equal ''
|
||||||
|
out.exit_status.must_equal 0
|
||||||
|
j = JSON.load(out.stdout)
|
||||||
|
j.keys.must_include 'name'
|
||||||
|
j.keys.must_include 'family'
|
||||||
|
j.keys.must_include 'arch'
|
||||||
|
j.keys.must_include 'release'
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
describe 'version' do
|
describe 'version' do
|
||||||
it 'provides the version number on stdout' do
|
it 'provides the version number on stdout' do
|
||||||
out = inspec('version')
|
out = inspec('version')
|
||||||
|
|
Loading…
Reference in a new issue