@api private
Parses puppet configuration files
@param value_converter [Proc] a function that will convert strings into ruby types
# File lib/puppet/settings/config_file.rb, line 13 def initialize(value_converter) @value_converter = value_converter end
# File lib/puppet/settings/config_file.rb, line 17 def parse_file(file, text) result = {} count = 0 # Default to 'main' for the section. section_name = :main result[section_name] = empty_section text.split(/\n/).each do |line| count += 1 case line when /^\s*\[(\w+)\]\s*$/ section_name = $1.intern fail_when_illegal_section_name(section_name, file, line) if result[section_name].nil? result[section_name] = empty_section end when /^\s*#/; next # Skip comments when /^\s*$/; next # Skip blanks when /^\s*(\w+)\s*=\s*(.*?)\s*$/ # settings var = $1.intern # We don't want to munge modes, because they're specified in octal, so we'll # just leave them as a String, since Puppet handles that case correctly. if var == :mode value = $2 else value = @value_converter[$2] end # Check to see if this is a file argument and it has extra options begin if value.is_a?(String) and options = extract_fileinfo(value) value = options[:value] options.delete(:value) result[section_name][:_meta][var] = options end result[section_name][var] = value rescue Puppet::Error => detail raise Puppet::Settings::ParseError.new(detail.message, file, line, detail) end else raise Puppet::Settings::ParseError.new("Could not match line #{line}", file, line) end end result end