summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lib/puppet/metatype/metaparams.rb9
-rw-r--r--lib/puppet/type.rb4
-rwxr-xr-xtest/ral/manager/attributes.rb32
3 files changed, 43 insertions, 2 deletions
diff --git a/lib/puppet/metatype/metaparams.rb b/lib/puppet/metatype/metaparams.rb
index ab453ab30..9825efc61 100644
--- a/lib/puppet/metatype/metaparams.rb
+++ b/lib/puppet/metatype/metaparams.rb
@@ -51,7 +51,14 @@ class Puppet::Type
munge do |args|
# If they've specified all, collect all known properties
if args == :all
- args = @resource.class.properties.collect do |property|
+ args = @resource.class.properties.find_all do |property|
+ # Only get properties supported by our provider
+ if @resource.provider
+ @resource.provider.class.supports_parameter?(property)
+ else
+ true
+ end
+ end.collect do |property|
property.name
end
end
diff --git a/lib/puppet/type.rb b/lib/puppet/type.rb
index a35a0b12c..b4b6e3b18 100644
--- a/lib/puppet/type.rb
+++ b/lib/puppet/type.rb
@@ -252,10 +252,12 @@ class Type
rescue ArgumentError, Puppet::Error, TypeError
raise
rescue => detail
- self.devfail(
+ error = Puppet::DevError.new(
"Could not set %s on %s: %s" %
[attr, self.class.name, detail]
)
+ error.set_backtrace(detail.backtrace)
+ raise error
end
hash.delete attr
end
diff --git a/test/ral/manager/attributes.rb b/test/ral/manager/attributes.rb
index 273dc6844..ef8742d48 100755
--- a/test/ral/manager/attributes.rb
+++ b/test/ral/manager/attributes.rb
@@ -6,6 +6,7 @@
$:.unshift("../../lib") if __FILE__ =~ /\.rb$/
require 'puppettest'
+require 'mocha'
class TestTypeAttributes < Test::Unit::TestCase
include PuppetTest
@@ -315,6 +316,37 @@ class TestTypeAttributes < Test::Unit::TestCase
inst.value = :nosuchattr
end
end
+
+ def test_check_ignores_unsupported_params
+ type = Puppet::Type.newtype(:unsupported) do
+ feature :nosuchfeat, "testing"
+ newparam(:name) {}
+ newproperty(:yep) {}
+ newproperty(:nope, :required_features => :nosuchfeat) {}
+ end
+ $yep = :absent
+ type.provide(:only) do
+ def self.supports_parameter?(param)
+ if param.name == :nope
+ return false
+ else
+ return true
+ end
+ end
+
+ def yep
+ $yep
+ end
+ def yep=(v)
+ $yep = v
+ end
+ end
+ cleanup { Puppet::Type.rmtype(:unsupported) }
+
+ obj = type.create(:name => "test", :check => :yep)
+ obj.expects(:newattr).with(:nope).never
+ obj[:check] = :all
+ end
end
# $Id$