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
@note *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
@todo The node with an important message is not very clear.
@return [String] Returns a default delimiter of “;”
# File lib/puppet/property/keyvalue.rb, line 69 def delimiter ";" end
# File lib/puppet/property/keyvalue.rb, line 16 def hash_to_key_value_s(hash) hash.select { |k,v| true }.map { |pair| pair.join(separator) }.join(delimiter) end
# File lib/puppet/property/keyvalue.rb, line 36 def hashify(key_value_array) #turns string array into a hash key_value_array.inject({}) do |hash, key_value| tmp = key_value.split(separator) hash[tmp[0].intern] = tmp[1] hash end end
# File lib/puppet/property/keyvalue.rb, line 32 def inclusive? @resource[membership] == :inclusive end
Returns true if there is no is value, else returns if is is equal to should using == as comparison. @return [Boolean] whether the property is in sync or not.
# File lib/puppet/property/keyvalue.rb, line 88 def insync?(is) return true unless is (is == self.should) end
# File lib/puppet/property/keyvalue.rb, line 24 def is_to_s(current_value) hash_to_key_value_s(current_value) end
# File lib/puppet/property/keyvalue.rb, line 28 def membership :key_value_membership end
# File lib/puppet/property/keyvalue.rb, line 45 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
Retrieves the key-hash from the provider by invoking it’s method named the same as this property. @return [Hash] the hash from the provider, or `:absent`
# File lib/puppet/property/keyvalue.rb, line 76 def retrieve #ok, some 'convention' if the keyvalue property is named properties, provider should implement a properties method if key_hash = provider.send(name) and key_hash != :absent return key_hash else return :absent end end
@return [String] Returns a default separator of “=”
# File lib/puppet/property/keyvalue.rb, line 64 def separator "=" end
# File lib/puppet/property/keyvalue.rb, line 53 def should return nil unless @should members = hashify(@should) current = process_current_hash(retrieve) #shared keys will get overwritten by members current.merge(members) end
# File lib/puppet/property/keyvalue.rb, line 20 def should_to_s(should_value) hash_to_key_value_s(should_value) end