[Pkg-puppet-devel] [SCM] Puppet packaging for Debian branch, upstream, updated. puppet-0.24.5-rc3-1456-g2f0b1e5
James Turnbull
james at lovedthanlost.net
Tue Oct 27 17:05:14 UTC 2009
The following commit has been merged in the upstream branch:
commit 361c50210172ffe484550a19db3a8d10d86edc09
Author: Brice Figureau <brice-puppet at daysofwonder.com>
Date: Tue Sep 15 21:01:48 2009 +0200
Fix #2638 - Allow creating several nodes with matching names
When we are checking if a node exists before creating a new one
we were also trying to match with regex node names, finding matches
where in fact there is no equality.
Signed-off-by: Brice Figureau <brice-puppet at daysofwonder.com>
diff --git a/lib/puppet/parser/loaded_code.rb b/lib/puppet/parser/loaded_code.rb
index 065fcb9..3efd115 100644
--- a/lib/puppet/parser/loaded_code.rb
+++ b/lib/puppet/parser/loaded_code.rb
@@ -36,6 +36,10 @@ class Puppet::Parser::LoadedCode
nil
end
+ def node_exists?(name)
+ @nodes[check_name(name)]
+ end
+
def nodes?
@nodes.length > 0
end
diff --git a/lib/puppet/parser/parser_support.rb b/lib/puppet/parser/parser_support.rb
index dfc14e0..4fe2a5a 100644
--- a/lib/puppet/parser/parser_support.rb
+++ b/lib/puppet/parser/parser_support.rb
@@ -376,7 +376,7 @@ class Puppet::Parser::Parser
doc = lexer.getcomment
names.collect do |name|
name = AST::HostName.new :value => name unless name.is_a?(AST::HostName)
- if other = @loaded_code.node(name)
+ if other = @loaded_code.node_exists?(name)
error("Node %s is already defined at %s:%s; cannot redefine" % [other.name, other.file, other.line])
end
name = name.to_s if name.is_a?(Symbol)
diff --git a/spec/unit/parser/loaded_code.rb b/spec/unit/parser/loaded_code.rb
index ca4b0aa..75f2bc7 100644
--- a/spec/unit/parser/loaded_code.rb
+++ b/spec/unit/parser/loaded_code.rb
@@ -156,7 +156,24 @@ describe Puppet::Parser::LoadedCode do
nameout = Puppet::Parser::AST::HostName.new(:value => "foo")
@loader.add_node(namein, "bar")
- @loader.node(nameout) == "bar"
+ @loader.node(nameout).should == "bar"
+ end
+
+ it "should be able to find node by HostName strict equality" do
+ namein = Puppet::Parser::AST::HostName.new(:value => "foo")
+ nameout = Puppet::Parser::AST::HostName.new(:value => "foo")
+
+ @loader.add_node(namein, "bar")
+ @loader.node_exists?(nameout).should == "bar"
+ end
+
+ it "should not use node name matching when finding with strict node HostName" do
+ name1 = Puppet::Parser::AST::HostName.new(:value => "foo")
+ name2 = Puppet::Parser::AST::HostName.new(:value => Puppet::Parser::AST::Regex.new(:value => /foo/))
+
+ @loader.add_node(name1, "bar")
+ @loader.add_node(name2, "baz")
+ @loader.node_exists?(name1).should == "bar"
end
it "should return the first matching regex nodename" do
diff --git a/spec/unit/parser/parser.rb b/spec/unit/parser/parser.rb
index 9127599..842dc19 100755
--- a/spec/unit/parser/parser.rb
+++ b/spec/unit/parser/parser.rb
@@ -253,7 +253,7 @@ describe Puppet::Parser do
end
it "should raise an error if the node already exists" do
- @loaded_code.stubs(:node).with(@nodename).returns(@node)
+ @loaded_code.stubs(:node_exists?).with(@nodename).returns(@node)
lambda { @parser.newnode(@nodename) }.should raise_error
end
--
Puppet packaging for Debian
More information about the Pkg-puppet-devel
mailing list