Class: Chef::ResourceResolver

Inherits:
Object
  • Object
show all
Includes:
Mixin::ConvertToClassName
Defined in:
lib/chef/resource_resolver.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Methods included from Mixin::ConvertToClassName

#convert_to_class_name, #convert_to_snake_case, #filename_to_qualified_string, #normalize_snake_case_name, #snake_case_basename

Constructor Details

#initialize(node, resource_name) ⇒ ResourceResolver

Create a resolver.

Parameters:

  • The node against which to resolve. nil causes platform filters to be ignored.

  • The resource DSL name (e.g. :file).

API:

  • private use Chef::ResourceResolver.resolve or .list instead.



65
66
67
68
# File 'lib/chef/resource_resolver.rb', line 65

def initialize(node, resource_name)
  @node = node
  @resource_name = resource_name.to_sym
end

Instance Attribute Details

#actionObject (readonly)

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

API:

  • private



55
56
57
# File 'lib/chef/resource_resolver.rb', line 55

def action
  @action
end

#nodeObject (readonly)

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

API:

  • private



51
52
53
# File 'lib/chef/resource_resolver.rb', line 51

def node
  @node
end

#resource_nameObject (readonly)

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

API:

  • private



53
54
55
# File 'lib/chef/resource_resolver.rb', line 53

def resource_name
  @resource_name
end

Class Method Details

.handler_mapObject



117
118
119
# File 'lib/chef/resource_resolver.rb', line 117

def self.handler_map
  Chef.resource_handler_map
end

.includes_handler?(resource_name, resource_class) ⇒ Boolean

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Whether the given handler attempts to provide the resource class at all.

Returns:

API:

  • private



107
108
109
# 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) ⇒ Object

Resolve a list of all resources that implement the given DSL (in order of preference).

Parameters:

  • The resource DSL name (e.g. :file).

  • (defaults to: nil)

    The node against which to resolve. nil causes platform filters to be ignored.



44
45
46
# File 'lib/chef/resource_resolver.rb', line 44

def self.list(resource_name, node: nil)
  new(node, resource_name).list
end

.priority_mapObject



113
114
115
# File 'lib/chef/resource_resolver.rb', line 113

def self.priority_map
  Chef.resource_priority_map
end

.resolve(resource_name, node: nil) ⇒ Object

Resolve a resource by name.

Parameters:

  • The resource DSL name (e.g. :file).

  • (defaults to: nil)

    The node against which to resolve. nil causes platform filters to be ignored.



32
33
34
# File 'lib/chef/resource_resolver.rb', line 32

def self.resolve(resource_name, node: nil)
  new(node, resource_name).resolve
end

Instance Method Details

#listObject

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

API:

  • private



87
88
89
90
# 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) ⇒ Boolean

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

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?).

Returns:

API:

  • private



99
100
101
# File 'lib/chef/resource_resolver.rb', line 99

def provided_by?(resource_class)
  potential_handlers.include?(resource_class)
end

#resolveObject

API:

  • private use Chef::ResourceResolver.resolve instead.



71
72
73
74
75
76
77
78
79
80
81
82
83
84
# 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