class Runner

Attributes

exit_code[R]

Public Class Methods

new() click to toggle source
# File lib/runner.rb, line 12
def initialize
  @defaults = { :output_format => :graphic,
                :extensions_path => File.join(File.dirname(__FILE__), 'extensions'),
                :debug => false,
                :color => true,
                :state => :run,
                :msg => nil }
  @options = CommandLine.parse!(@defaults)

  if msg = @options.delete(:message)
    puts msg
  end

  case @options.delete(:state)
  when :exit
    exit 0
  when :fail
    exit 1
  end

  if @options[:debug]
    Log.initialize
  end

  unless @options[:color]
    Rainbow.enabled = false
  end

  Log.debug { "Starting policy check with configured option - #{@options.inspect}" }

  @extensions = Extensions.new(@options[:extensions_path])
  policy_file = CommandLine.policy!
  @policies = load_policies(policy_file).map { |policy| Policy.new(policy) }
  @exit_code = 0
end

Public Instance Methods

run() click to toggle source
# File lib/runner.rb, line 48
def run
  processed_policies = []

  @policies.each do |policy|
    if policy.enabled?
      processed_policies << policy.check_rules
    end
  end

  result_viewer = ResultViewer.new(processed_policies)

  if result_viewer.run_state[:successes] != result_viewer.run_state[:total]
    @exit_code = 1
  end

  case @options[:output_format]
  when :graphic
    result_viewer.to_s
  when :json
    result_viewer.to_json
  when :yaml
    result_viewer.to_yaml
  # TODO(ploubser): Fix this
  #when :csv
  #  result_viewer.to_csv
  end
end

Private Instance Methods

load_policies(target_location) click to toggle source
# File lib/runner.rb, line 78
def load_policies(target_location)
  policies = []

  if File.directory?(target_location)
    Dir.glob(target_location + '/*').each do |policy_file|
      policies << load_policy_file(policy_file)
    end
  else
    policies << load_policy_file(target_location)
  end

  policies
end
load_policy_file(policy_file) click to toggle source
# File lib/runner.rb, line 92
def load_policy_file(policy_file)
  Log.debug { "Loading policy file - #{policy_file}" }

  unless File.exist?(policy_file)
    raise "Cannot find policy file - '#{policy_file}'"
  end

  policy = {}

  begin
    if policy_file =~ /^.*\.erb$/
      template = ERB.new(File.read(policy_file, 3, '>')).result
      policy = YAML.load(template)
    else
      policy = YAML.load_file(policy_file)
    end
  rescue StandardError => e
      Log.debug { e.message }
      raise "Invalid Policy file - '#{policy_file}'"
  end

  Log.debug { "Successfully loaded policy file - #{policy_file}"}

  policy
end