diff options
Diffstat (limited to 'lib/puppet')
-rw-r--r-- | lib/puppet/metatype/attributes.rb | 28 | ||||
-rw-r--r-- | lib/puppet/provider.rb | 18 |
2 files changed, 31 insertions, 15 deletions
diff --git a/lib/puppet/metatype/attributes.rb b/lib/puppet/metatype/attributes.rb index 88cff22f5..131aafac6 100644 --- a/lib/puppet/metatype/attributes.rb +++ b/lib/puppet/metatype/attributes.rb @@ -204,7 +204,7 @@ class Puppet::Type # Grr. if options[:required_features] - s.required_features = options[:required_features] + param.required_features = options[:required_features] end handle_param_options(name, options) @@ -250,7 +250,7 @@ class Puppet::Type # Grr. if options[:required_features] - s.required_features = options[:required_features] + param.required_features = options[:required_features] end # These might be enabled later. @@ -299,7 +299,7 @@ class Puppet::Type # We have to create our own, new block here because we want to define # an initial :retrieve method, if told to, and then eval the passed # block if available. - s = genclass(name, + prop = genclass(name, :parent => options[:parent] || Puppet::Property, :hash => @validproperties ) do @@ -320,18 +320,18 @@ class Puppet::Type # If it's the 'ensure' property, always put it first. if name == :ensure - @properties.unshift s + @properties.unshift prop else - @properties << s + @properties << prop end if options[:event] - s.event = options[:event] + prop.event = options[:event] end # Grr. if options[:required_features] - s.required_features = options[:required_features] + prop.required_features = options[:required_features] end # define_method(name) do @@ -342,7 +342,7 @@ class Puppet::Type # newproperty(name, :should => value) # end - return s + return prop end def self.paramdoc(param) @@ -584,7 +584,7 @@ class Puppet::Type end unless klass = self.class.attrclass(name) - raise Puppet::Error, "Invalid parameter %s" % name + raise Puppet::Error, "Resource type %s does not support parameter %s" % [self.class.name, name] end if @parameters.include?(name) @@ -592,12 +592,10 @@ class Puppet::Type [name, self.ref] end - if provider and features = klass.required_features - unless provider.class.satisfies?(features) - missing = features.find_all { |f| ! provider.class.feature?(f) } - info "Provider %s does not support features %s; not managing attribute %s" % [provider.class.name, missing.join(", "), name] - return nil - end + if provider and ! provider.class.supports_parameter?(klass) + missing = klass.required_features.find_all { |f| ! provider.class.feature?(f) } + info "Provider %s does not support features %s; not managing attribute %s" % [provider.class.name, missing.join(", "), name] + return nil end # Add parent information at creation time, so it's available diff --git a/lib/puppet/provider.rb b/lib/puppet/provider.rb index 6157431bb..9e1dc01a6 100644 --- a/lib/puppet/provider.rb +++ b/lib/puppet/provider.rb @@ -222,6 +222,24 @@ class Puppet::Provider return true end + # Does this provider support the specified parameter? + def self.supports_parameter?(param) + if param.is_a?(Class) + klass = param + else + unless klass = @model.attrclass(param) + raise Puppet::DevError, "'%s' is not a valid parameter for %s" % [param, @model.name] + end + end + return true unless features = klass.required_features + + if satisfies?(*features) + return true + else + return false + end + end + def self.to_s unless defined? @str if self.model |