Class: Chef::Resource::RegistryKey

Inherits:
Chef::Resource show all
Defined in:
lib/chef/resource/registry_key.rb

Constant Summary

Constants inherited from Chef::Resource

FORBIDDEN_IVARS, HIDDEN_IVARS

Instance Attribute Summary collapse

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

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::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::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::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 Mixin::LazyModuleInclude

#descendants, #include, #included

Methods included from Mixin::ShellOut

apply_default_env, maybe_add_timeout, #shell_out, #shell_out!

Methods included from Mixin::PathSanity

#enforce_path_sanity, #sanitized_path

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

#powershell_exec

Methods included from DSL::Powershell

#ps_credential

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

#encrypted?

Methods included from DSL::PlatformIntrospection

#docker?, #older_than_win_2012_or_8?, #platform?, #platform_family?, #value_for_platform, #value_for_platform_family

Methods included from DSL::RebootPending

#reboot_pending?

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


67
68
69
70
# File 'lib/chef/resource/registry_key.rb', line 67

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_valuesObject (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.


65
66
67
# File 'lib/chef/resource/registry_key.rb', line 65

def unscrubbed_values
  @unscrubbed_values
end

Instance Method Details

#values(arg = nil) ⇒ Object


74
75
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
# File 'lib/chef/resource/registry_key.rb', line 74

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