Class: Chef::RunContext
- Includes:
- Mixin::LanguageIncludeRecipe
- Defined in:
- lib/chef/run_context.rb
Overview
Chef::RunContext
Value object that loads and tracks the context of a Chef run
Instance Attribute Summary collapse
-
#cookbook_collection ⇒ Object
readonly
Returns the value of attribute cookbook_collection.
-
#definitions ⇒ Object
readonly
Returns the value of attribute definitions.
-
#delayed_notification_collection ⇒ Object
Needs to be settable so deploy can run a resource_collection independent of any cookbooks.
-
#events ⇒ Object
readonly
Returns the value of attribute events.
-
#immediate_notification_collection ⇒ Object
Needs to be settable so deploy can run a resource_collection independent of any cookbooks.
-
#node ⇒ Object
readonly
Returns the value of attribute node.
-
#resource_collection ⇒ Object
Needs to be settable so deploy can run a resource_collection independent of any cookbooks.
Instance Method Summary collapse
- #delayed_notifications(resource) ⇒ Object
- #immediate_notifications(resource) ⇒ Object
-
#initialize(node, cookbook_collection, events) ⇒ RunContext
constructor
Creates a new Chef::RunContext object and populates its fields.
- #load(run_list_expansion) ⇒ Object
- #notifies_delayed(notification) ⇒ Object
- #notifies_immediately(notification) ⇒ Object
- #resolve_recipe(recipe_name) ⇒ Object
Methods included from Mixin::LanguageIncludeRecipe
#include_recipe, #load_recipe, #require_recipe
Constructor Details
#initialize(node, cookbook_collection, events) ⇒ RunContext
Creates a new Chef::RunContext object and populates its fields. This object gets used by the Chef Server to generate a fully compiled recipe list for a node.
Returns
- object<Chef::RunContext>
-
Duh. :)
47 48 49 50 51 52 53 54 55 56 57 58 59 |
# File 'lib/chef/run_context.rb', line 47 def initialize(node, cookbook_collection, events) @node = node @cookbook_collection = cookbook_collection @resource_collection = Chef::ResourceCollection.new @immediate_notification_collection = Hash.new {|h,k| h[k] = []} @delayed_notification_collection = Hash.new {|h,k| h[k] = []} @definitions = Hash.new @events = events # TODO: 5/18/2010 cw/timh - See note on Chef::Node's # cookbook_collection attr_accessor node.cookbook_collection = cookbook_collection end |
Instance Attribute Details
#cookbook_collection ⇒ Object (readonly)
Returns the value of attribute cookbook_collection.
34 35 36 |
# File 'lib/chef/run_context.rb', line 34 def cookbook_collection @cookbook_collection end |
#definitions ⇒ Object (readonly)
Returns the value of attribute definitions.
34 35 36 |
# File 'lib/chef/run_context.rb', line 34 def definitions @definitions end |
#delayed_notification_collection ⇒ Object
Needs to be settable so deploy can run a resource_collection independent of any cookbooks.
38 39 40 |
# File 'lib/chef/run_context.rb', line 38 def delayed_notification_collection @delayed_notification_collection end |
#events ⇒ Object (readonly)
Returns the value of attribute events.
40 41 42 |
# File 'lib/chef/run_context.rb', line 40 def events @events end |
#immediate_notification_collection ⇒ Object
Needs to be settable so deploy can run a resource_collection independent of any cookbooks.
38 39 40 |
# File 'lib/chef/run_context.rb', line 38 def immediate_notification_collection @immediate_notification_collection end |
#node ⇒ Object (readonly)
Returns the value of attribute node.
34 35 36 |
# File 'lib/chef/run_context.rb', line 34 def node @node end |
#resource_collection ⇒ Object
Needs to be settable so deploy can run a resource_collection independent of any cookbooks.
38 39 40 |
# File 'lib/chef/run_context.rb', line 38 def resource_collection @resource_collection end |
Instance Method Details
#delayed_notifications(resource) ⇒ Object
124 125 126 127 128 129 130 |
# File 'lib/chef/run_context.rb', line 124 def delayed_notifications(resource) if resource.instance_of?(Chef::Resource) return @delayed_notification_collection[resource.name] else return @delayed_notification_collection[resource.to_s] end end |
#immediate_notifications(resource) ⇒ Object
116 117 118 119 120 121 122 |
# File 'lib/chef/run_context.rb', line 116 def immediate_notifications(resource) if resource.instance_of?(Chef::Resource) return @immediate_notification_collection[resource.name] else return @immediate_notification_collection[resource.to_s] end end |
#load(run_list_expansion) ⇒ Object
61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 |
# File 'lib/chef/run_context.rb', line 61 def load(run_list_expansion) load_libraries load_lwrps load_attributes load_resource_definitions # Precendence rules state that roles' attributes come after # cookbooks. Now we've loaded attributes from cookbooks with # load_attributes, apply the expansion attributes (loaded from # roles) to the node. @node.apply_expansion_attributes(run_list_expansion) @events.recipe_load_start(run_list_expansion.recipes.size) run_list_expansion.recipes.each do |recipe| begin # TODO: timh/cw, 5-14-2010: It's distasteful to be including # the DSL in a class outside the context of the DSL include_recipe(recipe) rescue Chef::Exceptions::RecipeNotFound => e @events.recipe_not_found(e) raise rescue Exception => e path = resolve_recipe(recipe) @events.recipe_file_load_failed(path, e) raise end end @events.recipe_load_complete end |
#notifies_delayed(notification) ⇒ Object
107 108 109 110 111 112 113 114 |
# File 'lib/chef/run_context.rb', line 107 def notifies_delayed(notification) nr = notification. if nr.instance_of?(Chef::Resource) @delayed_notification_collection[nr.name] << notification else @delayed_notification_collection[nr.to_s] << notification end end |
#notifies_immediately(notification) ⇒ Object
98 99 100 101 102 103 104 105 |
# File 'lib/chef/run_context.rb', line 98 def notifies_immediately(notification) nr = notification. if nr.instance_of?(Chef::Resource) @immediate_notification_collection[nr.name] << notification else @immediate_notification_collection[nr.to_s] << notification end end |
#resolve_recipe(recipe_name) ⇒ Object
92 93 94 95 96 |
# File 'lib/chef/run_context.rb', line 92 def resolve_recipe(recipe_name) cookbook_name, recipe_short_name = Chef::Recipe.parse_recipe_name(recipe_name) cookbook = cookbook_collection[cookbook_name] cookbook.recipe_filenames_by_name[recipe_short_name] end |