diff options
author | Lamont Granquist <lamont@scriptkiddie.org> | 2016-03-21 07:46:38 -0700 |
---|---|---|
committer | Lamont Granquist <lamont@scriptkiddie.org> | 2016-03-21 07:46:38 -0700 |
commit | 469492f7becd0a09b62ffba82555e344447a844a (patch) | |
tree | 41ec1cd84fdefd4b85fb9ef0f7fee86203ab4c68 | |
parent | ec2d10cb64c7af7ae9040694f1515a485bb38f7d (diff) | |
parent | 9ec0d7835fa55110a5c76a83e03ae54223202989 (diff) | |
download | chef-469492f7becd0a09b62ffba82555e344447a844a.tar.gz |
Merge pull request #4725 from chef/lcg/dsl-rearrangement
rearrange dsl mixins
-rw-r--r-- | lib/chef/dsl/core.rb | 42 | ||||
-rw-r--r-- | lib/chef/dsl/method_missing.rb | 75 | ||||
-rw-r--r-- | lib/chef/dsl/recipe.rb | 78 | ||||
-rw-r--r-- | lib/chef/provider.rb | 8 |
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 |