Class: Puppet::Property::KeyValue
- Inherits:
-
Puppet::Property
- Object
- Puppet::Parameter
- Puppet::Property
- Puppet::Property::KeyValue
- Defined in:
- lib/puppet/property/keyvalue.rb
Overview
The node with an important message is not very clear.
IMPORTANT: In order for this property to work there must also be a ‘membership’ parameter The class that inherits from property should override that method with the symbol for the membership
This subclass of Puppet::Property manages string key value pairs. In order to use this property:
-
the should value must be an array of key-value pairs separated by the ‘separator’
-
the retrieve method should return a hash with the keys as symbols
Constant Summary
Constants included from Util::Docs
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
Class Attribute Summary collapse
-
.log_only_changed_or_new_keys ⇒ Object
This is a class-level variable that child properties can override if they wish.
Attributes inherited from Puppet::Property
Attributes inherited from Puppet::Parameter
#name, #parent, #resource, #sensitive
Attributes included from Util::Docs
Instance Method Summary collapse
-
#delimiter ⇒ String
Returns a default delimiter of “;”.
- #hash_to_key_value_s(hash) ⇒ Object
- #hashify_should ⇒ Object
- #inclusive? ⇒ Boolean
-
#insync?(is) ⇒ Boolean
Returns true if there is no is value, else returns if is is equal to should using == as comparison.
-
#is_to_s(current_value) ⇒ Object
rubocop:disable Naming/PredicateName.
- #membership ⇒ Object
- #process_current_hash(current) ⇒ Object
-
#retrieve ⇒ Hash
Retrieves the key-hash from the provider by invoking its method named the same as this property.
-
#separator ⇒ String
Returns a default separator of “=”.
- #should ⇒ Object
- #should_to_s(should_value) ⇒ Object
Methods inherited from Puppet::Property
#call_provider, #change_to_s, #event, #event_name, idempotent, idempotent=, #idempotent?, #insync_values?, #log, #match_all?, method_added, #name, newvalue, #property_matches?, #safe_insync?, #set, #should=, #sync, #unsafe_validate, #validate_features_per_value, #value, #value=, value_name, value_option
Methods inherited from Puppet::Parameter
aliasvalue, defaultto, desc, doc, #file, #format, format_value_for_display, #initialize, initvars, isnamevar, #isnamevar?, isnamevar?, isrequired, #line, #log, #metaparam?, munge, #munge, newvalues, nodefault, #noop, #path, #pathbuilder, #provider, proxymethods, #remove, #required?, required?, sensitive, #tags, #to_s, unmunge, #unmunge, #unsafe_munge, #unsafe_unmunge, #unsafe_validate, validate, #validate, #value, #value=, #version
Methods included from Util::Docs
#desc, #dochook, #doctable, #markdown_definitionlist, #markdown_header, #nodoc?, #pad, scrub
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::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::Errors
#adderrorcontext, #devfail, #error_context, error_location, error_location_with_space, error_location_with_unknowns, #exceptwrap, #fail
Constructor Details
This class inherits a constructor from Puppet::Parameter
Class Attribute Details
.log_only_changed_or_new_keys ⇒ Object
This is a class-level variable that child properties can override if they wish.
20 21 22 |
# File 'lib/puppet/property/keyvalue.rb', line 20 def log_only_changed_or_new_keys @log_only_changed_or_new_keys end |
Instance Method Details
#delimiter ⇒ String
Returns a default delimiter of “;”
102 103 104 |
# File 'lib/puppet/property/keyvalue.rb', line 102 def delimiter ";" end |
#hash_to_key_value_s(hash) ⇒ Object
25 26 27 28 29 30 31 |
# File 'lib/puppet/property/keyvalue.rb', line 25 def hash_to_key_value_s(hash) if self.class.log_only_changed_or_new_keys hash = hash.select { |k, _| @changed_or_new_keys.include?(k) } end hash.map { |*pair| pair.join(separator) }.join(delimiter) end |
#hashify_should ⇒ Object
49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 |
# File 'lib/puppet/property/keyvalue.rb', line 49 def hashify_should # Puppet casts all should values to arrays. Thus, if the user # passed in a hash for our property's should value, the should_value # parameter will be a single element array so we just extract our value # directly. if !@should.empty? && @should.first.is_a?(Hash) return @should.first end # Here, should is an array of key/value pairs. @should.each_with_object({}) do |key_value, hash| tmp = key_value.split(separator) hash[tmp[0].strip.intern] = tmp[1] end end |
#inclusive? ⇒ Boolean
45 46 47 |
# File 'lib/puppet/property/keyvalue.rb', line 45 def inclusive? @resource[membership] == :inclusive end |
#insync?(is) ⇒ Boolean
Returns true if there is no is value, else returns if is is equal to should using == as comparison.
121 122 123 124 125 |
# File 'lib/puppet/property/keyvalue.rb', line 121 def insync?(is) return true unless is (is == should) end |
#is_to_s(current_value) ⇒ Object
rubocop:disable Naming/PredicateName
37 38 39 |
# File 'lib/puppet/property/keyvalue.rb', line 37 def is_to_s(current_value) # rubocop:disable Naming/PredicateName hash_to_key_value_s(current_value) end |
#membership ⇒ Object
41 42 43 |
# File 'lib/puppet/property/keyvalue.rb', line 41 def membership :key_value_membership end |
#process_current_hash(current) ⇒ Object
65 66 67 68 69 70 71 |
# File 'lib/puppet/property/keyvalue.rb', line 65 def process_current_hash(current) return {} if current == :absent # inclusive means we are managing everything so if it isn't in should, its gone current.each_key { |key| current[key] = nil } if inclusive? current end |
#retrieve ⇒ Hash
Retrieves the key-hash from the provider by invoking its method named the same as this property.
109 110 111 112 113 114 115 116 117 |
# File 'lib/puppet/property/keyvalue.rb', line 109 def retrieve # ok, some 'convention' if the keyvalue property is named properties, provider should implement a properties method key_hash = provider.send(name) if provider if key_hash && key_hash != :absent key_hash else :absent end end |
#separator ⇒ String
Returns a default separator of “=”
97 98 99 |
# File 'lib/puppet/property/keyvalue.rb', line 97 def separator "=" end |
#should ⇒ Object
73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 |
# File 'lib/puppet/property/keyvalue.rb', line 73 def should return nil unless @should members = hashify_should current = process_current_hash(retrieve) # shared keys will get overwritten by members should_value = current.merge(members) # Figure out the keys that will actually change in our Puppet run. # This lets us reduce the verbosity of Puppet's logging for instances # of this class when we want to. # # NOTE: We use ||= here because we only need to compute the # changed_or_new_keys once (since this property will only be synced once). # @changed_or_new_keys ||= should_value.keys.select do |key| !current.key?(key) || current[key] != should_value[key] end should_value end |
#should_to_s(should_value) ⇒ Object
33 34 35 |
# File 'lib/puppet/property/keyvalue.rb', line 33 def should_to_s(should_value) hash_to_key_value_s(should_value) end |