]>
Commit | Line | Data |
---|---|---|
e8493916 IB |
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' | |
a55a5e4a | 13 | rescue LoadError |
e8493916 IB |
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 |