class Chef::ResourceCollection::ResourceList
Attributes
Public Class Methods
# File lib/chef/resource_collection/resource_list.rb, line 98 def self.from_hash(o) collection = new() resources = o["instance_vars"]["@resources"].map { |r| Chef::Resource.from_hash(r) } collection.instance_variable_set(:@resources, resources) collection end
# File lib/chef/resource_collection/resource_list.rb, line 42 def initialize @resources = Array.new @insert_after_idx = nil end
Public Instance Methods
@deprecated - can be removed when it is removed from resource_collection.rb
# File lib/chef/resource_collection/resource_list.rb, line 81 def []=(index, resource) @resources[index] = resource end
# File lib/chef/resource_collection/resource_list.rb, line 85 def all_resources @resources end
# File lib/chef/resource_collection/resource_list.rb, line 70 def delete(key) raise ArgumentError, "Must pass a Chef::Resource or String to delete" unless key.is_a?(String) || key.is_a?(Chef::Resource) key = key.to_s ret = @resources.reject! { |r| r.to_s == key } if ret.nil? raise Chef::Exceptions::ResourceNotFound, "Cannot find a resource matching #{key} (did you define it first?)" end ret end
FIXME: yard with @yield
# File lib/chef/resource_collection/resource_list.rb, line 90 def execute_each_resource @iterator = ResourceCollection::StepableIterator.for_collection(@resources) @iterator.each_with_index do |resource, idx| @insert_after_idx = idx yield resource end end
@param resource [Chef::Resource] The resource to insert If @insert_after_idx is nil, we are not currently executing a converge so the Resource is appended to the end of the list. If @insert_after_idx is NOT nil, we ARE currently executing a converge so the resource is inserted into the middle of the list after the last resource that was converged. If it is called multiple times (when an LWRP contains multiple resources) it keeps track of that. See this example ResourceList:
- File1, LWRP1, File2
-
# The iterator starts and points to File1. It is executed and @insert_after_idx=0
- File1, LWRP1, File2
-
# The iterator moves to LWRP1. It is executed and @insert_after_idx=1
- File1, LWRP1, Service1, File2
-
# The LWRP execution inserts Service1 and @insert_after_idx=2
- File1, LWRP1, Service1, Service2, File2
-
# The LWRP inserts Service2 and @insert_after_idx=3. The LWRP
finishes executing
- File1, LWRP1, Service1, Service2, File2
-
# The iterator moves to Service1 since it is the next non-executed
resource. The execute_each_resource call below resets @insert_after_idx=2
If Service1 was another LWRP, it would insert its resources between Service1 and Service2. The iterator keeps track of executed resources and @insert_after_idx keeps track of where the next resource to insert should be.
# File lib/chef/resource_collection/resource_list.rb, line 61 def insert(resource) is_chef_resource!(resource) if @insert_after_idx @resources.insert(@insert_after_idx += 1, resource) else @resources << resource end end