summaryrefslogtreecommitdiff
path: root/lib/chef/provider.rb
diff options
context:
space:
mode:
authorLamont Granquist <lamont@scriptkiddie.org>2014-10-24 10:45:43 -0700
committerLamont Granquist <lamont@scriptkiddie.org>2014-10-24 10:45:43 -0700
commit97aaf5bbcdfd0810722b123bdc67e883a7ca8077 (patch)
tree25663bf1d4f53664b96844251091b51273ad84c7 /lib/chef/provider.rb
parentcb1bcb1f08816f551f96e713624718f58da3c9b3 (diff)
downloadchef-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.rb50
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