summaryrefslogtreecommitdiffstats
path: root/lib/puppet/parameter.rb
diff options
context:
space:
mode:
Diffstat (limited to 'lib/puppet/parameter.rb')
-rw-r--r--lib/puppet/parameter.rb59
1 files changed, 32 insertions, 27 deletions
diff --git a/lib/puppet/parameter.rb b/lib/puppet/parameter.rb
index fae0587e1..31e009af5 100644
--- a/lib/puppet/parameter.rb
+++ b/lib/puppet/parameter.rb
@@ -289,9 +289,6 @@ class Puppet::Parameter
raise Puppet::DevError, "No resource set for %s" % self.class.name
end
- # LAK 2007-05-09: Keep the @parent around for backward compatibility.
- #@parent = @resource
-
if ! self.metaparam? and klass = Puppet::Type.metaparamclass(self.class.name)
setup_shadow(klass)
end
@@ -378,36 +375,37 @@ class Puppet::Parameter
vals = self.class.values
regs = self.class.regexes
- if regs.is_a? Hash # this is true on properties
- regs = regs.keys
- end
- if vals.empty? and regs.empty?
- # This parameter isn't using defined values to do its work.
- return
- end
+ # this is true on properties
+ regs = regs.keys if regs.is_a?(Hash)
+
+ # This parameter isn't using defined values to do its work.
+ return if vals.empty? and regs.empty?
+
newval = value
- unless value.is_a?(Symbol)
- newval = value.to_s.intern
- end
+ newval = value.to_s.intern unless value.is_a?(Symbol)
- unless vals.include?(newval) or
- self.class.alias(newval) or
- self.class.match?(value) # We match the string, not the symbol
- str = "Invalid '%s' value %s. " %
- [self.class.name, value.inspect]
+ name = newval
- unless vals.empty?
- str += "Valid values are %s. " % vals.join(", ")
- end
+ unless vals.include?(newval) or name = self.class.alias(newval) or name = self.class.match?(value) # We match the string, not the symbol
+ str = "Invalid '%s' value %s. " %
+ [self.class.name, value.inspect]
- unless regs.empty?
- str += "Valid values match %s." % regs.collect { |r|
- r.to_s
- }.join(", ")
- end
+ unless vals.empty?
+ str += "Valid values are %s. " % vals.join(", ")
+ end
+
+ unless regs.empty?
+ str += "Valid values match %s." % regs.collect { |r|
+ r.to_s
+ }.join(", ")
+ end
- raise ArgumentError, str
+ raise ArgumentError, str
end
+
+ # Now check for features.
+ name = name[0] if name.is_a?(Array) # This is true for regexes.
+ validate_features_per_value(name) if is_a?(Puppet::Property)
end
def remove
@@ -484,5 +482,12 @@ class Puppet::Parameter
def to_s
s = "Parameter(%s)" % self.name
end
+
+ # Make sure that we've got all of the required features for a given value.
+ def validate_features_per_value(value)
+ if features = self.class.value_option(value, :required_features)
+ raise ArgumentError, "Provider must have features '%s' to set '%s' to '%s'" % [features, self.class.name, value] unless provider.satisfies?(features)
+ end
+ end
end