Parent

Files

Class/Module Index [+]

Quicksearch

Chef::RunList::RunListExpansion

Abstract Base class for expanding a run list. Subclasses must handle fetching roles from a data source by defining fetch_role

Attributes

default_attrs[R]
environment[R]
missing_roles_with_including_role[R]
override_attrs[R]
recipes[R]

A VersionedRecipeList of recipes. Populated only after expand is called.

run_list_items[R]
run_list_trace[R]

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.

source[R]

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.

Public Class Methods

new(environment, run_list_items, source=nil) click to toggle source
# 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

Public Instance Methods

applied_role?(role_name) click to toggle source
# File lib/chef/run_list/run_list_expansion.rb, line 103
def applied_role?(role_name)
  @applied_roles.has_key?(role_name)
end
apply_role_attributes(role) click to toggle source
# 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
errors() click to toggle source
# File lib/chef/run_list/run_list_expansion.rb, line 130
def errors
  @missing_roles_with_including_role.map {|item| item.first }
end
errors?() click to toggle source

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
Also aliased as: invalid?
expand() click to toggle source

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
fetch_role(name, included_by) click to toggle source

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
inflate_role(role_name, included_by) click to toggle source

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

# 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
invalid?() click to toggle source
Alias for: errors?
role_not_found(name, included_by) click to toggle source

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

# 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
roles() click to toggle source

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

[Validate]

Generated with the Darkfish Rdoc Generator 2.