diff options
Diffstat (limited to 'modules')
-rw-r--r-- | modules/base_installation/lib/facter/ldapvar.rb | 18 | ||||
-rw-r--r-- | modules/base_installation/lib/puppet/functions/ldap_data.rb | 46 |
2 files changed, 56 insertions, 8 deletions
diff --git a/modules/base_installation/lib/facter/ldapvar.rb b/modules/base_installation/lib/facter/ldapvar.rb index 3ee6623..08d58e4 100644 --- a/modules/base_installation/lib/facter/ldapvar.rb +++ b/modules/base_installation/lib/facter/ldapvar.rb | |||
@@ -27,16 +27,18 @@ begin | |||
27 | 27 | ||
28 | connection.search(base, scope, filter) do |entry| | 28 | connection.search(base, scope, filter) do |entry| |
29 | data_ = entry.to_hash | 29 | data_ = entry.to_hash |
30 | data_['vars'] = (data_[Puppet[:ldapstackedattrs]] || []) | 30 | if data_["objectClass"].any? { |class_| class_ == "puppetClient" } |
31 | .map { |var| var.split("=", 2) } | 31 | data_['vars'] = (data_[Puppet[:ldapstackedattrs]] || []) |
32 | .group_by { |(key, value)| key } | 32 | .map { |var| var.split("=", 2) } |
33 | .map { |key, value| [key, value.map(&:last)] } | 33 | .group_by { |(key, value)| key } |
34 | .to_h | 34 | .map { |key, value| [key, value.map(&:last)] } |
35 | .to_h | ||
35 | 36 | ||
36 | data[:other] << data_ | 37 | data[:other] << data_ |
37 | 38 | ||
38 | if data_["cn"].any? { |cn| cn == host } | 39 | if data_["cn"].any? { |cn| cn == host } |
39 | data[:self] = data_ | 40 | data[:self] = data_ |
41 | end | ||
40 | end | 42 | end |
41 | end | 43 | end |
42 | 44 | ||
diff --git a/modules/base_installation/lib/puppet/functions/ldap_data.rb b/modules/base_installation/lib/puppet/functions/ldap_data.rb new file mode 100644 index 0000000..ff8d779 --- /dev/null +++ b/modules/base_installation/lib/puppet/functions/ldap_data.rb | |||
@@ -0,0 +1,46 @@ | |||
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 | ||
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 | ||