Issue #2765 has been reported by Mr Paxos.
----------------------------------------
Bug #2765: puppetrun --no-fqdn configuration option seems broken
http://projects.reductivelabs.com/issues/2765
Author: Mr Paxos
Status: Unreviewed
Priority: Normal
Assigned to:
Category:
Target version:
Affected version: 0.25.1
Keywords: puppetrun ldap fqdn no-fqdn
Branch:
puppetrun as of 0.25.1 always uses the cn= value of the dn: as the entire
node's hostname.
Earlier versions (I checked 0.23.2) of puppetrun would default to building a
fqdn using the cn= and dc= fields on the dn:. Puppetrun could be instructed to
only use the cn= value for the hostname by using the configuration option
--no-fqdn.
The ability to construct the fqdn using the dc= fields is important when
managing subdomains. Take for instance the following two dn:'s,
dn: cn=alpha,ou=Hosts,dc=sub1,dc=example,dc=com
dn: cn=alpha,ou=Hosts,dc=sub2,dc=example,dc=com
With the current logic in puppetrun, these two different dn:'s would evaluate
to 'alpha' which is a bit ambiguous. The work-around is to put the fqdn into
the cn= field. However, this breaks other uses of ldap.
I tried to add this functionality back into puppetrun. Be advised that I do
not speak ruby at all. Take the following diff's as a proof of concept and
nothing more.
<pre>
--- /usr/lib64/ruby/site_ruby/1.8/puppet/indirector/node/ldap.rb
2009-10-30 17:43:20.000000000 -0700
+++ ldap.rb 2009-10-30 17:42:52.000000000 -0700
@@ -55,7 +55,7 @@
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,15 @@
end
# Convert the found entry into a simple hash.
- def entry2hash(entry)
+ def entry2hash(entry, fqdn = true)
result = {}
- result[:name] = entry.dn.split(',')[0].split("=")[1]
+
+ if fqdn
+ result[:name] = entry.dn.sub("cn=",'').sub(/ou=hosts,/i,
'').gsub(",dc=",".")
+ else
+ result[:name] = entry.dn.split(',')[0].split("=")[1]
+ end
+
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)
--- /usr/lib64/ruby/site_ruby/1.8/puppet/application/puppetrun.rb
2009-10-30 17:43:19.000000000 -0700
+++ puppetrun.rb 2009-10-30 17:43:07.000000000 -0700
@@ -176,12 +176,12 @@
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
</pre>
--
You have received this notification because you have either subscribed to it,
or are involved in it.
To change your notification preferences, please click here:
http://reductivelabs.com/redmine/my/account
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"Puppet Bugs" 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-bugs?hl=en
-~----------~----~----~----~------~----~------~--~---