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 58 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 104 def applied_role?(role_name) @applied_roles.has_key?(role_name) end
# File lib/chef/run_list/run_list_expansion.rb, line 99 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 131 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 75 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 83 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 117 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 93 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 125 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 112 def roles @applied_roles.keys end
Generated with the Darkfish Rdoc Generator 2.