class Chef::Resource::RegistryKey
Constants
- VALID_VALUE_HASH_KEYS
Public Instance Methods
Source
# File lib/chef/resource/registry_key.rb, line 189 def unscrubbed_values @unscrubbed_values ||= [] end
Some registry key data types may not be safely reported as json. Example (CHEF-5323):
registry_key ‘HKEY_CURRENT_USER\ChefTest2014’ do
values [{ :name => "ValueWithBadData", :type => :binary, :data => 255.chr * 1 }] action :create
end
will raise Encoding::UndefinedConversionError: “xFF” from ASCII-8BIT to UTF-8.
To avoid sending data that cannot be nicely converted for json, we have the values method return “safe” data if the data type is “unsafe”. Known “unsafe” data types are :binary, :dword, :dword-big-endian, and :qword. If other criteria generate data that cannot reliably be sent as json, add that criteria to the needs_checksum? method. When unsafe data is detected, the values method returns an md5 checksum of the listed data.
:unscrubbed_values returns the values exactly as provided in the resource (i.e., data is not checksummed, regardless of the data type/“unsafe” criteria).
Future: If we have conflicts with other resources reporting json incompatible state, we may want to extend the state_attrs API with the ability to rename POST’d attrs.
See lib/chef/resource_reporter.rb for more information.
Private Instance Methods
Source
# File lib/chef/resource/registry_key.rb, line 210 def needs_checksum?(value) unsafe_types = %i{binary dword dword_big_endian qword} unsafe_types.include?(value[:type]) end
Some data types may raise errors when sent as json. Returns true if this value’s data may need to be converted to a checksum.
Source
# File lib/chef/resource/registry_key.rb, line 195 def scrub_values(values) scrubbed = [] values.each do |value| scrubbed_value = value.dup if needs_checksum?(scrubbed_value) data_io = StringIO.new(scrubbed_value[:data].to_s) scrubbed_value[:data] = Chef::Digester.instance.generate_checksum(data_io) end scrubbed << scrubbed_value end scrubbed end