summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/puppet/resource/type.rb19
1 files changed, 17 insertions, 2 deletions
diff --git a/lib/puppet/resource/type.rb b/lib/puppet/resource/type.rb
index c615a2ccb..e102cb0fd 100644
--- a/lib/puppet/resource/type.rb
+++ b/lib/puppet/resource/type.rb
@@ -25,8 +25,13 @@ class Puppet::Resource::Type
# Now evaluate the code associated with this class or definition.
def evaluate_code(resource)
- # Create a new scope.
- scope = subscope(resource.scope, resource)
+ scope = resource.scope
+
+ if tmp = evaluate_parent_type(resource)
+ scope = tmp
+ end
+
+ scope = subscope(scope, resource)
set_resource_parameters(resource, scope)
@@ -206,6 +211,12 @@ class Puppet::Resource::Type
end
end
+ def evaluate_parent_type(resource)
+ return unless klass = parent_type and parent_resource = resource.scope.compiler.catalog.resource(:class, klass.name)
+ parent_resource.evaluate unless parent_resource.evaluated?
+ return parent_scope(resource.scope, klass)
+ end
+
# Split an fq name into a namespace and name
def namesplit(fullname)
ary = fullname.split("::")
@@ -214,6 +225,10 @@ class Puppet::Resource::Type
return ns, n
end
+ def parent_scope(scope, klass)
+ scope.compiler.class_scope(klass) || raise(Puppet::DevError, "Could not find scope for #{klass.name}")
+ end
+
def set_name_and_namespace(name)
if name.is_a?(Regexp)
@name = name