# class Puppet::Indirector::Ldap

### Public Instance Methods

connection() click to toggle source

Create an ldap connection.

    # File lib/puppet/indirector/ldap.rb, line 63
    def connection
      unless @connection
        raise Puppet::Error, "Could not set up LDAP Connection: Missing ruby/ldap libraries" unless Puppet.features.ldap?
        begin
          conn = Puppet::Util::Ldap::Connection.instance
          conn.start
          @connection = conn.connection
        rescue => detail
          message = "Could not connect to LDAP: #{detail}"
          Puppet.log_exception(detail, message)
          raise Puppet::Error, message
        end
      end

      @connection
    end

find(request) click to toggle source

Perform our ldap search and process the result.

    # File lib/puppet/indirector/ldap.rb, line 6
    def find(request)
      ldapsearch(search_filter(request.key)) { |entry| return process(entry) } || nil
    end

ldapsearch(filter) { |entry| ... } click to toggle source

Find the ldap node, return the class list and parent node specially, and everything else in a parameter hash.

    # File lib/puppet/indirector/ldap.rb, line 32
    def ldapsearch(filter)
      raise ArgumentError.new("You must pass a block to ldapsearch") unless block_given?

      found = false
      count = 0

      begin
        connection.search(search_base, 2, filter, search_attributes) do |entry|
          found = true
          yield entry
        end
      rescue SystemExit,NoMemoryError
        raise
      rescue Exception => detail
        if count == 0
          # Try reconnecting to ldap if we get an exception and we haven't yet retried.
          count += 1
          @connection = nil
          Puppet.warning "Retrying LDAP connection"
          retry
        else
          error = Puppet::Error.new("LDAP Search failed")
          error.set_backtrace(detail.backtrace)
          raise error
        end
      end

      found
    end

process(entry) click to toggle source

Process the found entry. We assume that we don’t just want the ldap object.

    # File lib/puppet/indirector/ldap.rb, line 12
    def process(entry)
      raise Puppet::DevError, "The 'process' method has not been overridden for the LDAP terminus for #{self.name}"
    end

search_attributes() click to toggle source

Default to all attributes.

    # File lib/puppet/indirector/ldap.rb, line 17
    def search_attributes
      nil
    end

search_base() click to toggle source

    # File lib/puppet/indirector/ldap.rb, line 21
    def search_base
      Puppet[:ldapbase]
    end

search_filter(name) click to toggle source

The ldap search filter to use.

    # File lib/puppet/indirector/ldap.rb, line 26
    def search_filter(name)
      raise Puppet::DevError, "No search string set for LDAP terminus for #{self.name}"
    end