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 |
# File 'lib/puppet-check/data_parser.rb', line 88 def self.hiera(data) warnings = [] data.each do |key, value| warnings.push("Values missing in key '#{key}'.") if value.class.to_s == 'NilClass' end warnings end |
.json(files) ⇒ Object
checks json (.json)
24 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 24 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 # check metadata.json if 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 in metadata.json.") 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 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 next PuppetCheck.warning_files.push("-- #{file}:\n#{warnings.join("\n")}") unless warnings.empty? else # check for questionable hieradata warnings = hiera(parsed) next PuppetCheck.warning_files.push("-- #{file}:\n#{warnings.join("\n")}") unless warnings.empty? end 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 |
# 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 warnings = hiera(parsed) next PuppetCheck.warning_files.push("-- #{file}:\n#{warnings.join("\n")}") unless warnings.empty? PuppetCheck.clean_files.push("-- #{file}") end end end |