class PuppetSyntax::Templates
Public Instance Methods
check(filelist)
click to toggle source
# File lib/puppet-syntax/templates.rb, line 6 def check(filelist) raise 'Expected an array of files' unless filelist.is_a?(Array) # We now have to redirect STDERR in order to capture warnings. $stderr = warnings = StringIO.new result = { warnings: [], errors: [] } filelist.each do |file| if File.extname(file) == '.epp' or PuppetSyntax.epp_only tmp = validate_epp(file) elsif File.extname(file) == '.erb' tmp = validate_erb(file) end result.merge!(tmp) { |_k, a, b| a.concat(b) } unless tmp.nil? end $stderr = STDERR result[:warnings] << warnings.string unless warnings.string.empty? result[:errors].map! { |e| e.to_s } result[:warnings].map! { |w| w.to_s } result end
validate_epp(filename)
click to toggle source
# File lib/puppet-syntax/templates.rb, line 31 def validate_epp(filename) require 'puppet' result = { warnings: [], errors: [] } formatter = Puppet::Pops::Validation::DiagnosticFormatterPuppetStyle.new evaluating_parser = Puppet::Pops::Parser::EvaluatingParser::EvaluatingEppParser.new parser = evaluating_parser.parser begin parse_result = parser.parse_file(filename) validation_result = evaluating_parser.validate(parse_result.model) # print out any warnings validation_result.warnings.each do |warn| message = formatter.format_message(warn) file = warn.file line = warn.source_pos.line column = warn.source_pos.pos result[:warnings] << "#{file}:#{line}:#{column}: #{message}" end # collect errors and return them in order to indicate validation failure validation_result.errors.each do |err| message = formatter.format_message(err) file = err.file line = err.source_pos.line column = err.source_pos.pos result[:errors] << "#{file}:#{line}:#{column}: #{message}" end rescue Puppet::ParseError, SyntaxError => e result[:errors] << e rescue StandardError => e result[:errors] << e end result end
validate_erb(filename)
click to toggle source
# File lib/puppet-syntax/templates.rb, line 67 def validate_erb(filename) result = { warnings: [], errors: [] } begin template = File.read(filename) erb = if RUBY_VERSION >= '2.6' ERB.new(template, trim_mode: '-') else ERB.new(template, trim_mode: '-') end erb.filename = filename erb.result rescue NameError => e # This is normal because we don't have the variables that would # ordinarily be bound by the parent Puppet manifest. rescue TypeError # This is normal because we don't have the variables that would # ordinarily be bound by the parent Puppet manifest. rescue SyntaxError => e result[:errors] << e end result end