class Chef::ResourceCollection

Attributes

resource_list[R]
resource_set[R]
run_context[RW]
unified_mode[RW]

Public Class Methods

from_hash(o) click to toggle source
# File lib/chef/resource_collection.rb, line 127
def self.from_hash(o)
  collection = new
  { "@resource_list" => "ResourceList", "@resource_set" => "ResourceSet" }.each_pair do |name, klass|
    obj = Chef::ResourceCollection.const_get(klass).from_hash(o["instance_vars"].delete(name))
    collection.instance_variable_set(name.to_sym, obj)
  end
  collection.instance_variable_set(:@run_context, o["instance_vars"].delete("@run_context"))
  collection
end
new(run_context = nil) click to toggle source
# File lib/chef/resource_collection.rb, line 42
def initialize(run_context = nil)
  @run_context = run_context
  @resource_set = ResourceSet.new
  @resource_list = ResourceList.new
  @unified_mode = false
end

Public Instance Methods

<<(resource, opts = {})

@deprecated

Alias for: insert
[]=(index, resource) click to toggle source

@deprecated

# File lib/chef/resource_collection.rb, line 75
def []=(index, resource)
  Chef::Log.warn("`[]=` is deprecated, use `insert` (which only inserts at the end)")
  resource_list[index] = resource
  resource_set.insert_as(resource)
end
delete(key) click to toggle source
# File lib/chef/resource_collection.rb, line 68
def delete(key)
  res = resource_set.delete(key)
  resource_list.delete(res.to_s)
  res
end
find(*args) click to toggle source
# File lib/chef/resource_collection.rb, line 119
def find(*args)
  if run_context.nil?
    find_local(*args)
  else
    find_recursive(run_context, *args)
  end
end
find_local(*args) click to toggle source
# File lib/chef/resource_collection.rb, line 107
def find_local(*args)
  resource_set.find(*args)
end
insert(resource, opts = {}) click to toggle source

@param resource [Chef::Resource] The resource to insert @param resource_type [String,Symbol] If known, the resource type used in the recipe, Eg ‘package`, `execute` @param instance_name [String] If known, the resource name as used in the recipe, IE `vim` in `package ’vim’‘ This method is meant to be the 1 insert method necessary in the future. It should support all known use cases

for writing into the ResourceCollection.
# File lib/chef/resource_collection.rb, line 54
def insert(resource, opts = {})
  resource_type ||= opts[:resource_type] # Would rather use Ruby 2.x syntax, but oh well
  instance_name ||= opts[:instance_name]
  resource_list.insert(resource)
  if !(resource_type.nil? && instance_name.nil?)
    resource_set.insert_as(resource, resource_type, instance_name)
  else
    resource_set.insert_as(resource)
  end
  if unified_mode
    run_context.runner.run_all_actions(resource)
  end
end
Also aliased as: <<
lookup(key) click to toggle source
# File lib/chef/resource_collection.rb, line 111
def lookup(key)
  if run_context.nil?
    lookup_local(key)
  else
    lookup_recursive(run_context, key)
  end
end
lookup_local(key) click to toggle source
# File lib/chef/resource_collection.rb, line 103
def lookup_local(key)
  resource_set.lookup(key)
end
push(*resources) click to toggle source

@deprecated

# File lib/chef/resource_collection.rb, line 82
def push(*resources)
  Chef::Log.warn("`push` is deprecated, use `insert`")
  resources.flatten.each do |res|
    insert(res)
  end
  self
end

Private Instance Methods

find_recursive(rc, *args) click to toggle source
# File lib/chef/resource_collection.rb, line 147
def find_recursive(rc, *args)
  rc.resource_collection.resource_set.find(*args)
rescue Chef::Exceptions::ResourceNotFound
  raise if rc.parent_run_context.nil?

  find_recursive(rc.parent_run_context, *args)
end
lookup_recursive(rc, key) click to toggle source
# File lib/chef/resource_collection.rb, line 139
def lookup_recursive(rc, key)
  rc.resource_collection.resource_set.lookup(key)
rescue Chef::Exceptions::ResourceNotFound
  raise if rc.parent_run_context.nil?

  lookup_recursive(rc.parent_run_context, key)
end