diff options
| -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 |
