Class: Chef::RunList::RunListExpansion
- Inherits:
-
Object
- Object
- 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
-
#all_missing_roles ⇒ Object
readonly
Returns the value of attribute all_missing_roles.
-
#better_run_list_trace ⇒ Object
readonly
Like run list trace but instead of saving the entries as strings it saves their objects The to_json method uses this list to construct json.
-
#default_attrs ⇒ Object
readonly
Returns the value of attribute default_attrs.
-
#environment ⇒ Object
readonly
Returns the value of attribute environment.
-
#missing_roles_with_including_role ⇒ Object
readonly
Returns the value of attribute missing_roles_with_including_role.
-
#override_attrs ⇒ Object
readonly
Returns the value of attribute override_attrs.
-
#recipes ⇒ Object
readonly
A VersionedRecipeList of recipes.
-
#role_errors ⇒ Object
readonly
Returns the value of attribute role_errors.
-
#run_list_items ⇒ Object
readonly
Returns the value of attribute run_list_items.
-
#run_list_trace ⇒ Object
readonly
Returns a Hash of the form "including_role" => "included_role_or_recipe".
-
#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 ⇒ 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, included_by) ⇒ Object
In subclasses, this method will fetch the role from the data source.
-
#inflate_role(role_name, included_by) ⇒ 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, included_by) ⇒ 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.
- #to_h ⇒ Object (also: #to_hash)
- #to_json(*a) ⇒ Object
Constructor Details
#initialize(environment, run_list_items, source = nil) ⇒ RunListExpansion
Returns a new instance of RunListExpansion.
65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 |
# File 'lib/chef/run_list/run_list_expansion.rb', line 65 def initialize(environment, run_list_items, source = nil) @environment = environment @missing_roles_with_including_role = [] @run_list_items = run_list_items.dup @source = source @default_attrs = Mash.new @override_attrs = Mash.new @recipes = Chef::RunList::VersionedRecipeList.new @applied_roles = {} @run_list_trace = Hash.new { |h, key| h[key] = [] } @better_run_list_trace = Hash.new { |h, key| h[key] = [] } @all_missing_roles = {} @role_errors = {} end |
Instance Attribute Details
#all_missing_roles ⇒ Object (readonly)
Returns the value of attribute all_missing_roles.
62 63 64 |
# File 'lib/chef/run_list/run_list_expansion.rb', line 62 def all_missing_roles @all_missing_roles end |
#better_run_list_trace ⇒ Object (readonly)
Like run list trace but instead of saving the entries as strings it saves their objects The to_json method uses this list to construct json.
60 61 62 |
# File 'lib/chef/run_list/run_list_expansion.rb', line 60 def better_run_list_trace @better_run_list_trace end |
#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.
43 44 45 |
# File 'lib/chef/run_list/run_list_expansion.rb', line 43 def environment @environment end |
#missing_roles_with_including_role ⇒ Object (readonly)
Returns the value of attribute missing_roles_with_including_role.
45 46 47 |
# File 'lib/chef/run_list/run_list_expansion.rb', line 45 def missing_roles_with_including_role @missing_roles_with_including_role 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 |
#role_errors ⇒ Object (readonly)
Returns the value of attribute role_errors.
63 64 65 |
# File 'lib/chef/run_list/run_list_expansion.rb', line 63 def role_errors @role_errors 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 |
#run_list_trace ⇒ Object (readonly)
Returns a Hash of the form "including_role" => "included_role_or_recipe". This can be used to show the expanded run list (ordered) graph. ==== Caveats
- Duplicate roles are not shown.
56 57 58 |
# File 'lib/chef/run_list/run_list_expansion.rb', line 56 def run_list_trace @run_list_trace end |
#source ⇒ Object (readonly)
The data source passed to the constructor. Not used in this class. In subclasses, this is a Chef::ServerAPI 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
115 116 117 |
# File 'lib/chef/run_list/run_list_expansion.rb', line 115 def applied_role?(role_name) @applied_roles.key?(role_name) end |
#apply_role_attributes(role) ⇒ Object
110 111 112 113 |
# File 'lib/chef/run_list/run_list_expansion.rb', line 110 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 ⇒ Object
143 144 145 |
# File 'lib/chef/run_list/run_list_expansion.rb', line 143 def errors @missing_roles_with_including_role.map(&:first) end |
#errors? ⇒ Boolean Also known as: invalid?
Did we find any errors (expanding roles)?
85 86 87 |
# File 'lib/chef/run_list/run_list_expansion.rb', line 85 def errors? @missing_roles_with_including_role.length > 0 end |
#expand ⇒ Object
Recurses over the run list items, expanding roles. After this, +recipes+ will contain the fully expanded recipe list
93 94 95 96 |
# File 'lib/chef/run_list/run_list_expansion.rb', line 93 def # Sure do miss function arity when being recursive (@run_list_items) end |
#fetch_role(name, included_by) ⇒ Object
In subclasses, this method will fetch the role from the data source.
128 129 130 |
# File 'lib/chef/run_list/run_list_expansion.rb', line 128 def fetch_role(name, included_by) raise NotImplementedError end |
#inflate_role(role_name, included_by) ⇒ 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
103 104 105 106 107 108 |
# File 'lib/chef/run_list/run_list_expansion.rb', line 103 def inflate_role(role_name, included_by) return false if applied_role?(role_name) # Prevent infinite loops applied_role(role_name) fetch_role(role_name, included_by) end |
#role_not_found(name, included_by) ⇒ 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
136 137 138 139 140 141 |
# File 'lib/chef/run_list/run_list_expansion.rb', line 136 def role_not_found(name, included_by) Chef::Log.error("Role #{name} (included by '#{included_by}') is in the runlist but does not exist. Skipping expand.") @missing_roles_with_including_role << [name, included_by] @all_missing_roles[name] = true 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.
123 124 125 |
# File 'lib/chef/run_list/run_list_expansion.rb', line 123 def roles @applied_roles.keys end |
#to_h ⇒ Object Also known as: to_hash
151 152 153 154 |
# File 'lib/chef/run_list/run_list_expansion.rb', line 151 def to_h seen_items = { recipe: {}, role: {} } { id: @environment, run_list: convert_run_list_trace("top level", seen_items) } end |
#to_json(*a) ⇒ Object
147 148 149 |
# File 'lib/chef/run_list/run_list_expansion.rb', line 147 def to_json(*a) Chef::JSONCompat.to_json(to_h, *a) end |