aboutsummaryrefslogtreecommitdiff
path: root/modules/base_installation
diff options
context:
space:
mode:
authorIsmaël Bouya <ismael.bouya@normalesup.org>2018-03-19 16:21:45 +0100
committerIsmaël Bouya <ismael.bouya@normalesup.org>2018-03-19 16:21:45 +0100
commitf4c9ed4c0a32082d8f7b60cee1eb33cb05c85a1c (patch)
treec748ce388c30aa84cc15290aec65b8d3d9542f5d /modules/base_installation
parent433e9279d165bf225c597834b5a7c7ae64c11a27 (diff)
parent97103ded8390d10ea3468615c654e89d07c0a921 (diff)
downloadPuppet-f4c9ed4c0a32082d8f7b60cee1eb33cb05c85a1c.tar.gz
Puppet-f4c9ed4c0a32082d8f7b60cee1eb33cb05c85a1c.tar.zst
Puppet-f4c9ed4c0a32082d8f7b60cee1eb33cb05c85a1c.zip
Merge branch 'ldap_lookup' into dev
Diffstat (limited to 'modules/base_installation')
-rw-r--r--modules/base_installation/lib/facter/ldapvar.rb18
-rw-r--r--modules/base_installation/lib/puppet/functions/ldap_data.rb46
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 @@
1require 'json'
2
3Puppet::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
46end