Sha256: 649fc6aaa3a6b8227e16069480e5e49ec9a4129adbdb2aa4097b8c99e20196dd

Contents?: true

Size: 1.86 KB

Versions: 2

Compression:

Stored size: 1.86 KB

Contents

require 'pdk'

module PDK
  module Validate
    module Puppet
      class PuppetLintValidator < ExternalCommandValidator
        def name
          'puppet-lint'
        end

        def cmd
          'puppet-lint'
        end

        def pattern
          contextual_pattern('**/*.pp')
        end

        def spinner_text_for_targets(_targets)
          'Checking Puppet manifest style (%{pattern}).' % { pattern: pattern.join(' ') }
        end

        def parse_options(targets)
          cmd_options = ['--json', '--relative']

          cmd_options << '--fix' if options[:auto_correct]

          cmd_options.concat(targets)
        end

        def parse_output(report, result, targets)
          begin
            json_data = JSON.parse(result[:stdout]).flatten
          rescue JSON::ParserError
            raise PDK::Validate::ParseOutputError, result[:stdout]
          end

          # puppet-lint does not include files without problems in its JSON
          # output, so we need to go through the list of targets and add passing
          # events to the report for any target not listed in the JSON output.
          targets.reject { |target| json_data.any? { |j| j['path'] == target } }.each do |target|
            report.add_event(
              file:     target,
              source:   name,
              severity: 'ok',
              state:    :passed,
            )
          end

          json_data.each do |offense|
            report.add_event(
              file:     offense['path'],
              source:   name,
              line:     offense['line'],
              column:   offense['column'],
              message:  offense['message'],
              test:     offense['check'],
              severity: (offense['kind'] == 'fixed') ? 'corrected' : offense['kind'],
              state:    :failure,
            )
          end
        end
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
pdk-2.7.1 lib/pdk/validate/puppet/puppet_lint_validator.rb
pdk-2.7.0 lib/pdk/validate/puppet/puppet_lint_validator.rb