]> git.immae.eu Git - perso/Immae/Projets/Puppet.git/blame - modules/base_installation/lib/facter/ldapvar.rb
Filter ldapvar to contain only puppetClient information
[perso/Immae/Projets/Puppet.git] / modules / base_installation / lib / facter / ldapvar.rb
CommitLineData
248bd83e
IB
1begin
2 require 'ldap'
3 require 'puppet/util/ldap/connection'
4
5 Facter.add("ldapvar") do
6 setcode do
7 if Puppet[:node_terminus].to_sym != :ldap
8 data = []
9 else
10 begin
11 conn = Puppet::Util::Ldap::Connection.instance
12 conn.start
13 connection = conn.connection
14 rescue ::LDAP::ResultError => e
15 raise Puppet::ParseError, ("ldapquery(): LDAP ResultError - #{e.message}")
16 end
945ae444 17
248bd83e
IB
18 host = Facter.value('ec2_metadata')["hostname"]
19 base = Puppet[:ldapbase]
20 scope = ::LDAP::LDAP_SCOPE_SUBTREE
21 filter = "(objectclass=*)"
22
23 data = {
24 :self => {},
25 :other => [],
26 }
27
28 connection.search(base, scope, filter) do |entry|
29 data_ = entry.to_hash
97103ded
IB
30 if data_["objectClass"].any? { |class_| class_ == "puppetClient" }
31 data_['vars'] = (data_[Puppet[:ldapstackedattrs]] || [])
32 .map { |var| var.split("=", 2) }
33 .group_by { |(key, value)| key }
34 .map { |key, value| [key, value.map(&:last)] }
35 .to_h
248bd83e 36
97103ded 37 data[:other] << data_
248bd83e 38
97103ded
IB
39 if data_["cn"].any? { |cn| cn == host }
40 data[:self] = data_
41 end
248bd83e 42 end
945ae444 43 end
945ae444 44
248bd83e
IB
45 data
46 end
945ae444
IB
47 end
48 end
248bd83e
IB
49rescue LoadError
50 # No facts
945ae444 51end