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