summaryrefslogtreecommitdiffstats
path: root/lib/puppet
diff options
context:
space:
mode:
authorBrice Figureau <brice-puppet@daysofwonder.com>2010-04-24 17:41:01 +0200
committerMarkus Roberts <Markus@reality.com>2010-06-28 14:19:54 -0700
commit153d7cd69b8b5216695206cbc235dd89a65dec76 (patch)
treec04f05a495bbbc72a29df86f2b1d0b881f77f614 /lib/puppet
parentdd4fa6686b31501ab8d8f800a81715e713b14031 (diff)
downloadpuppet-153d7cd69b8b5216695206cbc235dd89a65dec76.tar.gz
puppet-153d7cd69b8b5216695206cbc235dd89a65dec76.tar.xz
puppet-153d7cd69b8b5216695206cbc235dd89a65dec76.zip
Fix #3665 - part 2, node inheritance fixes
We were looking only to the class hierarchies when trying to find an ancestor to the current type. Thus we were never trying to climb up the hierarchy of nodes when evaluating nodes. Signed-off-by: Brice Figureau <brice-puppet@daysofwonder.com>
Diffstat (limited to 'lib/puppet')
-rw-r--r--lib/puppet/resource/type.rb11
1 files changed, 6 insertions, 5 deletions
diff --git a/lib/puppet/resource/type.rb b/lib/puppet/resource/type.rb
index 825cce39e..cb87cc44f 100644
--- a/lib/puppet/resource/type.rb
+++ b/lib/puppet/resource/type.rb
@@ -178,7 +178,7 @@ class Puppet::Resource::Type
return nil unless parent
unless @parent_type ||= resource_type_collection.send(type, parent)
- fail Puppet::ParseError, "Could not find parent resource type '#{parent}'"
+ fail Puppet::ParseError, "Could not find parent resource type '#{parent}' of type #{type}"
end
@parent_type
@@ -219,12 +219,14 @@ class Puppet::Resource::Type
if caller_name = scope.parent_module_name and ! set.include?(:caller_module_name)
scope.setvar("caller_module_name", caller_name)
end
- scope.class_set(self.name,scope) if hostclass?
+ scope.class_set(self.name,scope) if hostclass? or node?
end
# Create a new subscope in which to evaluate our code.
def subscope(scope, resource)
- scope.newscope :resource => resource, :namespace => self.namespace, :source => self
+ scope = scope.newscope :resource => resource, :namespace => self.namespace, :source => self
+ scope.nodescope = true if @type == :node
+ scope
end
# Check whether a given argument is valid.
@@ -261,8 +263,7 @@ class Puppet::Resource::Type
end
def evaluate_parent_type(resource)
- #return unless klass = parent_type and parent_resource = resource.scope.compiler.catalog.resource(:class, klass.name)
- return unless klass = parent_type and parent_resource = resource.catalog.resource(:class, klass.name)
+ return unless klass = parent_type and parent_resource = resource.scope.compiler.catalog.resource(:class, klass.name) || resource.scope.compiler.catalog.resource(:node, klass.name)
parent_resource.evaluate unless parent_resource.evaluated?
return parent_scope(resource.scope, klass)
end