Sha256: 6523bd0afa82975784993dcd7c40d8e4570aa24ba6e8be21b02a1b02c035bca8

Contents?: true

Size: 1.82 KB

Versions: 1

Compression:

Stored size: 1.82 KB

Contents

class PuppetLint::Checks
  def load_data(path, content)
    lexer = PuppetLint::Lexer.new
    PuppetLint::Data.path = path
    begin
      PuppetLint::Data.manifest_lines = content.split("\n", -1)
      PuppetLint::Data.tokens = lexer.tokenise(content)
      PuppetLint::Data.parse_control_comments
    rescue
      PuppetLint::Data.tokens = []
    end
  end
end

PuppetLint.new_check(:ghostbuster_hiera_files) do

  def regexprs
    hiera_yaml_file = ENV['HIERA_YAML_PATH'] || '/etc/puppetlabs/code/hiera.yaml'
    hiera = YAML.load_file(hiera_yaml_file)
    regs = {}
    hiera[:hierarchy].each do |hierarchy|
      regex = hierarchy.gsub(/%\{(::)?(trusted|server_facts|facts)\.[^\}]+\}/, "(.+)").gsub(/%\{[^\}]+\}/, ".+")
      facts = hierarchy.match(regex).captures.map { |f| f[/%{(::)?(trusted|server_facts|facts)\.(.+)}/, 3] }
      regs[regex] = facts
    end
    regs
  end

  def check
    return if path.match(%r{./hieradata/.*\.yaml}).nil?

    puppetdb = PuppetGhostbuster::PuppetDB.new
    _path = path.gsub("./hieradata/", "")

    regexprs.each do |k, v|
      m = _path.match(Regexp.new "#{k}\.yaml")
      next if m.nil?
      return if m.captures.size == 0

      if m.captures.size > 1
        i = 0
        query = [:'and']
        m.captures.map do |value|
          if v[i] == 'certname'
            query << [:'=', v[i], value]
          else
            query << [:'=', ['fact', v[i]], value]
          end
          i += 1
        end
      else
        if v[0] == 'certname'
          query = [:'=', 'certname', m.captures[0]]
        else
          query = [:'=', ['fact', v[0]], m.captures[0]]
        end
      end

      return if puppetdb.client.request('nodes', query ).data.size > 0
    end

    notify :warning, {
      :message => "Hiera File #{_path} seems unused",
      :line    => 1,
      :column  => 1,
    }
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
puppet-ghostbuster-0.7.2 lib/puppet-lint/plugins/check_ghostbuster_hiera_files.rb