summaryrefslogtreecommitdiff
path: root/lib/chef/dsl/recipe.rb
diff options
context:
space:
mode:
Diffstat (limited to 'lib/chef/dsl/recipe.rb')
-rw-r--r--lib/chef/dsl/recipe.rb78
1 files changed, 15 insertions, 63 deletions
diff --git a/lib/chef/dsl/recipe.rb b/lib/chef/dsl/recipe.rb
index b713ed9f87..c8b1aed74d 100644
--- a/lib/chef/dsl/recipe.rb
+++ b/lib/chef/dsl/recipe.rb
@@ -18,11 +18,8 @@
#
require "chef/exceptions"
-require "chef/mixin/shell_out"
-require "chef/mixin/powershell_out"
require "chef/dsl/resources"
require "chef/dsl/definitions"
-require "chef/dsl/declare_resource"
require "chef/dsl/data_query"
require "chef/dsl/platform_introspection"
require "chef/dsl/include_recipe"
@@ -30,18 +27,24 @@ require "chef/dsl/registry_helper"
require "chef/dsl/reboot_pending"
require "chef/dsl/audit"
require "chef/dsl/powershell"
-require "chef/mixin/lazy_module_include"
+require "chef/dsl/core"
+require "chef/dsl/method_missing"
require "chef/mixin/lazy_module_include"
class Chef
module DSL
- # == Chef::DSL::Recipe
- # Provides the primary recipe DSL functionality for defining Chef resource
- # objects via method calls.
+ # This is the "Recipe DSL" which is all the sugar, plus all the resources and definitions
+ # which are mixed into user LWRPs/Resources/Providers.
+ #
+ # - If you are writing cookbooks: you have come to the right place, please inject things
+ # into here if you want to make them available to all recipe and non-core provider code.
+ #
+ # - If you are writing core chef: you have likely come to the wrong place, please consider
+ # dropping your DSL modules into Chef::DSL::Core instead so that we can use them in core
+ # providers (unless they are *only* intended for recipe code).
+ #
module Recipe
- include Chef::Mixin::ShellOut
- include Chef::Mixin::PowershellOut
-
+ include Chef::DSL::Core
include Chef::DSL::DataQuery
include Chef::DSL::PlatformIntrospection
include Chef::DSL::IncludeRecipe
@@ -51,7 +54,8 @@ class Chef
include Chef::DSL::Powershell
include Chef::DSL::Resources
include Chef::DSL::Definitions
- include Chef::DSL::DeclareResource
+ # method_missing will disappear in Chef 13
+ include Chef::DSL::MethodMissing
extend Chef::Mixin::LazyModuleInclude
def resource_class_for(snake_case_name)
@@ -64,62 +68,10 @@ class Chef
false
end
- def describe_self_for_error
- if respond_to?(:name)
- %Q{`#{self.class} "#{name}"'}
- elsif respond_to?(:recipe_name)
- %Q{`#{self.class} "#{recipe_name}"'}
- else
- to_s
- end
- end
-
def exec(args)
raise Chef::Exceptions::ResourceNotFound, "exec was called, but you probably meant to use an execute resource. If not, please call Kernel#exec explicitly. The exec block called was \"#{args}\""
end
- # DEPRECATED:
- # method_missing must live for backcompat purposes until Chef 13.
- def method_missing(method_symbol, *args, &block)
- #
- # If there is already DSL for this, someone must have called
- # method_missing manually. Not a fan. Not. A. Fan.
- #
- if respond_to?(method_symbol)
- Chef.log_deprecation("Calling method_missing(#{method_symbol.inspect}) directly is deprecated in Chef 12 and will be removed in Chef 13. Use public_send() or send() instead.")
- return send(method_symbol, *args, &block)
- end
-
- #
- # If a definition exists, then Chef::DSL::Definitions.add_definition was
- # never called. DEPRECATED.
- #
- if run_context.definitions.has_key?(method_symbol.to_sym)
- Chef.log_deprecation("Definition #{method_symbol} (#{run_context.definitions[method_symbol.to_sym]}) was added to the run_context without calling Chef::DSL::Definitions.add_definition(#{method_symbol.to_sym.inspect}). This will become required in Chef 13.")
- Chef::DSL::Definitions.add_definition(method_symbol)
- return send(method_symbol, *args, &block)
- end
-
- #
- # See if the resource exists anyway. If the user had set
- # Chef::Resource::Blah = <resource>, a deprecation warning will be
- # emitted and the DSL method 'blah' will be added to the DSL.
- #
- resource_class = Chef::ResourceResolver.resolve(method_symbol, node: run_context ? run_context.node : nil)
- if resource_class
- Chef::DSL::Resources.add_resource_dsl(method_symbol)
- return send(method_symbol, *args, &block)
- end
-
- begin
- super
- rescue NoMethodError
- raise NoMethodError, "No resource or method named `#{method_symbol}' for #{describe_self_for_error}"
- rescue NameError
- raise NameError, "No resource, method, or local variable named `#{method_symbol}' for #{describe_self_for_error}"
- end
- end
-
# @deprecated Use Chef::DSL::Recipe instead, will be removed in Chef 13
module FullDSL
include Chef::DSL::Recipe