Class: Chef::ResourceCollection::ResourceList
- Extended by:
- Forwardable
- Includes:
- ResourceCollectionSerialization, Enumerable
- Defined in:
- lib/chef/resource_collection/resource_list.rb
Instance Attribute Summary collapse
-
#iterator ⇒ Object
readonly
Returns the value of attribute iterator.
Instance Method Summary collapse
-
#[]=(index, resource) ⇒ Object
deprecated
Deprecated.
-
can be removed when it is removed from resource_collection.rb
-
- #all_resources ⇒ Object
- #execute_each_resource(&resource_exec_block) ⇒ Object
-
#initialize ⇒ ResourceList
constructor
A new instance of ResourceList.
-
#insert(resource) ⇒ Object
If @insert_after_idx is nil, we are not currently executing a converge so the Resource is appended to the end of the list.
Methods included from ResourceCollectionSerialization
included, #is_chef_resource!, #to_hash, #to_json
Constructor Details
#initialize ⇒ ResourceList
Returns a new instance of ResourceList.
42 43 44 45 |
# File 'lib/chef/resource_collection/resource_list.rb', line 42 def initialize @resources = Array.new @insert_after_idx = nil end |
Instance Attribute Details
#iterator ⇒ Object (readonly)
Returns the value of attribute iterator.
33 34 35 |
# File 'lib/chef/resource_collection/resource_list.rb', line 33 def iterator @iterator end |
Instance Method Details
#[]=(index, resource) ⇒ Object
-
can be removed when it is removed from resource_collection.rb
71 72 73 |
# File 'lib/chef/resource_collection/resource_list.rb', line 71 def []=(index, resource) @resources[index] = resource end |
#all_resources ⇒ Object
75 76 77 |
# File 'lib/chef/resource_collection/resource_list.rb', line 75 def all_resources @resources end |
#execute_each_resource(&resource_exec_block) ⇒ Object
79 80 81 82 83 84 85 |
# File 'lib/chef/resource_collection/resource_list.rb', line 79 def execute_each_resource(&resource_exec_block) @iterator = ResourceCollection::StepableIterator.for_collection(@resources) @iterator.each_with_index do |resource, idx| @insert_after_idx = idx yield resource end end |
#insert(resource) ⇒ Object
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.
61 62 63 64 65 66 67 68 |
# 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 |