mirror of
https://github.com/philippdieter/puppet-ldapquery.git
synced 2026-05-05 15:32:47 +00:00
Rewrite for testability
Testing the methods inside of the function is a complete pain. This moves the code out to use the PuppetX pattern and adds some basic unit tests that validate the logic.
This commit is contained in:
127
lib/puppet_x/ldapquery.rb
Normal file
127
lib/puppet_x/ldapquery.rb
Normal file
@@ -0,0 +1,127 @@
|
||||
# Class: PuppetX::LDAPquery
|
||||
#
|
||||
|
||||
module PuppetX
|
||||
class LDAPquery
|
||||
attr_reader :content
|
||||
|
||||
def initialize(
|
||||
filter,
|
||||
attributes=[],
|
||||
base=Puppet[:ldapbase]
|
||||
)
|
||||
@filter = filter
|
||||
@attributes = attributes
|
||||
@base = base
|
||||
end
|
||||
|
||||
def get_config
|
||||
# Load the configuration variables from Puppet
|
||||
required_vars = [
|
||||
:ldapserver,
|
||||
:ldapport,
|
||||
]
|
||||
|
||||
required_vars.each {|r|
|
||||
unless Puppet[r]
|
||||
raise Puppet::ParseError, "Missing required setting '#{r.to_s}' in puppet.conf"
|
||||
end
|
||||
}
|
||||
|
||||
host = Puppet[:ldapserver]
|
||||
port = Puppet[:ldapport]
|
||||
|
||||
if Puppet[:ldapuser] and Puppet[:ldappassword]
|
||||
user = Puppet[:ldapuser]
|
||||
password = Puppet[:ldappassword]
|
||||
end
|
||||
|
||||
tls = Puppet[:ldaptls]
|
||||
ca_file = "#{Puppet[:confdir]}/ldap_ca.pem"
|
||||
|
||||
conf = {
|
||||
:host => host,
|
||||
:port => port,
|
||||
}
|
||||
|
||||
if user != '' and password != ''
|
||||
conf[:auth] = {
|
||||
:method => :simple,
|
||||
:username => user,
|
||||
:password => password,
|
||||
}
|
||||
end
|
||||
|
||||
if tls
|
||||
conf[:encryption] = {
|
||||
:method => :simple_tls,
|
||||
:tls_options => { :ca_file => ca_file }
|
||||
}
|
||||
end
|
||||
|
||||
Puppet.debug(conf)
|
||||
return conf
|
||||
end
|
||||
|
||||
def get_entries()
|
||||
# Query the LDAP server for attributes using the filter
|
||||
#
|
||||
# Returns: An array of Net::LDAP::Entry objects
|
||||
ldapfilter = @filter
|
||||
attributes = @attributes
|
||||
base = @base
|
||||
|
||||
conf = self.get_config()
|
||||
|
||||
Puppet.debug("Searching ldap base #{base} using #{@filter} for #{@attributes}")
|
||||
|
||||
ldap = Net::LDAP.new(conf)
|
||||
ldapfilter = Net::LDAP::Filter.construct(@filter)
|
||||
|
||||
entries = []
|
||||
|
||||
begin
|
||||
ldap.search(:base => base,
|
||||
:filter => ldapfilter,
|
||||
:attributes => attributes,
|
||||
:time => 10) do |entry|
|
||||
entries << entry
|
||||
end
|
||||
Puppet.debug(entries)
|
||||
return entries
|
||||
rescue
|
||||
return []
|
||||
end
|
||||
end
|
||||
|
||||
def parse_entries
|
||||
data = []
|
||||
entries = get_entries()
|
||||
entries.each do |entry|
|
||||
entry_data = {}
|
||||
entry.each do |attribute, values|
|
||||
|
||||
attr = attribute.to_s
|
||||
|
||||
if values.is_a? Array and values.size > 1
|
||||
entry_data[attr] = []
|
||||
|
||||
values.each do |v|
|
||||
entry_data[attr] << v.chomp
|
||||
end
|
||||
elsif values.is_a? Array and values.size == 1
|
||||
entry_data[attr] = values[0].chomp
|
||||
else
|
||||
entry_data[attr] = values.chomp
|
||||
end
|
||||
end
|
||||
data << entry_data
|
||||
end
|
||||
return data
|
||||
end
|
||||
|
||||
def results
|
||||
parse_entries
|
||||
end
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user