summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLamont Granquist <lamont@scriptkiddie.org>2016-03-21 07:46:38 -0700
committerLamont Granquist <lamont@scriptkiddie.org>2016-03-21 07:46:38 -0700
commit469492f7becd0a09b62ffba82555e344447a844a (patch)
tree41ec1cd84fdefd4b85fb9ef0f7fee86203ab4c68
parentec2d10cb64c7af7ae9040694f1515a485bb38f7d (diff)
parent9ec0d7835fa55110a5c76a83e03ae54223202989 (diff)
downloadchef-469492f7becd0a09b62ffba82555e344447a844a.tar.gz
Merge pull request #4725 from chef/lcg/dsl-rearrangement
rearrange dsl mixins
-rw-r--r--lib/chef/dsl/core.rb42
-rw-r--r--lib/chef/dsl/method_missing.rb75
-rw-r--r--lib/chef/dsl/recipe.rb78
-rw-r--r--lib/chef/provider.rb8
4 files changed, 136 insertions, 67 deletions
diff --git a/lib/chef/dsl/core.rb b/lib/chef/dsl/core.rb
new file mode 100644
index 0000000000..7f7edbfbda
--- /dev/null
+++ b/lib/chef/dsl/core.rb
@@ -0,0 +1,42 @@
+#--
+# Author:: Adam Jacob (<adam@chef.io>)
+# Author:: Christopher Walters (<cw@chef.io>)
+# Copyright:: Copyright 2008-2016, 2009-2015 Chef Software, Inc.
+# License:: Apache License, Version 2.0
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+require "chef/mixin/shell_out"
+require "chef/mixin/powershell_out"
+require "chef/dsl/declare_resource"
+
+class Chef
+ module DSL
+ # This is the "Core DSL" with various bits of Sugar that are mixed into core providers as well
+ # as user LWRPs. This module deliberately does not mixin the Resources or Defintions DSL bits
+ # so that cookbooks are not injeting random things into the samespace of core providers.
+ #
+ # - If you are writing cookbooks: you have come to the wrong place, please inject things into
+ # Chef::DSL::Recipe instead.
+ #
+ # - If you are writing core chef: you have come to the right place, please drop your DSL modules
+ # into here.
+ #
+ module Core
+ include Chef::Mixin::ShellOut
+ include Chef::Mixin::PowershellOut
+ include Chef::DSL::DeclareResource
+ end
+ end
+end
diff --git a/lib/chef/dsl/method_missing.rb b/lib/chef/dsl/method_missing.rb
new file mode 100644
index 0000000000..0d7ded30f3
--- /dev/null
+++ b/lib/chef/dsl/method_missing.rb
@@ -0,0 +1,75 @@
+#--
+# Copyright:: Copyright 2008-2016, 2009-2015 Chef Software, Inc.
+# License:: Apache License, Version 2.0
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+class Chef
+ module DSL
+ # @deprecated scheduled to die in a Chef 13 fire
+ module MethodMissing
+ 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
+
+ # 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
+ end
+ end
+end
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
diff --git a/lib/chef/provider.rb b/lib/chef/provider.rb
index 014fccbb48..cef95a4db8 100644
--- a/lib/chef/provider.rb
+++ b/lib/chef/provider.rb
@@ -22,8 +22,8 @@ require "chef/mixin/convert_to_class_name"
require "chef/mixin/enforce_ownership_and_permissions"
require "chef/mixin/why_run"
require "chef/mixin/shell_out"
-require "chef/mixin/powershell_out"
require "chef/mixin/provides"
+require "chef/dsl/core"
require "chef/platform/service_helpers"
require "chef/node_map"
require "forwardable"
@@ -31,13 +31,13 @@ require "forwardable"
class Chef
class Provider
require "chef/mixin/why_run"
- require "chef/mixin/shell_out"
require "chef/mixin/provides"
include Chef::Mixin::WhyRun
- include Chef::Mixin::ShellOut
- include Chef::Mixin::PowershellOut
extend Chef::Mixin::Provides
+ # includes the "core" DSL and not the "recipe" DSL by design
+ include Chef::DSL::Core
+
# supports the given resource and action (late binding)
def self.supports?(resource, action)
true