diff options
| author | Matt Robinson <matt@puppetlabs.com> | 2011-02-01 15:53:49 -0800 |
|---|---|---|
| committer | Matt Robinson <matt@puppetlabs.com> | 2011-02-01 15:53:49 -0800 |
| commit | 846012158d08fbfbfb83d66652788a46e4eaf2c6 (patch) | |
| tree | 338118fc785dff9ca8cc108804f8574cfe9a9b60 /lib | |
| parent | 9550a884b7910b9863a230bcb166b5d805cbb06f (diff) | |
| parent | 3cfbd0722c5f64a3ef39a65f53fa4195135e90b4 (diff) | |
| download | puppet-846012158d08fbfbfb83d66652788a46e4eaf2c6.tar.gz puppet-846012158d08fbfbfb83d66652788a46e4eaf2c6.tar.xz puppet-846012158d08fbfbfb83d66652788a46e4eaf2c6.zip | |
Merge branch 'ticket/2.6.next/5045' into 2.6.next
* ticket/2.6.next/5045:
(#5045) Cleaning up some tests and code
(#5045) External node classifiers should be able to specify params for classes
(#5045) Adds support to resource/type to also accept a param hash
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/puppet/parser/compiler.rb | 21 | ||||
| -rw-r--r-- | lib/puppet/resource/type.rb | 14 |
2 files changed, 29 insertions, 6 deletions
diff --git a/lib/puppet/parser/compiler.rb b/lib/puppet/parser/compiler.rb index c60e1d4fb..fdabd05c9 100644 --- a/lib/puppet/parser/compiler.rb +++ b/lib/puppet/parser/compiler.rb @@ -139,12 +139,23 @@ class Puppet::Parser::Compiler def evaluate_classes(classes, scope, lazy_evaluate = true) raise Puppet::DevError, "No source for scope passed to evaluate_classes" unless scope.source found = [] + param_classes = nil + # if we are a param class, save the classes hash + # and transform classes to be the keys + if classes.class == Hash + param_classes = classes + classes = classes.keys + end classes.each do |name| # If we can find the class, then make a resource that will evaluate it. if klass = scope.find_hostclass(name) - found << name and next if scope.class_scope(klass) - resource = klass.ensure_in_catalog(scope) + if param_classes + resource = klass.ensure_in_catalog(scope, param_classes[name] || {}) + else + found << name and next if scope.class_scope(klass) + resource = klass.ensure_in_catalog(scope) + end # If they've disabled lazy evaluation (which the :include function does), # then evaluate our resource immediately. @@ -432,7 +443,11 @@ class Puppet::Parser::Compiler @resources = [] # Make sure any external node classes are in our class list - @catalog.add_class(*@node.classes) + if @node.classes.class == Hash + @catalog.add_class(*@node.classes.keys) + else + @catalog.add_class(*@node.classes) + end end # Set the node's parameters into the top-scope as variables. diff --git a/lib/puppet/resource/type.rb b/lib/puppet/resource/type.rb index d40adc145..92e1ef719 100644 --- a/lib/puppet/resource/type.rb +++ b/lib/puppet/resource/type.rb @@ -143,18 +143,26 @@ class Puppet::Resource::Type # classes and nodes. No parameters are be supplied--if this is a # parameterized class, then all parameters take on their default # values. - def ensure_in_catalog(scope) + def ensure_in_catalog(scope, parameters=nil) type == :definition and raise ArgumentError, "Cannot create resources for defined resource types" resource_type = type == :hostclass ? :class : :node # Do nothing if the resource already exists; this makes sure we don't # get multiple copies of the class resource, which helps provide the # singleton nature of classes. - if resource = scope.catalog.resource(resource_type, name) + # we should not do this for classes with parameters + # if parameters are passed, we should still try to create the resource + # even if it exists so that we can fail + # this prevents us from being able to combine param classes with include + if resource = scope.catalog.resource(resource_type, name) and !parameters return resource end - resource = Puppet::Parser::Resource.new(resource_type, name, :scope => scope, :source => self) + if parameters + parameters.each do |k,v| + resource.set_parameter(k,v) + end + end instantiate_resource(scope, resource) scope.compiler.add_resource(scope, resource) resource |
