mirror of
https://github.com/inspec/inspec
synced 2024-11-11 07:34:15 +00:00
Allow target-id passthrough (#3320)
* Allow uuid passthrough * Update flag to be target-id. * Updated to use proper formatting for header. * Fix empty line after cli banner. Signed-off-by: Jared Quick <jquick@chef.io>
This commit is contained in:
parent
d69791e2bb
commit
76b453eee9
9 changed files with 53 additions and 12 deletions
|
@ -62,6 +62,8 @@ module Inspec
|
|||
desc: 'Specifies the bastion port if applicable'
|
||||
option :insecure, type: :boolean, default: false,
|
||||
desc: 'Disable SSL verification on select targets'
|
||||
option :target_id, type: :string,
|
||||
desc: 'Provide a ID which will be included on reports'
|
||||
end
|
||||
|
||||
def self.profile_options
|
||||
|
@ -142,6 +144,7 @@ module Inspec
|
|||
'file' => target,
|
||||
'stdout' => false,
|
||||
}
|
||||
reports[reporter_name]['target_id'] = opts['target_id'] if opts['target_id']
|
||||
end
|
||||
end
|
||||
opts['reporter'] = reports
|
||||
|
@ -152,6 +155,7 @@ module Inspec
|
|||
opts['reporter'].each do |reporter_name, config|
|
||||
opts['reporter'][reporter_name] = {} if config.nil?
|
||||
opts['reporter'][reporter_name]['stdout'] = true if opts['reporter'][reporter_name].empty?
|
||||
opts['reporter'][reporter_name]['target_id'] = opts['target_id'] if opts['target_id']
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
@ -69,7 +69,6 @@ module Inspec::Formatters
|
|||
name: platform(:name),
|
||||
release: platform(:release),
|
||||
target: backend_target,
|
||||
uuid: platform(:uuid),
|
||||
}
|
||||
end
|
||||
|
||||
|
|
|
@ -23,7 +23,7 @@ module Inspec::Reporters
|
|||
final_report[:type] = 'inspec_report'
|
||||
|
||||
final_report[:end_time] = Time.now.utc.strftime('%FT%TZ')
|
||||
final_report[:node_uuid] = @config['node_uuid'] || @run_data[:platform][:uuid]
|
||||
final_report[:node_uuid] = @config['node_uuid'] || @config['target_id']
|
||||
raise Inspec::ReporterError, 'Cannot find a UUID for your node. Please specify one via json-config.' if final_report[:node_uuid].nil?
|
||||
|
||||
final_report[:report_uuid] = @config['report_uuid'] || uuid_from_string(final_report[:end_time] + final_report[:node_uuid])
|
||||
|
|
|
@ -63,9 +63,17 @@ module Inspec::Reporters
|
|||
private
|
||||
|
||||
def print_profile_header(profile)
|
||||
output("Profile: #{format_profile_name(profile)}")
|
||||
output("Version: #{profile[:version] || '(not specified)'}")
|
||||
output("Target: #{run_data[:platform][:target]}") unless run_data[:platform][:target].nil?
|
||||
header = {
|
||||
'Profile' => format_profile_name(profile),
|
||||
'Version' => profile[:version] || '(not specified)',
|
||||
}
|
||||
header['Target'] = run_data[:platform][:target] unless run_data[:platform][:target].nil?
|
||||
header['Target ID'] = @config['target_id'] unless @config['target_id'].nil?
|
||||
|
||||
pad = header.keys.max_by(&:length).length + 1
|
||||
header.each do |title, value|
|
||||
output(format("%-#{pad}s %s", title + ':', value))
|
||||
end
|
||||
output('')
|
||||
end
|
||||
|
||||
|
|
|
@ -22,10 +22,12 @@ module Inspec::Reporters
|
|||
private
|
||||
|
||||
def platform
|
||||
{
|
||||
platform = {
|
||||
name: run_data[:platform][:name],
|
||||
release: run_data[:platform][:release],
|
||||
}
|
||||
platform[:target_id] = @config['target_id'] if @config['target_id']
|
||||
platform
|
||||
end
|
||||
|
||||
def profile_results(control)
|
||||
|
|
|
@ -42,6 +42,7 @@ module Inspec
|
|||
'properties' => {
|
||||
'name' => { 'type' => 'string' },
|
||||
'release' => { 'type' => 'string' },
|
||||
'target_id' => { 'type' => 'string', 'optional' => true },
|
||||
},
|
||||
}.freeze
|
||||
|
||||
|
|
|
@ -28,6 +28,17 @@ describe 'inspec exec with json formatter' do
|
|||
JSON::Schema.validate(data, schema)
|
||||
end
|
||||
|
||||
it 'can execute a profile and validate the json schema with target_id' do
|
||||
out = inspec('exec ' + example_profile + ' --reporter json --no-create-lockfile --target-id 1d3e399f-4d71-4863-ac54-84d437fbc444')
|
||||
out.stderr.must_equal ''
|
||||
out.exit_status.must_equal 101
|
||||
data = JSON.parse(out.stdout)
|
||||
data['platform']['target_id'].must_equal '1d3e399f-4d71-4863-ac54-84d437fbc444'
|
||||
sout = inspec('schema exec-json')
|
||||
schema = JSON.parse(sout.stdout)
|
||||
JSON::Schema.validate(data, schema)
|
||||
end
|
||||
|
||||
describe 'execute a profile with json formatting' do
|
||||
let(:json) { JSON.load(inspec('exec ' + example_profile + ' --reporter json --no-create-lockfile').stdout) }
|
||||
let(:profile) { json['profiles'][0] }
|
||||
|
|
|
@ -46,6 +46,15 @@ Test Summary: 0 successful, 0 failures, 0 skipped
|
|||
File.stat("#{outpath}/foo/bar/test.json").size.must_be :>, 0
|
||||
end
|
||||
|
||||
it 'can execute the profile with a target_id passthrough' do
|
||||
outpath = Dir.tmpdir
|
||||
out = inspec("exec #{example_profile} --no-create-lockfile --target-id 1d3e399f-4d71-4863-ac54-84d437fbc444")
|
||||
out.stderr.must_equal ''
|
||||
out.exit_status.must_equal 101
|
||||
stdout = out.stdout.force_encoding(Encoding::UTF_8)
|
||||
stdout.must_include "Target ID: 1d3e399f-4d71-4863-ac54-84d437fbc444"
|
||||
end
|
||||
|
||||
it 'executes a metadata-only profile' do
|
||||
out = inspec('exec ' + File.join(profile_path, 'complete-metadata') + ' --no-create-lockfile')
|
||||
out.stderr.must_equal ''
|
||||
|
|
|
@ -149,15 +149,22 @@ EOF
|
|||
it 'parse cli reporters' do
|
||||
opts = { 'reporter' => ['cli'] }
|
||||
parsed = Inspec::BaseCLI.parse_reporters(opts)
|
||||
assert = { 'reporter' => { 'cli' => { 'stdout' => true }}}
|
||||
parsed.must_equal assert
|
||||
expected_value = { 'reporter' => { 'cli' => { 'stdout' => true }}}
|
||||
parsed.must_equal expected_value
|
||||
end
|
||||
|
||||
it 'parses cli report and attaches target_id' do
|
||||
opts = { 'reporter' => ['cli'], 'target_id' => '1d3e399f-4d71-4863-ac54-84d437fbc444' }
|
||||
parsed = Inspec::BaseCLI.parse_reporters(opts)
|
||||
expected_value = {"reporter"=>{"cli"=>{"stdout"=>true, "target_id"=>"1d3e399f-4d71-4863-ac54-84d437fbc444"}}, "target_id"=>"1d3e399f-4d71-4863-ac54-84d437fbc444"}
|
||||
parsed.must_equal expected_value
|
||||
end
|
||||
|
||||
it 'parse cli reporters with format' do
|
||||
opts = { 'format' => 'json' }
|
||||
parsed = Inspec::BaseCLI.parse_reporters(opts)
|
||||
assert = { 'reporter' => { 'json' => { 'stdout' => true }}}
|
||||
parsed.must_equal assert
|
||||
expected_value = { 'reporter' => { 'json' => { 'stdout' => true }}}
|
||||
parsed.must_equal expected_value
|
||||
end
|
||||
|
||||
it 'parse cli reporters with format and output' do
|
||||
|
@ -166,8 +173,8 @@ EOF
|
|||
proc {
|
||||
opts = { 'format' => 'json', 'output' => '/tmp/inspec_out.json' }
|
||||
parsed = Inspec::BaseCLI.parse_reporters(opts)
|
||||
assert = { 'reporter' => { 'json' => { 'file' => '/tmp/inspec_out.json', 'stdout' => false }}}
|
||||
parsed.must_equal assert
|
||||
expected_value = { 'reporter' => { 'json' => { 'file' => '/tmp/inspec_out.json', 'stdout' => false }}}
|
||||
parsed.must_equal expected_value
|
||||
}.must_output nil, error end
|
||||
end
|
||||
|
||||
|
|
Loading…
Reference in a new issue