class Cloudspin::Stack::Rake::InspecTask
Attributes
inspec_folder[R]
inspec_parameters[R]
inspec_target[R]
stack_instance_id[R]
work_folder[R]
Public Class Methods
new(stack_instance:, inspec_folder: './test/inspec', work_folder: nil, inspec_target: nil, inspec_parameters: {})
click to toggle source
# File lib/cloudspin/stack/rake/inspec_task.rb, line 13 def initialize(stack_instance:, inspec_folder: './test/inspec', work_folder: nil, inspec_target: nil, inspec_parameters: {}) @stack_instance = stack_instance @stack_instance_id = stack_instance.id @inspec_target = inspec_target || inspec_target_for_aws @inspec_parameters = default_parameters.merge(inspec_parameters) @work_folder = work_folder || @stack_instance.working_folder @inspec_folder = inspec_folder if Dir.exists?(inspec_folder) define else puts "No directory found: #{inspec_folder}" end end
Public Instance Methods
build_attributes_file()
click to toggle source
# File lib/cloudspin/stack/rake/inspec_task.rb, line 50 def build_attributes_file ensure_path(inspec_attributes_file) File.open(inspec_attributes_file, 'w') {|f| f.write(inspec_parameters.to_yaml) } end
default_parameters()
click to toggle source
# File lib/cloudspin/stack/rake/inspec_task.rb, line 46 def default_parameters @stack_instance.parameter_values.merge(@stack_instance.resource_values).merge({ 'instance_identifier' => @stack_instance.id }) end
define()
click to toggle source
# File lib/cloudspin/stack/rake/inspec_task.rb, line 38 def define desc 'Run inspec tests' task :inspec do |t, args| build_attributes_file run_inspec_profile end end
ensure_path(file_path)
click to toggle source
# File lib/cloudspin/stack/rake/inspec_task.rb, line 61 def ensure_path(file_path) mkpath(File.dirname(file_path)) end
inspec_attributes_file()
click to toggle source
# File lib/cloudspin/stack/rake/inspec_task.rb, line 57 def inspec_attributes_file "#{work_folder}/inspec/attributes-for-stack-#{stack_instance_id}.yml" end
inspec_command(inspec_profile_subfolder)
click to toggle source
# File lib/cloudspin/stack/rake/inspec_task.rb, line 76 def inspec_command(inspec_profile_subfolder) command_parts = [ 'inspec', 'exec', "#{@inspec_folder}/#{inspec_profile_subfolder}", '--attrs', inspec_attributes_file, '--reporter', "json-rspec:#{inspec_profile_results_file(inspec_profile_name(inspec_profile_subfolder))}", 'cli'] command_parts << ['-t', inspec_target] if inspec_target command_parts.join(' ') end
inspec_profile_name(subfolder_name)
click to toggle source
# File lib/cloudspin/stack/rake/inspec_task.rb, line 95 def inspec_profile_name(subfolder_name) profile_spec = YAML.load_file("#{@inspec_folder}/#{subfolder_name}/inspec.yml") || {} profile_spec['name'] || 'default' end
inspec_profile_results_file(profile_name)
click to toggle source
# File lib/cloudspin/stack/rake/inspec_task.rb, line 91 def inspec_profile_results_file(profile_name) "#{work_folder}/inspec/results-for-stack-#{stack_instance_id}-profile-#{profile_name}.json" end
inspec_profiles_in(folder)
click to toggle source
# File lib/cloudspin/stack/rake/inspec_task.rb, line 100 def inspec_profiles_in(folder) Dir.entries(folder).select { |possible_profile| possible_profile != '..' && File.exists?("#{folder}/#{possible_profile}/inspec.yml") } end
inspec_target_for_aws()
click to toggle source
# File lib/cloudspin/stack/rake/inspec_task.rb, line 32 def inspec_target_for_aws aws_region = @stack_instance.parameter_values['region'] aws_profile = @stack_instance.resource_values['assume_role_profile'] "aws://#{aws_region}/#{aws_profile}" end
run_inspec_profile()
click to toggle source
# File lib/cloudspin/stack/rake/inspec_task.rb, line 65 def run_inspec_profile puts "Run inspec" inspec_profiles_in(@inspec_folder).each { |inspec_profile_subfolder| cmd = inspec_command(inspec_profile_subfolder) puts cmd return if system(cmd) $stderr.puts "#{cmd} failed" exit $?.exitstatus || 1 } end