From e8493916ff6e957c752df1cfc1789844c426d987 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Isma=C3=ABl=20Bouya?= Date: Mon, 19 Mar 2018 16:02:30 +0100 Subject: Add ldap backend for hiera lookup --- .../lib/puppet/functions/ldap_data.rb | 46 ++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 modules/base_installation/lib/puppet/functions/ldap_data.rb (limited to 'modules/base_installation') 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 @@ +require 'json' + +Puppet::Functions.create_function(:ldap_data) do + dispatch :ldap_data do + param 'Hash', :options + param 'Puppet::LookupContext', :context + end + + def ldap_data(options, context) + begin + require 'ldap' + require 'puppet/util/ldap/connection' + rescue + context.not_found + return + end + + if !context.cache_has_key("ldap_lookup") + begin + conn = Puppet::Util::Ldap::Connection.instance + conn.start + connection = conn.connection + rescue ::LDAP::ResultError => e + raise Puppet::ParseError, ("ldapquery(): LDAP ResultError - #{e.message}") + end + + host = Facter.value('ec2_metadata')["hostname"] + base = Puppet[:ldapbase] + scope = ::LDAP::LDAP_SCOPE_SUBTREE + filter = "(objectclass=*)" + + data = {} + connection.search(base, scope, filter) do |entry| + data_ = entry.to_hash + jsons = data_["immaePuppetJson"] || [] + jsons.each do |json| + data.merge!(JSON.parse(json)) + end + end + + context.cache("ldap_lookup", data) + end + + context.cached_value("ldap_lookup") + end +end -- cgit v1.2.3 From 97103ded8390d10ea3468615c654e89d07c0a921 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Isma=C3=ABl=20Bouya?= Date: Mon, 19 Mar 2018 16:00:01 +0100 Subject: Filter ldapvar to contain only puppetClient information --- modules/base_installation/lib/facter/ldapvar.rb | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) (limited to 'modules/base_installation') 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 connection.search(base, scope, filter) do |entry| data_ = entry.to_hash - data_['vars'] = (data_[Puppet[:ldapstackedattrs]] || []) - .map { |var| var.split("=", 2) } - .group_by { |(key, value)| key } - .map { |key, value| [key, value.map(&:last)] } - .to_h + if data_["objectClass"].any? { |class_| class_ == "puppetClient" } + data_['vars'] = (data_[Puppet[:ldapstackedattrs]] || []) + .map { |var| var.split("=", 2) } + .group_by { |(key, value)| key } + .map { |key, value| [key, value.map(&:last)] } + .to_h - data[:other] << data_ + data[:other] << data_ - if data_["cn"].any? { |cn| cn == host } - data[:self] = data_ + if data_["cn"].any? { |cn| cn == host } + data[:self] = data_ + end end end -- cgit v1.2.3