Class: Puppet::Provider::Ldap
- Inherits:
-
Puppet::Provider
- Object
- Puppet::Provider
- Puppet::Provider::Ldap
- Defined in:
- lib/puppet/provider/ldap.rb
Overview
The base class for LDAP providers.
Constant Summary
Constants inherited from Puppet::Provider
Constants included from Util
Util::ALNUM, Util::ALPHA, Util::AbsolutePathPosix, Util::AbsolutePathWindows, Util::DEFAULT_POSIX_MODE, Util::DEFAULT_WINDOWS_MODE, Util::ESCAPED, Util::HEX, Util::HttpProxy, Util::PUPPET_STACK_INSERTION_FRAME, Util::RESERVED, Util::RFC_3986_URI_REGEX, Util::UNRESERVED, Util::UNSAFE
Constants included from Util::POSIX
Util::POSIX::LOCALE_ENV_VARS, Util::POSIX::USER_ENV_VARS
Constants included from Util::SymbolicFileMode
Util::SymbolicFileMode::SetGIDBit, Util::SymbolicFileMode::SetUIDBit, Util::SymbolicFileMode::StickyBit, Util::SymbolicFileMode::SymbolicMode, Util::SymbolicFileMode::SymbolicSpecialToBit
Constants included from Util::Docs
Class Attribute Summary collapse
- .manager ⇒ Object readonly
Attributes inherited from Puppet::Provider
Attributes included from Util::Docs
Class Method Summary collapse
-
.instances ⇒ Object
Look up all instances at our location.
-
.manages(*args) ⇒ Object
Specify the ldap manager for this provider, which is used to figure out how we actually interact with ldap.
-
.prefetch(resources) ⇒ Object
Query all of our resources from ldap.
Instance Method Summary collapse
- #create ⇒ Object
- #delete ⇒ Object
- #exists? ⇒ Boolean
-
#flush ⇒ Object
Apply our changes to ldap, yo.
-
#initialize(*args) ⇒ Ldap
constructor
A new instance of Ldap.
-
#ldap_properties ⇒ Object
Return the current state of ldap.
- #manager ⇒ Object
-
#properties ⇒ Object
Return (and look up if necessary) the desired state.
-
#query ⇒ Object
Collect the current attributes from ldap.
Methods inherited from Puppet::Provider
#<=>, #clear, command, #command, commands, declared_feature?, default?, default_match, defaultfor, execpipe, #execpipe, execute, #execute, fact_match, feature_match, #get, has_command, initvars, #inspect, mk_resource_methods, #name, notdefaultfor, optional_commands, post_resource_eval, #set, some_default_match, specificity, supports_parameter?, #to_s
Methods included from Util::Logging
#clear_deprecation_warnings, #debug, #deprecation_warning, #format_backtrace, #format_exception, #get_deprecation_offender, #log_and_raise, #log_deprecations_to_file, #log_exception, #puppet_deprecation_warning, #send_log, setup_facter_logging!, #warn_once
Methods included from Util
absolute_path?, benchmark, chuser, clear_environment, create_erb, default_env, deterministic_rand, deterministic_rand_int, exit_on_fail, format_backtrace_array, format_puppetstack_frame, get_env, get_environment, logmethods, merge_environment, path_to_uri, pretty_backtrace, replace_file, resolve_stackframe, rfc2396_escape, safe_posix_fork, set_env, skip_external_facts, symbolizehash, thinmark, uri_encode, uri_query_encode, uri_to_path, uri_unescape, which, withenv, withumask
Methods included from Util::POSIX
#get_posix_field, #gid, groups_of, #idfield, #methodbyid, #methodbyname, #search_posix_field, #uid
Methods included from Util::SymbolicFileMode
#display_mode, #normalize_symbolic_mode, #symbolic_mode_to_int, #valid_symbolic_mode?
Methods included from Util::Docs
#desc, #dochook, #doctable, #markdown_definitionlist, #markdown_header, #nodoc?, #pad, scrub
Methods included from Util::Warnings
clear_warnings, debug_once, maybe_log, notice_once, warnonce
Methods included from Confiner
#confine, #confine_collection, #suitable?
Methods included from Util::Errors
#adderrorcontext, #devfail, #error_context, error_location, error_location_with_space, error_location_with_unknowns, #exceptwrap, #fail
Constructor Details
#initialize(*args) ⇒ Ldap
Returns a new instance of Ldap.
81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 |
# File 'lib/puppet/provider/ldap.rb', line 81 def initialize(*args) raise(Puppet::DevError, _("No LDAP Configuration defined for %{class_name}") % { class_name: self.class }) unless self.class.manager raise(Puppet::DevError, _("Invalid LDAP Configuration defined for %{class_name}") % { class_name: self.class }) unless self.class.manager.valid? super @property_hash = @property_hash.each_with_object({}) do |ary, result| param, values = ary # Skip any attributes we don't manage. next result unless self.class.resource_type.valid_parameter?(param) paramclass = self.class.resource_type.attrclass(param) unless values.is_a?(Array) result[param] = values next result end # Only use the first value if the attribute class doesn't manage # arrays of values. if paramclass.superclass == Puppet::Parameter or paramclass.array_matching == :first result[param] = values[0] else result[param] = values end end # Make a duplicate, so that we have a copy for comparison # at the end. @ldap_properties = @property_hash.dup end |
Class Attribute Details
.manager ⇒ Object (readonly)
10 11 12 |
# File 'lib/puppet/provider/ldap.rb', line 10 def manager @manager end |
Class Method Details
.instances ⇒ Object
Look up all instances at our location. Yay.
14 15 16 17 18 19 |
# File 'lib/puppet/provider/ldap.rb', line 14 def self.instances list = manager.search return [] unless list list.collect { |entry| new(entry) } end |
.manages(*args) ⇒ Object
Specify the ldap manager for this provider, which is used to figure out how we actually interact with ldap.
23 24 25 26 27 28 29 30 |
# File 'lib/puppet/provider/ldap.rb', line 23 def self.manages(*args) @manager = Puppet::Util::Ldap::Manager.new @manager.manages(*args) # Set up our getter/setter methods. mk_resource_methods @manager end |
.prefetch(resources) ⇒ Object
Query all of our resources from ldap.
33 34 35 36 37 38 39 40 41 42 43 |
# File 'lib/puppet/provider/ldap.rb', line 33 def self.prefetch(resources) resources.each do |name, resource| result = manager.find(name) if result result[:ensure] = :present resource.provider = new(result) else resource.provider = new(:ensure => :absent) end end end |
Instance Method Details
#create ⇒ Object
49 50 51 52 53 54 55 56 57 58 59 60 61 |
# File 'lib/puppet/provider/ldap.rb', line 49 def create @property_hash[:ensure] = :present self.class.resource_type.validproperties.each do |property| val = resource.should(property) if val if property.to_s == 'gid' self.gid = val else @property_hash[property] = val end end end end |
#delete ⇒ Object
63 64 65 |
# File 'lib/puppet/provider/ldap.rb', line 63 def delete @property_hash[:ensure] = :absent end |
#exists? ⇒ Boolean
67 68 69 |
# File 'lib/puppet/provider/ldap.rb', line 67 def exists? @property_hash[:ensure] != :absent end |
#flush ⇒ Object
Apply our changes to ldap, yo.
72 73 74 75 76 77 78 79 |
# File 'lib/puppet/provider/ldap.rb', line 72 def flush # Just call the manager's update() method. @property_hash.delete(:groups) @ldap_properties.delete(:groups) manager.update(name, ldap_properties, properties) @property_hash.clear @ldap_properties.clear end |
#ldap_properties ⇒ Object
Return the current state of ldap.
115 116 117 |
# File 'lib/puppet/provider/ldap.rb', line 115 def ldap_properties @ldap_properties.dup end |
#manager ⇒ Object
45 46 47 |
# File 'lib/puppet/provider/ldap.rb', line 45 def manager self.class.manager end |
#properties ⇒ Object
Return (and look up if necessary) the desired state.
120 121 122 123 124 125 126 |
# File 'lib/puppet/provider/ldap.rb', line 120 def properties if @property_hash.empty? @property_hash = query || { :ensure => :absent } @property_hash[:ensure] = :absent if @property_hash.empty? end @property_hash.dup end |
#query ⇒ Object
Collect the current attributes from ldap. Returns the results, but also stores the attributes locally, so we have something to compare against when we update. LAK:NOTE This is normally not used, because we rely on prefetching.
132 133 134 135 136 137 138 139 140 141 142 |
# File 'lib/puppet/provider/ldap.rb', line 132 def query # Use the module function. attributes = manager.find(name) unless attributes @ldap_properties = {} return nil end @ldap_properties = attributes @ldap_properties.dup end |