aboutsummaryrefslogblamecommitdiff
path: root/modules/base_installation/lib/facter/ldapvar.rb
blob: c3379e89ae5ae4033cb45117903777fa41bf22c0 (plain) (tree)
1
2
3
4
5
6
7
8






                                               
                 







                                                                                    
 











                                                         





                                                                            
 
                                 
 


                                                   
             
           
 

            

       

                
   
begin
  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
          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_

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

        data
      end
    end
  end
rescue LoadError
  # No facts
end