Abstract Base class for expanding a run list. Subclasses must handle fetching roles from a data source by defining fetch_role
Returns a Hash of the form “including_role” => “included_role_or_recipe”. This can be used to show the expanded run list (ordered) graph.
Duplicate roles are not shown.
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.
# File lib/chef/run_list/run_list_expansion.rb, line 57 def initialize(environment, run_list_items, source=nil) @environment = environment @missing_roles_with_including_role = 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 = {} @run_list_trace = Hash.new {|h, key| h[key] = [] } end
# File lib/chef/run_list/run_list_expansion.rb, line 103 def applied_role?(role_name) @applied_roles.has_key?(role_name) end
# File lib/chef/run_list/run_list_expansion.rb, line 98 def apply_role_attributes(role) @default_attrs = Chef::Mixin::DeepMerge.role_merge(@default_attrs, role.default_attributes) @override_attrs = Chef::Mixin::DeepMerge.role_merge(@override_attrs, role.override_attributes) end
# File lib/chef/run_list/run_list_expansion.rb, line 130 def errors @missing_roles_with_including_role.map {|item| item.first } end
Did we find any errors (expanding roles)?
# File lib/chef/run_list/run_list_expansion.rb, line 74 def errors? @missing_roles_with_including_role.length > 0 end
Recurses over the run list items, expanding roles. After this, recipes will contain the fully expanded recipe list
# File lib/chef/run_list/run_list_expansion.rb, line 82 def expand # Sure do miss function arity when being recursive expand_run_list_items(@run_list_items) end
In subclasses, this method will fetch the role from the data source.
# File lib/chef/run_list/run_list_expansion.rb, line 116 def fetch_role(name, included_by) raise NotImplementedError end
Fetches and inflates a role
Chef::Role in most cases false if the role has already been applied nil if the role does not exist
# File lib/chef/run_list/run_list_expansion.rb, line 92 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
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.
nil
# File lib/chef/run_list/run_list_expansion.rb, line 124 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] nil end
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.
# File lib/chef/run_list/run_list_expansion.rb, line 111 def roles @applied_roles.keys end
Generated with the Darkfish Rdoc Generator 2.