class Chef::ResourceResolver

Attributes

action[R]

@api private

node[R]

@api private

resource_name[R]

@api private

Public Class Methods

includes_handler?(resource_name, resource_class) click to toggle source

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
list(resource_name, node: nil) click to toggle source

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
new(node, resource_name) click to toggle source

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
resolve(resource_name, node: nil) click to toggle source

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

Protected Class Methods

handler_map() click to toggle source
# File lib/chef/resource_resolver.rb, line 117
def self.handler_map
  Chef.resource_handler_map
end
priority_map() click to toggle source
# File lib/chef/resource_resolver.rb, line 113
def self.priority_map
  Chef.resource_priority_map
end

Public Instance Methods

list() click to toggle source

@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
provided_by?(resource_class) click to toggle source

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
resolve() click to toggle source

@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

enabled_handlers() click to toggle source
# File lib/chef/resource_resolver.rb, line 134
def enabled_handlers
  potential_handlers.select { |handler| !overrode_provides?(handler) || handler.provides?(node, resource_name) }
end
handler_map() click to toggle source
# File lib/chef/resource_resolver.rb, line 125
def handler_map
  Chef.resource_handler_map
end
overrode_provides?(handler) click to toggle source
# File lib/chef/resource_resolver.rb, line 149
def overrode_provides?(handler)
  handler.method(:provides?).owner != Chef::Resource.method(:provides?).owner
end
potential_handlers() click to toggle source

@api private

# File lib/chef/resource_resolver.rb, line 130
def potential_handlers
  handler_map.list(node, resource_name).uniq
end
prioritized_handlers() click to toggle source
# 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
priority_map() click to toggle source
# File lib/chef/resource_resolver.rb, line 121
def priority_map
  Chef.resource_priority_map
end