class Chef::ResourceResolver
Attributes
@api private
@api private
@api private
Public Class Methods
# File lib/chef/resource_resolver.rb, line 117 def self.handler_map Chef.resource_handler_map end
Whether the given handler attempts to provide the resource class at all.
@api private
# File lib/chef/resource_resolver.rb, line 107 def self.includes_handler?(resource_name, resource_class) handler_map.list(nil, resource_name).include?(resource_class) end
Resolve a list of all resources that implement the given DSL
(in order of preference).
@param resource_name
[Symbol] The resource DSL
name (e.g. ‘:file`). @param node [Chef::Node] The node against which to resolve. `nil` causes
platform filters to be ignored.
# File lib/chef/resource_resolver.rb, line 44 def self.list(resource_name, node: nil) new(node, resource_name).list end
Create a resolver.
@param node [Chef::Node] The node against which to resolve. ‘nil` causes
platform filters to be ignored.
@param resource_name
[Symbol] The resource DSL
name (e.g. ‘:file`).
@api private use Chef::ResourceResolver.resolve
or .list instead.
# File lib/chef/resource_resolver.rb, line 65 def initialize(node, resource_name) @node = node @resource_name = resource_name.to_sym end
# File lib/chef/resource_resolver.rb, line 113 def self.priority_map Chef.resource_priority_map end
Resolve a resource by name.
@param resource_name
[Symbol] The resource DSL
name (e.g. ‘:file`). @param node [Chef::Node] The node against which to resolve. `nil` causes
platform filters to be ignored.
# File lib/chef/resource_resolver.rb, line 32 def self.resolve(resource_name, node: nil) new(node, resource_name).resolve end
Public Instance Methods
@api private
# File lib/chef/resource_resolver.rb, line 87 def list Chef::Log.trace "Resources for generic #{resource_name} resource enabled on node include: #{prioritized_handlers}" prioritized_handlers end
Whether this DSL
is provided by the given resource_class.
Does NOT call provides? on the resource (it is assumed this is being called from provides?).
@api private
# File lib/chef/resource_resolver.rb, line 99 def provided_by?(resource_class) potential_handlers.include?(resource_class) end
@api private use Chef::ResourceResolver.resolve
instead.
# File lib/chef/resource_resolver.rb, line 71 def resolve # log this so we know what resources will work for the generic resource on the node (early cut) Chef::Log.trace "Resources for generic #{resource_name} resource enabled on node include: #{prioritized_handlers}" handler = prioritized_handlers.first if handler Chef::Log.trace "Resource for #{resource_name} is #{handler}" else Chef::Log.trace "Dynamic resource resolver FAILED to resolve a resource for #{resource_name}" end handler end
Protected Instance Methods
# File lib/chef/resource_resolver.rb, line 134 def enabled_handlers potential_handlers.select { |handler| !overrode_provides?(handler) || handler.provides?(node, resource_name) } end
# File lib/chef/resource_resolver.rb, line 125 def handler_map Chef.resource_handler_map end
# File lib/chef/resource_resolver.rb, line 149 def overrode_provides?(handler) handler.method(:provides?).owner != Chef::Resource.method(:provides?).owner end
@api private
# File lib/chef/resource_resolver.rb, line 130 def potential_handlers handler_map.list(node, resource_name).uniq end
# File lib/chef/resource_resolver.rb, line 138 def prioritized_handlers @prioritized_handlers ||= begin enabled_handlers = self.enabled_handlers prioritized = priority_map.list(node, resource_name).flatten(1) prioritized &= enabled_handlers # Filter the priority map by the actual enabled handlers prioritized |= enabled_handlers # Bring back any handlers that aren't in the priority map, at the *end* (ordered set) prioritized end end
# File lib/chef/resource_resolver.rb, line 121 def priority_map Chef.resource_priority_map end