diff options
author | luke <luke@980ebf18-57e1-0310-9a29-db15c13687c0> | 2007-05-01 03:14:09 +0000 |
---|---|---|
committer | luke <luke@980ebf18-57e1-0310-9a29-db15c13687c0> | 2007-05-01 03:14:09 +0000 |
commit | 64382700d8bb42d281cea47078c53dce33e0c2cb (patch) | |
tree | 207a415461127af0b6598aba807673f6ec59329f /lib | |
parent | c9de332e8ab75f234d79e2dc8a3fcd2949a1f224 (diff) | |
download | puppet-64382700d8bb42d281cea47078c53dce33e0c2cb.tar.gz puppet-64382700d8bb42d281cea47078c53dce33e0c2cb.tar.xz puppet-64382700d8bb42d281cea47078c53dce33e0c2cb.zip |
Adding a "supports_parameter?" method to test whether a given provider supports the features required by a given parameter. This is used during attribute instance creation, but its creation was necessicated by test code.
git-svn-id: https://reductivelabs.com/svn/puppet/trunk@2444 980ebf18-57e1-0310-9a29-db15c13687c0
Diffstat (limited to 'lib')
-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 |