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