Class: DataParser
- Inherits:
-
Object
- Object
- DataParser
- Defined in:
- lib/puppet-check/data_parser.rb
Overview
executes diagnostics on data files
Class Method Summary collapse
-
.hiera(data) ⇒ Object
checks hieradata.
-
.json(files) ⇒ Object
checks json (.json).
-
.yaml(files) ⇒ Object
checks yaml (.yaml/.yml).
Class Method Details
.hiera(data) ⇒ Object
checks hieradata
88 89 90 91 92 93 94 95 96 97 |
# File 'lib/puppet-check/data_parser.rb', line 88 def self.hiera(data) warnings = [] data.each do |key, value| # check for nil values in the data (nil keys are fine) if (value.is_a?(Hash) && value.values.any?(&:nil?)) || (value.class.to_s == 'NilClass') warnings.push("Value(s) missing in key '#{key}'.") end end warnings end |
.json(files) ⇒ Object
checks json (.json)
25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 |
# File 'lib/puppet-check/data_parser.rb', line 25 def self.json(files) require 'json' files.each do |file| # check json syntax begin parsed = JSON.parse(File.read(file)) rescue JSON::ParserError => err PuppetCheck.error_files.push("-- #{file}:\n#{err.to_s.lines.first.strip}") else warnings = [] # check metadata.json if File.basename(file) == 'metadata.json' # metadata-json-lint has issues and is essentially no longer maintained, so here is an improved and leaner version of it require 'spdx-licenses' # check for errors errors = [] # check for required keys %w(name version author license summary source dependencies).each do |key| errors.push("Required field '#{key}' not found.") unless parsed.key?(key) end # check for duplicate dependencies and requirements %w(requirements dependencies).each do |key| next unless parsed.key?(key) names = [] parsed[key].each do |req_dep| name = req_dep['name'] errors.push("Duplicate #{key} on #{name}.") if names.include?(name) names << name end end # check for deprecated fields %w(types checksum).each do |key| errors.push("Deprecated field '#{key}' found.") if parsed.key?(key) end # check for summary under 144 character errors.push('Summary exceeds 144 characters.') if parsed.key?('summary') && parsed['summary'].size > 144 next PuppetCheck.error_files.push("-- #{file}:\n#{errors.join("\n")}") unless errors.empty? # check for warnings # check for spdx license (rubygems/util/licenses for rubygems >= 2.5 in the far future) if parsed.key?('license') && !SpdxLicenses.exist?(parsed['license']) && parsed['license'] !~ /[pP]roprietary/ warnings.push("License identifier '#{parsed['license']}' is not in the SPDX list: http://spdx.org/licenses/") end # assume this is hieradata else # perform some rudimentary hiera checks if data exists warnings = hiera(parsed) unless parsed.class.to_s == 'NilClass' end next PuppetCheck.warning_files.push("-- #{file}:\n#{warnings.join("\n")}") unless warnings.empty? PuppetCheck.clean_files.push("-- #{file}") end end end |
.yaml(files) ⇒ Object
checks yaml (.yaml/.yml)
6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
# File 'lib/puppet-check/data_parser.rb', line 6 def self.yaml(files) require 'yaml' files.each do |file| # check yaml syntax begin parsed = YAML.load_file(file) rescue Psych::SyntaxError, StandardError => err PuppetCheck.error_files.push("-- #{file}:\n#{err.to_s.gsub("(#{file}): ", '')}") else # perform some rudimentary hiera checks if data exists warnings = parsed.class.to_s == 'NilClass' ? [] : hiera(parsed) next PuppetCheck.warning_files.push("-- #{file}:\n#{warnings.join("\n")}") unless warnings.empty? PuppetCheck.clean_files.push("-- #{file}") end end end |