summaryrefslogtreecommitdiff
path: root/lib/chef/resource
diff options
context:
space:
mode:
authorJohn Keiser <john@johnkeiser.com>2015-04-18 15:23:44 -0700
committerJohn Keiser <john@johnkeiser.com>2015-05-13 13:42:32 -0700
commita6d5241a96a7882166af849f529b2a2b8bab5ab4 (patch)
treef4a7c3735db3698d0712536d8cc58d5166ce0173 /lib/chef/resource
parentc46776d45cd5a732441a4dc0bf0552e71bb500ee (diff)
downloadchef-a6d5241a96a7882166af849f529b2a2b8bab5ab4.tar.gz
Deprecate automatic method_missing and Chef::Resource lookup
- Declare all resource DSL as methods on Chef::DSL::Resources - Declare all definition DSL as methods on Chef::DSL::Definitions
Diffstat (limited to 'lib/chef/resource')
-rw-r--r--lib/chef/resource/lwrp_base.rb68
1 files changed, 50 insertions, 18 deletions
diff --git a/lib/chef/resource/lwrp_base.rb b/lib/chef/resource/lwrp_base.rb
index ce72e98028..f702db5c96 100644
--- a/lib/chef/resource/lwrp_base.rb
+++ b/lib/chef/resource/lwrp_base.rb
@@ -35,32 +35,64 @@ class Chef
# Evaluates the LWRP resource file and instantiates a new Resource class.
def self.build_from_file(cookbook_name, filename, run_context)
- resource_class = nil
- rname = filename_to_qualified_string(cookbook_name, filename)
-
- class_name = convert_to_class_name(rname)
- if Resource.const_defined?(class_name, false)
- Chef::Log.info("#{class_name} light-weight resource is already initialized -- Skipping loading #{filename}!")
- Chef::Log.debug("Overriding already defined LWRPs is not supported anymore starting with Chef 12.")
- resource_class = Resource.const_get(class_name)
- else
- resource_class = Class.new(self)
+ resource_name = filename_to_qualified_string(cookbook_name, filename)
+
+ node = run_context ? run_context.node : Chef::Node.new
+ existing_class = Chef::ResourceResolver.new(node, resource_name).resolve
+
+ 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
- Chef::Resource.const_set(class_name, resource_class)
- resource_class.resource_name = rname
- resource_class.run_context = run_context
- resource_class.class_from_file(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.class_from_file(filename)
- Chef::Log.debug("Loaded contents of #{filename} into a resource named #{rname} defined in Chef::Resource::#{class_name}")
+ # 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
+ Chef::Log.debug("Loaded contents of #{filename} into #{resource_class}")
+
+ create_deprecated_class_in_chef_resource(resource_class)
+
resource_class
end
- # Set the resource name for this LWRP
+ def self.create_deprecated_class_in_chef_resource(resource_class)
+ # Create a class in Chef::Resource::MyResource with deprecation
+ # warnings if you try to instantiate or inherit it (for Chef 12 compatibility)
+ class_name = convert_to_class_name(resource_class.resource_name)
+ if Chef::Resource.const_defined?(class_name, false)
+ Chef::Log.debug "#{class_name} already exists! Cannot create deprecation class #{resource_class}"
+ else
+ Chef::Resource.const_set(class_name, Class.new(resource_class) do
+ self.resource_name = resource_class.resource_name
+ self.run_context = resource_class.run_context
+ define_method(:initialize) do |*args, &block|
+ Chef::Log.warn("Using an LWRP by its name (#{class_name}) directly is no longer supported in Chef 12 and will be removed.")
+ super(*args, &block)
+ end
+ define_singleton_method(:inherited) do |*args, &block|
+ Chef::Log.warn("Using an LWRP by its name (#{class_name}) directly is no longer supported in Chef 12 and will be removed.")
+ super(*args, &block)
+ end
+ end)
+ end
+ Chef::Resource.const_get(class_name)
+ end
+
def self.resource_name(arg = NULL_ARG)
if arg.equal?(NULL_ARG)
- @resource_name
+ @resource_name || dsl_name
else
@resource_name = arg
end
@@ -127,7 +159,7 @@ class Chef
end
def self.node
- run_context.node
+ run_context ? run_context.node : nil
end
def self.lazy(&block)