diff options
Diffstat (limited to 'lib/puppet/config.rb')
-rw-r--r-- | lib/puppet/config.rb | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/lib/puppet/config.rb b/lib/puppet/config.rb new file mode 100644 index 000000000..dc8b05f56 --- /dev/null +++ b/lib/puppet/config.rb @@ -0,0 +1,49 @@ +module Puppet # :nodoc: +# The class for handling configuration files. +class Config < Hash + # Slight override, since we can't seem to have a subclass where all instances + # have the same default block. + def [](section) + unless self.has_key?(section) + self[section] = {} + end + super + end + + def initialize(file) + text = nil + + begin + text = File.read(file) + rescue Errno::ENOENT + raise Puppet::Error, "No such file %s" % file + rescue Errno::EACCES + raise Puppet::Error, "Permission denied to file %s" % file + end + + # Store it for later, in a way that we can test and such. + @file = Puppet::ParsedFile.new(file) + + @values = Hash.new { |names, name| + names[name] = {} + } + + section = "puppet" + text.split(/\n/).each { |line| + case line + when /^\[(\w+)\]$/: section = $1 # Section names + when /^\s*#/: next # Skip comments + when /^\s*$/: next # Skip blanks + when /^\s*(\w+)\s+(.+)$/: # settings + var = $1 + value = $2 + self[section][var] = value + else + raise Puppet::Error, "Could not match line %s" % line + end + } + end +end +end + +# $Id$ |