Class: Chef::RunList::RunListExpansion
- Defined in:
- lib/chef/run_list/run_list_expansion.rb
Overview
Abstract Base class for expanding a run list. Subclasses must handle fetching roles from a data source by defining fetch_role
Direct Known Subclasses
Instance Attribute Summary collapse
-
#default_attrs ⇒ Object
readonly
Returns the value of attribute default_attrs.
-
#environment ⇒ Object
readonly
Returns the value of attribute environment.
-
#errors ⇒ Object
readonly
Returns the value of attribute errors.
-
#override_attrs ⇒ Object
readonly
Returns the value of attribute override_attrs.
-
#recipes ⇒ Object
readonly
A VersionedRecipeList of recipes.
-
#run_list_items ⇒ Object
readonly
Returns the value of attribute run_list_items.
-
#source ⇒ Object
readonly
The data source passed to the constructor.
Instance Method Summary collapse
- #applied_role?(role_name) ⇒ Boolean
- #apply_role_attributes(role) ⇒ Object
-
#errors? ⇒ Boolean
(also: #invalid?)
Did we find any errors (expanding roles)?.
-
#expand ⇒ Object
Recurses over the run list items, expanding roles.
-
#fetch_role(name) ⇒ Object
In subclasses, this method will fetch the role from the data source.
-
#inflate_role(role_name) ⇒ Object
Fetches and inflates a role === Returns Chef::Role in most cases false if the role has already been applied nil if the role does not exist.
-
#initialize(environment, run_list_items, source = nil) ⇒ RunListExpansion
constructor
A new instance of RunListExpansion.
-
#role_not_found(name) ⇒ Object
When a role is not found, an error message is logged, but no exception is raised.
-
#roles ⇒ Object
Returns an array of role names that were expanded; this includes any roles that were in the original, pre-expansion run_list as well as roles processed during expansion.
Constructor Details
#initialize(environment, run_list_items, source = nil) ⇒ RunListExpansion
50 51 52 53 54 55 56 57 58 59 60 61 62 63 |
# File 'lib/chef/run_list/run_list_expansion.rb', line 50 def initialize(environment, run_list_items, source=nil) @environment = environment @errors = Array.new @run_list_items = run_list_items.dup @source = source @default_attrs = Mash.new @override_attrs = Mash.new @recipes = Chef::RunList::VersionedRecipeList.new @applied_roles = {} end |
Instance Attribute Details
#default_attrs ⇒ Object (readonly)
Returns the value of attribute default_attrs.
37 38 39 |
# File 'lib/chef/run_list/run_list_expansion.rb', line 37 def default_attrs @default_attrs end |
#environment ⇒ Object (readonly)
Returns the value of attribute environment.
43 44 45 |
# File 'lib/chef/run_list/run_list_expansion.rb', line 43 def environment @environment end |
#errors ⇒ Object (readonly)
Returns the value of attribute errors.
41 42 43 |
# File 'lib/chef/run_list/run_list_expansion.rb', line 41 def errors @errors end |
#override_attrs ⇒ Object (readonly)
Returns the value of attribute override_attrs.
39 40 41 |
# File 'lib/chef/run_list/run_list_expansion.rb', line 39 def override_attrs @override_attrs end |
#recipes ⇒ Object (readonly)
A VersionedRecipeList of recipes. Populated only after #expand is called.
35 36 37 |
# File 'lib/chef/run_list/run_list_expansion.rb', line 35 def recipes @recipes end |
#run_list_items ⇒ Object (readonly)
Returns the value of attribute run_list_items.
31 32 33 |
# File 'lib/chef/run_list/run_list_expansion.rb', line 31 def run_list_items @run_list_items end |
#source ⇒ Object (readonly)
The data source passed to the constructor. Not used in this class. In subclasses, this is a couchdb or Chef::REST object pre-configured to fetch roles from their correct location.
48 49 50 |
# File 'lib/chef/run_list/run_list_expansion.rb', line 48 def source @source end |
Instance Method Details
#applied_role?(role_name) ⇒ Boolean
95 96 97 |
# File 'lib/chef/run_list/run_list_expansion.rb', line 95 def applied_role?(role_name) @applied_roles.has_key?(role_name) end |
#apply_role_attributes(role) ⇒ Object
90 91 92 93 |
# File 'lib/chef/run_list/run_list_expansion.rb', line 90 def apply_role_attributes(role) @default_attrs = Chef::Mixin::DeepMerge.merge(@default_attrs, role.default_attributes) @override_attrs = Chef::Mixin::DeepMerge.merge(@override_attrs, role.override_attributes) end |
#errors? ⇒ Boolean Also known as: invalid?
Did we find any errors (expanding roles)?
66 67 68 |
# File 'lib/chef/run_list/run_list_expansion.rb', line 66 def errors? @errors.length > 0 end |
#expand ⇒ Object
Recurses over the run list items, expanding roles. After this, recipes will contain the fully expanded recipe list
74 75 76 77 |
# File 'lib/chef/run_list/run_list_expansion.rb', line 74 def # Sure do miss function arity when being recursive (@run_list_items) end |
#fetch_role(name) ⇒ Object
In subclasses, this method will fetch the role from the data source.
108 109 110 |
# File 'lib/chef/run_list/run_list_expansion.rb', line 108 def fetch_role(name) raise NotImplementedError end |
#inflate_role(role_name) ⇒ Object
Fetches and inflates a role
Returns
Chef::Role in most cases false if the role has already been applied nil if the role does not exist
84 85 86 87 88 |
# File 'lib/chef/run_list/run_list_expansion.rb', line 84 def inflate_role(role_name) return false if applied_role?(role_name) # Prevent infinite loops applied_role(role_name) fetch_role(role_name) end |
#role_not_found(name) ⇒ Object
When a role is not found, an error message is logged, but no exception is raised. We do add an entry in the errors collection.
Returns
nil
116 117 118 119 120 |
# File 'lib/chef/run_list/run_list_expansion.rb', line 116 def role_not_found(name) Chef::Log.error("Role #{name} is in the runlist but does not exist. Skipping expand.") @errors << name nil end |
#roles ⇒ Object
Returns an array of role names that were expanded; this includes any roles that were in the original, pre-expansion run_list as well as roles processed during expansion. Populated only after #expand is called.
103 104 105 |
# File 'lib/chef/run_list/run_list_expansion.rb', line 103 def roles @applied_roles.keys end |