]> git.immae.eu Git - perso/Immae/Projets/Puppet.git/blob - modules/base_installation/lib/puppet/functions/ldap_data.rb
0c92d8988dbf5cf047e21d25e395dc92c6d2efbb
[perso/Immae/Projets/Puppet.git] / modules / base_installation / lib / puppet / functions / ldap_data.rb
1 require 'json'
2
3 Puppet::Functions.create_function(:ldap_data) do
4 dispatch :ldap_data do
5 param 'Hash', :options
6 param 'Puppet::LookupContext', :context
7 end
8
9 def ldap_data(options, context)
10 begin
11 require 'ldap'
12 require 'puppet/util/ldap/connection'
13 rescue LoadError
14 context.not_found
15 return
16 end
17
18 if !context.cache_has_key("ldap_lookup")
19 begin
20 conn = Puppet::Util::Ldap::Connection.instance
21 conn.start
22 connection = conn.connection
23 rescue ::LDAP::ResultError => e
24 raise Puppet::ParseError, ("ldapquery(): LDAP ResultError - #{e.message}")
25 end
26
27 host = Facter.value('ec2_metadata')["hostname"]
28 base = Puppet[:ldapbase]
29 scope = ::LDAP::LDAP_SCOPE_SUBTREE
30 filter = "(objectclass=*)"
31
32 data = {}
33 connection.search(base, scope, filter) do |entry|
34 data_ = entry.to_hash
35 jsons = data_["immaePuppetJson"] || []
36 jsons.each do |json|
37 data.merge!(JSON.parse(json))
38 end
39 end
40
41 context.cache("ldap_lookup", data)
42 end
43
44 context.cached_value("ldap_lookup")
45 end
46 end