[Pkg-puppet-devel] [SCM] Puppet packaging for Debian branch, upstream, updated. 0.25.5-639-g8f94f35
test branch
puppet-dev at googlegroups.com
Wed Jul 14 10:31:56 UTC 2010
The following commit has been merged in the upstream branch:
commit 4f907c66ab3ee973323ef8a14bc5192bcc78967b
Author: Luke Kanies <luke at reductivelabs.com>
Date: Mon Jan 25 17:56:50 2010 -0800
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 at reductivelabs.com>
diff --git a/lib/puppet/parser/scope.rb b/lib/puppet/parser/scope.rb
index b79b344..bb87250 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 7ca95b1..a0bd2dd 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 2fc364d..3de5e50 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
--
Puppet packaging for Debian
More information about the Pkg-puppet-devel
mailing list