class SaltLint::Actions

Executing appropriate actions ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Public Class Methods

check_rules(f) click to toggle source

Check if files comply with linter rules

# File lib/salt-lint/actions.rb, line 8
def self.check_rules(f)
  $invalid_yaml     = Hash.new
  $invalid_newline  = Hash.new
  $invalid_oneword  = Hash.new

  checks_went_fine = true
  Printer.print('debug', "Checking file: #{f}", 5)
  test_suite_methods = SaltLint::Tests.methods(false).sort - [ :check_for_regexp ]
  line_counter = 1
  File.readlines(f).each do |l|
    skip = false
    tmp_l = l.gsub(/\s+/, '')
    # Comments
    if tmp_l =~ /\{?#(.+)?\}?/
      skip = true
    # Empty lines
    elsif tmp_l =~ /^$/
      skip = true
    # Functions
    elsif tmp_l =~ /\{+.+\(.+\).+\}+/
      skip = true
    # Variables
    elsif tmp_l =~ /\{\{.+\}\}/
      l = l.gsub(/\{\{.+\}\}/, 'random_string')
    # If / Else blocks
    elsif tmp_l =~ /^\{\%.*\%\}$/
      skip = true
    end
    if ! skip
      test_suite_methods.each do |m|
        if ! $invalid_yaml[f]
          checks_went_fine_tmp = SaltLint::Tests.send(m, line_counter, l, f)
          checks_went_fine_tmp == false ? checks_went_fine = false : nil
        end
      end
    end
    line_counter += 1
  end
  checks_went_fine ? Printer.print('success', "File looks fine: #{f}") : Printer.print('error', "Found errors in file: #{f}")
  return checks_went_fine
end
scan() click to toggle source

Scans folder specified as argument –scan for SLS files and returns array

# File lib/salt-lint/actions.rb, line 51
def self.scan
  # files = Dir.glob( $arguments.scan + "**/*")
  files_to_return = Array.new
  Find.find($arguments.scan).to_a.each do |f|
    if f =~ /.*\.sls$/
      files_to_return.push(f)
    end
  end
  if files_to_return.count > 0
    return files_to_return
  else
    Printer.print('error', 'No salt state files found.')
    exit 1
  end
end