diff options
Diffstat (limited to 'lib/puppet')
-rw-r--r-- | lib/puppet/resource/type.rb | 19 |
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 |