diff options
author | Luke Kanies <luke@reductivelabs.com> | 2010-01-25 17:56:50 -0800 |
---|---|---|
committer | test branch <puppet-dev@googlegroups.com> | 2010-02-17 06:50:53 -0800 |
commit | 4f907c66ab3ee973323ef8a14bc5192bcc78967b (patch) | |
tree | 3628bd2b757a054b37445504ddcc0e3b68d58c1e | |
parent | 2fa0a489e26fc2512783c67b1b4579a03f8a20a6 (diff) | |
download | puppet-4f907c66ab3ee973323ef8a14bc5192bcc78967b.tar.gz puppet-4f907c66ab3ee973323ef8a14bc5192bcc78967b.tar.xz puppet-4f907c66ab3ee973323ef8a14bc5192bcc78967b.zip |
TypeCollection now supports namespace arrays
We previously only supported a single namespace when searching for
resource types et al, but the whole system actually relies on
an array of namespaces and search paths, so this adds
that functionality all the way down, as it were.
Signed-off-by: Luke Kanies <luke@reductivelabs.com>
-rw-r--r-- | lib/puppet/parser/scope.rb | 15 | ||||
-rw-r--r-- | lib/puppet/resource/type_collection.rb | 27 | ||||
-rw-r--r-- | spec/unit/resource/type_collection.rb | 11 |
3 files changed, 29 insertions, 24 deletions
diff --git a/lib/puppet/parser/scope.rb b/lib/puppet/parser/scope.rb index b79b344e3..bb8725096 100644 --- a/lib/puppet/parser/scope.rb +++ b/lib/puppet/parser/scope.rb @@ -22,6 +22,7 @@ class Puppet::Parser::Scope attr_accessor :base, :keyword, :nodescope attr_accessor :top, :translated, :compiler attr_accessor :parent + attr_reader :namespaces # A demeterific shortcut to the catalog. def catalog @@ -86,21 +87,11 @@ class Puppet::Parser::Scope end def find_hostclass(name) - @namespaces.each do |namespace| - if r = known_resource_types.find_hostclass(namespace, name) - return r - end - end - return nil + known_resource_types.find_hostclass(namespaces, name) end def find_definition(name) - @namespaces.each do |namespace| - if r = known_resource_types.find_definition(namespace, name) - return r - end - end - return nil + known_resource_types.find_definition(namespaces, name) end def findresource(string, name = nil) diff --git a/lib/puppet/resource/type_collection.rb b/lib/puppet/resource/type_collection.rb index 7ca95b1b8..a0bd2ddf5 100644 --- a/lib/puppet/resource/type_collection.rb +++ b/lib/puppet/resource/type_collection.rb @@ -75,24 +75,31 @@ class Puppet::Resource::TypeCollection @definitions[munge_name(name)] end - def find(namespace, name, type) + def find(namespaces, name, type) if r = find_fully_qualified(name, type) return r end - ary = namespace.split("::") + namespaces = Array(namespaces) - while ary.length > 0 - tmp_namespace = ary.join("::") - if r = find_partially_qualified(tmp_namespace, name, type) - return r + namespaces.each do |namespace| + ary = namespace.split("::") + + while ary.length > 0 + tmp_namespace = ary.join("::") + if r = find_partially_qualified(tmp_namespace, name, type) + return r + end + + # Delete the second to last object, which reduces our namespace by one. + ary.pop end - # Delete the second to last object, which reduces our namespace by one. - ary.pop + if result = send(type, name) + return result + end end - - send(type, name) + nil end def find_node(name) diff --git a/spec/unit/resource/type_collection.rb b/spec/unit/resource/type_collection.rb index 2fc364d6b..3de5e504b 100644 --- a/spec/unit/resource/type_collection.rb +++ b/spec/unit/resource/type_collection.rb @@ -127,14 +127,21 @@ describe Puppet::Resource::TypeCollection do loader.find("namespace", "::foo::bar", :hostclass).should be_nil end - it "should return the partially qualified object if it exists in the provided namespace" do + it "should return the partially qualified object if it exists in a provided namespace" do loader = Puppet::Resource::TypeCollection.new("env") instance = Puppet::Resource::Type.new(:hostclass, "foo::bar::baz") loader.add instance loader.find("foo", "bar::baz", :hostclass).should equal(instance) end - it "should return the unqualified object if it exists in the provided namespace" do + it "should be able to find partially qualified objects in any of the provided namespaces" do + loader = Puppet::Resource::TypeCollection.new("env") + instance = Puppet::Resource::Type.new(:hostclass, "foo::bar::baz") + loader.add instance + loader.find(["nons", "foo", "otherns"], "bar::baz", :hostclass).should equal(instance) + end + + it "should return the unqualified object if it exists in a provided namespace" do loader = Puppet::Resource::TypeCollection.new("env") instance = Puppet::Resource::Type.new(:hostclass, "foo::bar") loader.add instance |