summaryrefslogtreecommitdiffstats
path: root/lib/puppet/config.rb
diff options
context:
space:
mode:
Diffstat (limited to 'lib/puppet/config.rb')
-rw-r--r--lib/puppet/config.rb53
1 files changed, 52 insertions, 1 deletions
diff --git a/lib/puppet/config.rb b/lib/puppet/config.rb
index dc9892cfb..833a2c6e3 100644
--- a/lib/puppet/config.rb
+++ b/lib/puppet/config.rb
@@ -1,6 +1,6 @@
module Puppet
# The class for handling configuration files.
-class Config < Hash
+class Config
# Slight override, since we can't seem to have a subclass where all instances
# have the same default block.
def [](section)
@@ -43,6 +43,57 @@ class Config < Hash
end
}
end
+
+ def setdefaults(hash)
+ hash.each { |param, value|
+ if @defaults.include?(param)
+ raise Puppet::Error, "Default %s is already defined" % param
+ end
+
+ case value
+ when true, false:
+ @defaults[param] = Boolean.new(param, value)
+ when String:
+ @defaults[param] = Element.new(param, value)
+ when Hash:
+ type = nil
+ unless value.include?(:type)
+ raise Puppet::Error, "You must include the object type"
+ end
+ unless type = Puppet.type(value[:type])
+ raise Puppet::Error, "Invalid type %s" % value[:type]
+ end
+
+ value.delete(:type)
+
+ # FIXME this won't work, because we don't want to interpolate the
+ # file name until they actually ask for it
+ begin
+ @defaults[param] = type.create(value)
+ rescue => detail
+ raise Puppet::Error, "Could not create default %s: %s" %
+ [param, detail]
+ end
+ end
+ }
+ end
+
+ class Element
+ attr_accessor :name, :value
+ end
+
+ class File < Element
+ end
+
+ class Boolean < Element
+ def value=(value)
+ unless value == true or value == false
+ raise Puppet::DevError, "Invalid value %s for %s" % [value, @name]
+ end
+
+ @value = value
+ end
+ end
end
end