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
RunListExpansionFromAPI, RunListExpansionFromCouchDB, RunListExpansionFromDisk
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
Returns a new instance of RunListExpansion.
52 53 54 55 56 57 58 59 60 61 62 63 64 65 |
# File 'lib/chef/run_list/run_list_expansion.rb', line 52 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.
39 40 41 |
# File 'lib/chef/run_list/run_list_expansion.rb', line 39 def default_attrs @default_attrs end |
#environment ⇒ Object (readonly)
Returns the value of attribute environment.
45 46 47 |
# File 'lib/chef/run_list/run_list_expansion.rb', line 45 def environment @environment end |
#errors ⇒ Object (readonly)
Returns the value of attribute errors.
43 44 45 |
# File 'lib/chef/run_list/run_list_expansion.rb', line 43 def errors @errors end |
#override_attrs ⇒ Object (readonly)
Returns the value of attribute override_attrs.
41 42 43 |
# File 'lib/chef/run_list/run_list_expansion.rb', line 41 def override_attrs @override_attrs end |
#recipes ⇒ Object (readonly)
A VersionedRecipeList of recipes. Populated only after #expand is called.
37 38 39 |
# File 'lib/chef/run_list/run_list_expansion.rb', line 37 def recipes @recipes end |
#run_list_items ⇒ Object (readonly)
Returns the value of attribute run_list_items.
33 34 35 |
# File 'lib/chef/run_list/run_list_expansion.rb', line 33 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.
50 51 52 |
# File 'lib/chef/run_list/run_list_expansion.rb', line 50 def source @source end |
Instance Method Details
#applied_role?(role_name) ⇒ Boolean
97 98 99 |
# File 'lib/chef/run_list/run_list_expansion.rb', line 97 def applied_role?(role_name) @applied_roles.has_key?(role_name) end |
#apply_role_attributes(role) ⇒ Object
92 93 94 95 |
# File 'lib/chef/run_list/run_list_expansion.rb', line 92 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)?
68 69 70 |
# File 'lib/chef/run_list/run_list_expansion.rb', line 68 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
76 77 78 79 |
# File 'lib/chef/run_list/run_list_expansion.rb', line 76 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.
110 111 112 |
# File 'lib/chef/run_list/run_list_expansion.rb', line 110 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
86 87 88 89 90 |
# File 'lib/chef/run_list/run_list_expansion.rb', line 86 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
118 119 120 121 122 |
# File 'lib/chef/run_list/run_list_expansion.rb', line 118 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.
105 106 107 |
# File 'lib/chef/run_list/run_list_expansion.rb', line 105 def roles @applied_roles.keys end |