Class: Chef::Resource::RegistryKey
- Inherits:
-
Chef::Resource
- Object
- Chef::Resource
- Chef::Resource::RegistryKey
- Defined in:
- lib/chef/resource/registry_key.rb
Constant Summary
Constants inherited from Chef::Resource
Instance Attribute Summary collapse
-
#unscrubbed_values ⇒ Object
readonly
Some registry key data types may not be safely reported as json.
Attributes inherited from Chef::Resource
#allowed_actions, #cookbook_name, #declared_type, #default_guard_interpreter, #elapsed_time, #enclosing_provider, #executed_by_runner, #logger, #params, #recipe_name, #resource_initializing, #run_context, #source_line, #updated
Instance Method Summary collapse
-
#initialize(name, run_context = nil) ⇒ RegistryKey
constructor
A new instance of RegistryKey.
- #values(arg = nil) ⇒ Object
Methods inherited from Chef::Resource
action, #action, #action=, action_class, #after_created, allowed_actions, allowed_actions=, #as_json, #before_notifications, chef_version_for_provides, #cookbook_version, #current_value, #current_value_does_not_exist!, #custom_exception_message, custom_resource?, #customize_exception, declare_action_class, #declared_key, default_action, default_action=, default_description, #defined_at, #delayed_action, #delayed_notifications, deprecated, description, #events, examples, from_hash, from_json, #guard_interpreter, #identity, identity_attr, identity_property, #ignore_failure, #immediate_notifications, inherited, #inspect, introduced, is_custom_resource!, json_create, load_current_value, #load_from, #lookup_provider_constant, #method_missing, #name, #node, #not_if, #notifies, #notifies_before, #notifies_delayed, #notifies_immediately, #only_if, preview_resource, #provider, #provider=, #provider_for_action, provides, provides?, remove_canonical_dsl, #resolve_notification_references, resource_for_node, resource_matching_short_name, #resource_name, resource_name, resource_name=, #retries, #retry_delay, #run_action, #sensitive, #should_skip?, skip_docs, sorted_descendants, #source_line_file, #source_line_number, state_attrs, #state_for_resource_reporter, #subscribes, #to_h, #to_json, #to_s, #to_text, unified_mode, #updated?, #updated_by_last_action, #updated_by_last_action?, use_automatic_resource_name, #validate_action, #validate_resource_spec!, #value_to_text
Methods included from Mixin::Provides
#provided_as, #provides, #provides?
Methods included from Mixin::DescendantsTracker
#descendants, descendants, direct_descendants, #direct_descendants, find_descendants_by_name, #find_descendants_by_name, #inherited, store_inherited
Methods included from Mixin::LazyModuleInclude
#descendants, #include, #included
Methods included from Mixin::ShellOut
apply_default_env, maybe_add_timeout, #shell_out, #shell_out!
Methods included from Mixin::PowershellOut
#powershell_out, #powershell_out!
Methods included from Mixin::WindowsArchitectureHelper
#assert_valid_windows_architecture!, #disable_wow64_file_redirection, #forced_32bit_override_required?, #is_i386_process_on_x86_64_windows?, #node_supports_windows_architecture?, #node_windows_architecture, #restore_wow64_file_redirection, #valid_windows_architecture?, #with_os_architecture, #wow64_architecture_override_required?, #wow64_directory
Methods included from Mixin::PowershellExec
Methods included from DSL::Powershell
Methods included from DSL::RegistryHelper
#registry_data_exists?, #registry_get_subkeys, #registry_get_values, #registry_has_subkeys?, #registry_key_exists?, #registry_value_exists?
Methods included from DSL::DataQuery
#data_bag, #data_bag_item, #search, #tagged?
Methods included from EncryptedDataBagItem::CheckEncrypted
Methods included from DSL::PlatformIntrospection
#older_than_win_2012_or_8?, #platform?, #platform_family?, #value_for_platform, #value_for_platform_family
Methods included from Mixin::ConvertToClassName
#constantize, #convert_to_class_name, #convert_to_snake_case, #filename_to_qualified_string, #normalize_snake_case_name, #snake_case_basename
Methods included from Mixin::Deprecation
#deprecated_attr, #deprecated_attr_reader, #deprecated_attr_writer, #deprecated_ivar
Methods included from Mixin::Properties
#copy_properties_from, included, #property_description, #property_is_set?, #reset_property
Methods included from Mixin::ParamsValidate
#lazy, #set_or_return, #validate
Methods included from DSL::RebootPending
Methods included from DSL::DeclareResource
#build_resource, #declare_resource, #delete_resource, #delete_resource!, #edit_resource, #edit_resource!, #find_resource, #find_resource!, #resources, #with_run_context
Constructor Details
#initialize(name, run_context = nil) ⇒ RegistryKey
Returns a new instance of RegistryKey.
69 70 71 72 |
# File 'lib/chef/resource/registry_key.rb', line 69 def initialize(name, run_context = nil) super @values, @unscrubbed_values = [], [] end |
Dynamic Method Handling
This class handles dynamic methods through the method_missing method in the class Chef::Resource
Instance Attribute Details
#unscrubbed_values ⇒ Object (readonly)
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.
67 68 69 |
# File 'lib/chef/resource/registry_key.rb', line 67 def unscrubbed_values @unscrubbed_values end |
Instance Method Details
#values(arg = nil) ⇒ Object
76 77 78 79 80 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 |
# File 'lib/chef/resource/registry_key.rb', line 76 def values(arg = nil) if not arg.nil? if arg.is_a?(Hash) @values = [ Mash.new(arg).symbolize_keys ] elsif arg.is_a?(Array) @values = [] arg.each do |value| @values << Mash.new(value).symbolize_keys end else raise ArgumentError, "Bad type for RegistryKey resource, use Hash or Array" end @values.each do |v| raise ArgumentError, "Missing name key in RegistryKey values hash" unless v.key?(:name) v.each_key do |key| raise ArgumentError, "Bad key #{key} in RegistryKey values hash" unless %i{name type data}.include?(key) end raise ArgumentError, "Type of name => #{v[:name]} should be string" unless v[:name].is_a?(String) if v[:type] raise ArgumentError, "Type of type => #{v[:type]} should be symbol" unless v[:type].is_a?(Symbol) end end @unscrubbed_values = @values elsif instance_variable_defined?(:@values) scrub_values(@values) end end |