This is basically the fix suggested on the ticket, cleaned up and ruby-ized, with tests. The only functional modification is leaving the default on entry2hash as --no-fqdn to preserve 0.25.1 behaviour as the default.
Signed- ff-by: Markus Roberts <[email protected]> Signed-off-by: Markus Roberts <[email protected]> --- lib/puppet/application/puppetrun.rb | 4 ++-- lib/puppet/indirector/node/ldap.rb | 9 ++++++--- spec/unit/application/puppetrun.rb | 14 ++++++++++++-- spec/unit/indirector/node/ldap.rb | 26 ++++++++++++++++++++------ 4 files changed, 40 insertions(+), 13 deletions(-) diff --git a/lib/puppet/application/puppetrun.rb b/lib/puppet/application/puppetrun.rb index 2dbd803..b5b273d 100644 --- a/lib/puppet/application/puppetrun.rb +++ b/lib/puppet/application/puppetrun.rb @@ -176,12 +176,12 @@ Puppet::Application.new(:puppetrun) do if Puppet[:node_terminus] == "ldap" and (options[:all] or @classes) if options[:all] - @hosts = Puppet::Node.search("whatever").collect { |node| node.name } + @hosts = Puppet::Node.search("whatever", :fqdn => options[:fqdn]).collect { |node| node.name } puts "all: %s" % @hosts.join(", ") else @hosts = [] @classes.each do |klass| - list = Puppet::Node.search("whatever", :class => klass).collect { |node| node.name } + list = Puppet::Node.search("whatever", :fqdn => options[:fqdn], :class => klass).collect { |node| node.name } puts "%s: %s" % [klass, list.join(", ")] @hosts += list diff --git a/lib/puppet/indirector/node/ldap.rb b/lib/puppet/indirector/node/ldap.rb index dd8cebf..954bc8d 100644 --- a/lib/puppet/indirector/node/ldap.rb +++ b/lib/puppet/indirector/node/ldap.rb @@ -55,7 +55,7 @@ class Puppet::Node::Ldap < Puppet::Indirector::Ldap end infos = [] - ldapsearch(filter) { |entry| infos << entry2hash(entry) } + ldapsearch(filter) { |entry| infos << entry2hash(entry, request.options[:fqdn]) } return infos.collect do |info| info2node(info[:name], info) @@ -78,9 +78,12 @@ class Puppet::Node::Ldap < Puppet::Indirector::Ldap end # Convert the found entry into a simple hash. - def entry2hash(entry) + def entry2hash(entry, fqdn = false) result = {} - result[:name] = entry.dn.split(',')[0].split("=")[1] + + cn = entry.dn[ /cn\s*=\s*([^,\s]+)/i,1] + dcs = entry.dn.scan(/dc\s*=\s*([^,\s]+)/i) + result[:name] = fqdn ? ([cn]+dcs).join('.') : cn result[:parent] = get_parent_from_entry(entry) if parent_attribute result[:classes] = get_classes_from_entry(entry) result[:stacked] = get_stacked_values_from_entry(entry) diff --git a/spec/unit/application/puppetrun.rb b/spec/unit/application/puppetrun.rb index d44b406..26811f0 100755 --- a/spec/unit/application/puppetrun.rb +++ b/spec/unit/application/puppetrun.rb @@ -144,11 +144,21 @@ describe "puppetrun" do Puppet.stubs(:[]).with(:node_terminus).returns("ldap") end + it "should pass the fqdn option to search" do + @puppetrun.options.stubs(:[]).with(:fqdn).returns(:something) + @puppetrun.options.stubs(:[]).with(:all).returns(true) + @puppetrun.stubs(:puts) + + Puppet::Node.expects(:search).with("whatever",:fqdn => :something).returns([]) + + @puppetrun.run_setup + end + it "should search for all nodes if --all" do @puppetrun.options.stubs(:[]).with(:all).returns(true) @puppetrun.stubs(:puts) - Puppet::Node.expects(:search).with("whatever").returns([]) + Puppet::Node.expects(:search).with("whatever",:fqdn => nil).returns([]) @puppetrun.run_setup end @@ -158,7 +168,7 @@ describe "puppetrun" do @puppetrun.stubs(:puts) @puppetrun.classes = ['class'] - Puppet::Node.expects(:search).with("whatever", :class => "class").returns([]) + Puppet::Node.expects(:search).with("whatever", :class => "class", :fqdn => nil).returns([]) @puppetrun.run_setup end diff --git a/spec/unit/indirector/node/ldap.rb b/spec/unit/indirector/node/ldap.rb index e25bc36..953a8c2 100755 --- a/spec/unit/indirector/node/ldap.rb +++ b/spec/unit/indirector/node/ldap.rb @@ -38,7 +38,7 @@ describe Puppet::Node::Ldap do # This heavily tests our entry2hash method, so we don't have to stub out the stupid entry information any more. describe "when an ldap entry is found" do before do - @entry = stub 'entry', :dn => 'cn=mynode.domain.com,ou=hosts,dc=madstop,dc=com', :vals => %w{}, :to_hash => {} + @entry = stub 'entry', :dn => 'cn=mynode,ou=hosts,dc=madstop,dc=com', :vals => %w{}, :to_hash => {} @searcher.stubs(:ldapsearch).yields @entry end @@ -46,8 +46,12 @@ describe Puppet::Node::Ldap do @searcher.entry2hash(@entry).should be_instance_of(Hash) end - it "should add the entry's common name to the hash" do - @searcher.entry2hash(@entry)[:name].should == "mynode.domain.com" + it "should add the entry's common name to the hash if fqdn if false" do + @searcher.entry2hash(@entry,fqdn = false)[:name].should == "mynode" + end + + it "should add the entry's fqdn name to the hash if fqdn if true" do + @searcher.entry2hash(@entry,fqdn = true)[:name].should == "mynode.madstop.com" end it "should add all of the entry's classes to the hash" do @@ -341,13 +345,13 @@ describe Puppet::Node::Ldap do it "should process each found entry" do # .yields can't be used to yield multiple values :/ @searcher.expects(:ldapsearch).yields("one") - @searcher.expects(:entry2hash).with("one").returns(:name => "foo") + @searcher.expects(:entry2hash).with("one",nil).returns(:name => "foo") @searcher.search @request end it "should return a node for each processed entry with the name from the entry" do @searcher.expects(:ldapsearch).yields("whatever") - @searcher.expects(:entry2hash).with("whatever").returns(:name => "foo") + @searcher.expects(:entry2hash).with("whatever",nil).returns(:name => "foo") result = @searcher.search(@request) result[0].should be_instance_of(Puppet::Node) result[0].name.should == "foo" @@ -358,7 +362,17 @@ describe Puppet::Node::Ldap do Puppet::Node.expects(:new).with("foo").returns node node.expects(:fact_merge) @searcher.stubs(:ldapsearch).yields("one") - @searcher.stubs(:entry2hash).with("one").returns(:name => "foo") + @searcher.stubs(:entry2hash).with("one",nil).returns(:name => "foo") + @searcher.search(@request) + end + + it "should pass the request's fqdn option to entry2hash" do + node = mock 'node' + @options[:fqdn] = :hello + Puppet::Node.stubs(:new).with("foo").returns node + node.stubs(:fact_merge) + @searcher.stubs(:ldapsearch).yields("one") + @searcher.expects(:entry2hash).with("one",:hello).returns(:name => "foo") @searcher.search(@request) end end -- 1.6.4 -- You received this message because you are subscribed to the Google Groups "Puppet Developers" group. To post to this group, send email to [email protected]. To unsubscribe from this group, send email to [email protected]. For more options, visit this group at http://groups.google.com/group/puppet-dev?hl=en.
