aboutsummaryrefslogblamecommitdiff
path: root/modules/base_installation/lib/facter/ldapvar.rb
blob: ff8e898271c53352b33c763b67bc52831e5ee26a (plain) (tree)













































                                                                                  
require 'ldap'
require 'puppet/util/ldap/connection'

Facter.add("ldapvar") do
  setcode do
    if Puppet[:node_terminus].to_sym != :ldap
      data = []
    else
      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 = {
        :self  => {},
        :other => [],
      }

      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

        data[:other] << data_

        if data_["cn"].any? { |cn| cn == host }
          data[:self] = data_
        end
      end

      data
    end
  end
end