summaryrefslogtreecommitdiffstats
path: root/lib/puppet/type.rb
diff options
context:
space:
mode:
Diffstat (limited to 'lib/puppet/type.rb')
-rw-r--r--lib/puppet/type.rb21
1 files changed, 9 insertions, 12 deletions
diff --git a/lib/puppet/type.rb b/lib/puppet/type.rb
index f422940fe..19a77b4bc 100644
--- a/lib/puppet/type.rb
+++ b/lib/puppet/type.rb
@@ -365,13 +365,14 @@ class Type < Puppet::Element
# Find the namevar
def self.namevar
unless defined? @namevar
- return nil unless defined? @parameters and ! @parameters.empty?
- namevarparam = @parameters.find { |param|
- param.isnamevar?
+ params = @parameters.find_all { |param|
+ param.isnamevar? or param.name == :name
}
- if namevarparam
- @namevar = namevarparam.name
+ if params.length > 1
+ raise Puppet::DevError, "Found multiple namevars for %s" % self.name
+ elsif params.length == 1
+ @namevar = params[0].name
else
raise Puppet::DevError, "No namevar for %s" % self.name
end
@@ -1388,22 +1389,18 @@ class Type < Puppet::Element
end
# create it anew
- # if there's a failure, destroy the object if it got that far
+ # if there's a failure, destroy the object if it got that far, but raise
+ # the error.
begin
obj = new(hash)
rescue => detail
- unless detail.is_a? Puppet::Error
- if Puppet[:debug]
- puts detail.backtrace
- end
- end
Puppet.err "Could not create %s: %s" % [title, detail.to_s]
if obj
obj.remove(true)
elsif obj = self[title]
obj.remove(true)
end
- return nil
+ raise
end
if implicit