diff options
author | Lamont Granquist <lamont@scriptkiddie.org> | 2014-10-24 10:45:43 -0700 |
---|---|---|
committer | Lamont Granquist <lamont@scriptkiddie.org> | 2014-10-24 10:45:43 -0700 |
commit | 97aaf5bbcdfd0810722b123bdc67e883a7ca8077 (patch) | |
tree | 25663bf1d4f53664b96844251091b51273ad84c7 /lib/chef/provider.rb | |
parent | cb1bcb1f08816f551f96e713624718f58da3c9b3 (diff) | |
download | chef-97aaf5bbcdfd0810722b123bdc67e883a7ca8077.tar.gz |
Chef-12 RC Provider Resolver
makes resource and provider class resolution more dynamic.
begins deprecation of Chef::Platform static mapping.
Diffstat (limited to 'lib/chef/provider.rb')
-rw-r--r-- | lib/chef/provider.rb | 50 |
1 files changed, 13 insertions, 37 deletions
diff --git a/lib/chef/provider.rb b/lib/chef/provider.rb index 7cfdf7cbe5..680fe9782f 100644 --- a/lib/chef/provider.rb +++ b/lib/chef/provider.rb @@ -22,60 +22,36 @@ 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/descendants_tracker' +require 'chef/platform/service_helpers' +require 'chef/node_map' class Chef class Provider include Chef::Mixin::WhyRun include Chef::Mixin::ShellOut - + extend Chef::Mixin::DescendantsTracker class << self - include Enumerable - - @@providers = [] - - attr_reader :implementations - attr_reader :supported_platforms - - def inherited(klass) - @@providers << klass + def node_map + @node_map ||= Chef::NodeMap.new end - def providers - @@providers + def provides(resource_name, opts={}, &block) + node_map.set(resource_name.to_sym, true, opts, &block) end - def each - providers.each { |provider| yield provider } - providers - end - - def implements(*resources) - options = resources.last.is_a?(Hash) ? resources.pop : {} - - @implementations = resources.map { |resource| resource.to_sym } - @supported_platforms = Array(options[:on_platforms] || :all) + # provides a node on the resource (early binding) + def provides?(node, resource) + node_map.get(node, resource.resource_name) end - def implements?(resource) - klass_name = resource.class.to_s.split('::').last - resource_name = klass_name.gsub(/([a-z0-9])([A-Z])/, '\1_\2').downcase - - implementations && implementations.include?(resource_name.to_sym) - end - - def supports_platform?(platform) - supported_platforms && ( - supported_platforms.include?(:all) || - supported_platforms.include?(platform.to_sym)) - end - - def enabled?(node) + # supports the given resource and action (late binding) + def supports?(resource, action) true end end - attr_accessor :new_resource attr_accessor :current_resource attr_accessor :run_context |