Class: Chef::ResourceCollection

Inherits:
Object
  • Object
show all
Extended by:
Forwardable
Includes:
ResourceCollectionSerialization
Defined in:
lib/chef/resource_collection.rb,
lib/chef/resource_collection/resource_set.rb,
lib/chef/resource_collection/resource_list.rb,
lib/chef/resource_collection/stepable_iterator.rb,
lib/chef/resource_collection/resource_collection_serialization.rb

Defined Under Namespace

Modules: ResourceCollectionSerialization Classes: ResourceList, ResourceSet, StepableIterator

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Methods included from ResourceCollectionSerialization

included, #is_chef_resource!, #to_h, #to_json

Constructor Details

#initialize(run_context = nil) ⇒ ResourceCollection

Returns a new instance of ResourceCollection.



42
43
44
45
46
47
# 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

Instance Attribute Details

#run_contextObject

Returns the value of attribute run_context.



38
39
40
# File 'lib/chef/resource_collection.rb', line 38

def run_context
  @run_context
end

#unified_modeObject

Returns the value of attribute unified_mode.



35
36
37
# File 'lib/chef/resource_collection.rb', line 35

def unified_mode
  @unified_mode
end

Class Method Details

.from_hash(o) ⇒ Object



127
128
129
130
131
132
133
134
135
# 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

Instance Method Details

#[]=(index, resource) ⇒ Object

Deprecated.


75
76
77
78
79
# 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) ⇒ Object



68
69
70
71
72
# 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) ⇒ Object



119
120
121
122
123
124
125
# 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) ⇒ Object



107
108
109
# File 'lib/chef/resource_collection.rb', line 107

def find_local(*args)
  resource_set.find(*args)
end

#insert(resource, opts = {}) ⇒ Object Also known as: <<

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.

Parameters:

  • resource (Chef::Resource)

    The resource to insert

  • resource_type (String, Symbol)

    If known, the resource type used in the recipe, Eg ‘package`, `execute`

  • instance_name (String)

    If known, the resource name as used in the recipe, IE ‘vim` in `package ’vim’‘



54
55
56
57
58
59
60
61
62
63
64
65
66
# 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

#lookup(key) ⇒ Object



111
112
113
114
115
116
117
# 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) ⇒ Object



103
104
105
# File 'lib/chef/resource_collection.rb', line 103

def lookup_local(key)
  resource_set.lookup(key)
end

#push(*resources) ⇒ Object

Deprecated.


82
83
84
85
86
87
88
# 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