diff options
author | John Keiser <john@johnkeiser.com> | 2015-05-07 09:53:35 -0700 |
---|---|---|
committer | John Keiser <john@johnkeiser.com> | 2015-05-13 13:43:15 -0700 |
commit | 27c57238f1f2fddc7d03dad818a6b7ee78cbff96 (patch) | |
tree | bba0c04ced9a410ad5363c74e3a8462ee27e3d8c /lib | |
parent | 2032c6776587f9450ddba182867973ab5bee1b75 (diff) | |
download | chef-27c57238f1f2fddc7d03dad818a6b7ee78cbff96.tar.gz |
Deprecate dsl_name (the "DSL name for this class" is no longer meaningful).
Diffstat (limited to 'lib')
-rw-r--r-- | lib/chef/mixin/provides.rb | 6 | ||||
-rw-r--r-- | lib/chef/platform/provider_mapping.rb | 2 | ||||
-rw-r--r-- | lib/chef/resource.rb | 3 | ||||
-rw-r--r-- | lib/chef/resource/lwrp_base.rb | 192 | ||||
-rw-r--r-- | lib/chef/resource_reporter.rb | 2 |
5 files changed, 106 insertions, 99 deletions
diff --git a/lib/chef/mixin/provides.rb b/lib/chef/mixin/provides.rb index d71097ca4b..c39c53a190 100644 --- a/lib/chef/mixin/provides.rb +++ b/lib/chef/mixin/provides.rb @@ -29,6 +29,12 @@ class Chef resource_name = resource_name.resource_name if resource_name.is_a?(Chef::Resource) node_map.get(node, resource_name) end + + # Get the list of recipe DSL this resource is responsible for on the given + # node. + def provided_as(node) + node_map.list(node) + end end end end diff --git a/lib/chef/platform/provider_mapping.rb b/lib/chef/platform/provider_mapping.rb index 763ae79368..8e9f46619f 100644 --- a/lib/chef/platform/provider_mapping.rb +++ b/lib/chef/platform/provider_mapping.rb @@ -467,7 +467,7 @@ class Chef begin class_name = resource_type.class.to_s.split('::').last result = Chef::Provider.const_get(class_name) - Chef::Log.warn("Class Chef::Provider::#{class_name} does not declare 'provides #{resource_type.class.dsl_name.to_sym.inspect}'.") + Chef::Log.warn("Class Chef::Provider::#{class_name} does not declare 'provides #{resource.resource_name.inspect}'.") Chef::Log.warn("This will no longer work in Chef 13: you must use 'provides' to provide DSL.") result rescue NameError diff --git a/lib/chef/resource.rb b/lib/chef/resource.rb index d5a1876943..6030572be6 100644 --- a/lib/chef/resource.rb +++ b/lib/chef/resource.rb @@ -605,7 +605,7 @@ class Chef return "suppressed sensitive resource output" if sensitive ivars = instance_variables.map { |ivar| ivar.to_sym } - HIDDEN_IVARS text = "# Declared in #{@source_line}\n\n" - text << self.class.dsl_name + "(\"#{name}\") do\n" + text << "#{resource_name}(\"#{name}\") do\n" ivars.each do |ivar| if (value = instance_variable_get(ivar)) && !(value.respond_to?(:empty?) && value.empty?) value_string = value.respond_to?(:to_text) ? value.to_text : value.inspect @@ -821,6 +821,7 @@ class Chef # # @return [String] The DSL name of this resource. def self.dsl_name + Chef::Log.deprecation "Resource.dsl_name is deprecated and will be removed in Chef 11. Use resource.resource_name instead." if name name = self.name.split('::')[-1] convert_to_snake_case(name) diff --git a/lib/chef/resource/lwrp_base.rb b/lib/chef/resource/lwrp_base.rb index c07ff44187..89e4aa8b42 100644 --- a/lib/chef/resource/lwrp_base.rb +++ b/lib/chef/resource/lwrp_base.rb @@ -37,131 +37,132 @@ class Chef NULL_ARG = Object.new - extend Chef::Mixin::ConvertToClassName - extend Chef::Mixin::FromFile + # Class methods + class <<self - # Evaluates the LWRP resource file and instantiates a new Resource class. - def self.build_from_file(cookbook_name, filename, run_context) - resource_name = filename_to_qualified_string(cookbook_name, filename) + include Chef::Mixin::ConvertToClassName + include Chef::Mixin::FromFile - node = run_context ? run_context.node : Chef::Node.new - existing_class = Chef::ResourceResolver.new(node, resource_name).resolve + attr_accessor :loaded_lwrps - if existing_class - Chef::Log.info("Skipping LWRP resource #{filename} from cookbook #{cookbook_name}. #{existing_class} already defined.") - Chef::Log.debug("Overriding resources with LWRPs is not supported anymore starting with Chef 12.") - return existing_class - end + def build_from_file(cookbook_name, filename, run_context) + if LWRPBase.loaded_lwrps[filename] + Chef::Log.info("LWRP provider #{filename} from cookbook #{cookbook_name} has already been loaded! Skipping the reload.") + return loaded_lwrps[filename] + end - # We load the class first to give it a chance to set its own name - resource_class = Class.new(self) - resource_class.resource_name = resource_name - resource_class.run_context = run_context - resource_class.provides resource_name.to_sym - resource_class.class_from_file(filename) - - # Respect resource_name set inside the LWRP - resource_class.instance_eval do - define_method(:to_s) do - "LWRP #{resource_name} from cookbook #{cookbook_name}" + resource_name = filename_to_qualified_string(cookbook_name, filename) + + # We load the class first to give it a chance to set its own name + resource_class = Class.new(self) + resource_class.resource_name = resource_name + resource_class.run_context = run_context + resource_class.provides resource_name.to_sym + resource_class.class_from_file(filename) + + # Respect resource_name set inside the LWRP + resource_class.instance_eval do + define_method(:to_s) do + "LWRP #{resource_name} from cookbook #{cookbook_name}" + end + define_method(:inspect) { to_s } end - define_method(:inspect) { to_s } - end - Chef::Log.debug("Loaded contents of #{filename} into #{resource_class}") + Chef::Log.debug("Loaded contents of #{filename} into #{resource_class}") - Chef::Resource.create_deprecated_lwrp_class(resource_class) + LWRPBase.loaded_lwrps[filename] = true - resource_class - end + Chef::Resource.create_deprecated_lwrp_class(resource_class) - def self.resource_name(arg = NULL_ARG) - if arg.equal?(NULL_ARG) - @resource_name || dsl_name - else - @resource_name = arg + resource_class + end + + def resource_name(arg = NULL_ARG) + if arg.equal?(NULL_ARG) + @resource_name + else + @resource_name = arg + end end - end - class << self alias_method :resource_name=, :resource_name - end - # Define an attribute on this resource, including optional validation - # parameters. - def self.attribute(attr_name, validation_opts={}) - define_method(attr_name) do |arg=nil| - set_or_return(attr_name.to_sym, arg, validation_opts) + # Define an attribute on this resource, including optional validation + # parameters. + def attribute(attr_name, validation_opts={}) + define_method(attr_name) do |arg=nil| + set_or_return(attr_name.to_sym, arg, validation_opts) + end end - end - # Sets the default action - def self.default_action(action_name=NULL_ARG) - unless action_name.equal?(NULL_ARG) - @actions ||= [] - if action_name.is_a?(Array) - action = action_name.map { |arg| arg.to_sym } - @actions = actions | action - @default_action = action - else - action = action_name.to_sym - @actions.push(action) unless @actions.include?(action) - @default_action = action + # Sets the default action + def default_action(action_name=NULL_ARG) + unless action_name.equal?(NULL_ARG) + @actions ||= [] + if action_name.is_a?(Array) + action = action_name.map { |arg| arg.to_sym } + @actions = actions | action + @default_action = action + else + action = action_name.to_sym + @actions.push(action) unless @actions.include?(action) + @default_action = action + end end - end - @default_action ||= from_superclass(:default_action) - end + @default_action ||= from_superclass(:default_action) + end - # Adds +action_names+ to the list of valid actions for this resource. - def self.actions(*action_names) - if action_names.empty? - defined?(@actions) ? @actions : from_superclass(:actions, []).dup - else - # BC-compat way for checking if actions have already been defined - if defined?(@actions) - @actions.push(*action_names) + # Adds +action_names+ to the list of valid actions for this resource. + def actions(*action_names) + if action_names.empty? + defined?(@actions) ? @actions : from_superclass(:actions, []).dup else - @actions = action_names + # BC-compat way for checking if actions have already been defined + if defined?(@actions) + @actions.push(*action_names) + else + @actions = action_names + end end end - end - # @deprecated - def self.valid_actions(*args) - Chef::Log.warn("`valid_actions' is deprecated, please use actions `instead'!") - actions(*args) - end + # @deprecated + def valid_actions(*args) + Chef::Log.warn("`valid_actions' is deprecated, please use actions `instead'!") + actions(*args) + end - # Set the run context on the class. Used to provide access to the node - # during class definition. - def self.run_context=(run_context) - @run_context = run_context - end + # Set the run context on the class. Used to provide access to the node + # during class definition. + attr_accessor :run_context - def self.run_context - @run_context - end + def node + run_context ? run_context.node : nil + end - def self.node - run_context ? run_context.node : nil - end + def lazy(&block) + DelayedEvaluator.new(&block) + end - def self.lazy(&block) - DelayedEvaluator.new(&block) - end + private - private + # Get the value from the superclass, if it responds, otherwise return + # +nil+. Since class instance variables are **not** inherited upon + # subclassing, this is a required check to ensure Chef pulls the + # +default_action+ and other DSL-y methods when extending LWRP::Base. + def from_superclass(m, default = nil) + return default if superclass == Chef::Resource::LWRPBase + superclass.respond_to?(m) ? superclass.send(m) : default + end - # Get the value from the superclass, if it responds, otherwise return - # +nil+. Since class instance variables are **not** inherited upon - # subclassing, this is a required check to ensure Chef pulls the - # +default_action+ and other DSL-y methods when extending LWRP::Base. - def self.from_superclass(m, default = nil) - return default if superclass == Chef::Resource::LWRPBase - superclass.respond_to?(m) ? superclass.send(m) : default + def loaded_lwrps + @loaded_lwrps ||= {} + end end + private + # Default initializer. Sets the default action and allowed actions. def initialize(name, run_context=nil) super(name, run_context) @@ -176,7 +177,6 @@ class Chef @action = self.class.default_action allowed_actions.push(self.class.actions).flatten! end - end end end diff --git a/lib/chef/resource_reporter.rb b/lib/chef/resource_reporter.rb index 96cc01d814..7829bb4d70 100644 --- a/lib/chef/resource_reporter.rb +++ b/lib/chef/resource_reporter.rb @@ -59,7 +59,7 @@ class Chef # attrs. def for_json as_hash = {} - as_hash["type"] = new_resource.class.dsl_name + as_hash["type"] = new_resource.resource_name.to_sym as_hash["name"] = new_resource.name.to_s as_hash["id"] = new_resource.identity.to_s as_hash["after"] = new_resource.state_for_resource_reporter |