class ChefCLI::Policyfile::IncludedPoliciesCookbookSource
Attributes
included_policy_location_specs[R]
A list of included policies
ui[RW]
UI
object for output
Public Class Methods
new(included_policy_location_specs) { |self| ... }
click to toggle source
Constructor
# File lib/chef-cli/policyfile/included_policies_cookbook_source.rb, line 46 def initialize(included_policy_location_specs) @included_policy_location_specs = included_policy_location_specs @ui = UI.new @preferred_cookbooks = [] yield self if block_given? end
Public Instance Methods
==(other)
click to toggle source
# File lib/chef-cli/policyfile/included_policies_cookbook_source.rb, line 71 def ==(other) other.is_a?(self.class) && other.included_policy_location_specs == included_policy_location_specs end
check_for_conflicts!()
click to toggle source
# File lib/chef-cli/policyfile/included_policies_cookbook_source.rb, line 57 def check_for_conflicts! source_options universe_graph end
default_source_args()
click to toggle source
# File lib/chef-cli/policyfile/included_policies_cookbook_source.rb, line 53 def default_source_args [:included_policies, []] end
desc()
click to toggle source
# File lib/chef-cli/policyfile/included_policies_cookbook_source.rb, line 94 def desc "included_policies()" end
null?()
click to toggle source
# File lib/chef-cli/policyfile/included_policies_cookbook_source.rb, line 90 def null? false end
preferred_cookbooks()
click to toggle source
# File lib/chef-cli/policyfile/included_policies_cookbook_source.rb, line 67 def preferred_cookbooks universe_graph.keys end
preferred_source_for?(cookbook_name)
click to toggle source
All are preferred here
# File lib/chef-cli/policyfile/included_policies_cookbook_source.rb, line 63 def preferred_source_for?(cookbook_name) universe_graph.include?(cookbook_name) end
source_options_for(cookbook_name, cookbook_version)
click to toggle source
Returns the metadata (path and version) for an individual cookbook
@return [Hash] metadata for a single cookbook version
# File lib/chef-cli/policyfile/included_policies_cookbook_source.rb, line 86 def source_options_for(cookbook_name, cookbook_version) source_options[cookbook_name][cookbook_version] end
universe_graph()
click to toggle source
Calls the slurp_metadata! helper once to calculate the @universe_graph and @cookbook_version_paths metadata. Returns the @universe_graph.
@return [Hash] universe_graph
# File lib/chef-cli/policyfile/included_policies_cookbook_source.rb, line 79 def universe_graph @universe_graph ||= build_universe end
Private Instance Methods
build_source_options()
click to toggle source
Collect all the source options
# File lib/chef-cli/policyfile/included_policies_cookbook_source.rb, line 132 def build_source_options included_policy_location_specs.inject({}) do |acc, policy_spec| lock = policy_spec.policyfile_lock lock.cookbook_locks.each do |(name, cookbook_lock)| version = cookbook_lock.version if acc[name] if acc[name][version] if acc[name][version] != cookbook_lock.source_options raise ConflictingCookbookSources.new("Conflicting sources provided for cookbook #{name}") end else raise ConflictingCookbookVersions.new("Multiple sources provided for cookbook #{name}") end else acc[name] = {} acc[name][version] = cookbook_lock.source_options end end acc end end
build_universe()
click to toggle source
# File lib/chef-cli/policyfile/included_policies_cookbook_source.rb, line 100 def build_universe included_policy_location_specs.inject({}) do |acc, policy_spec| lock = policy_spec.policyfile_lock cookbook_dependencies = lock.solution_dependencies.cookbook_dependencies cookbook_dependencies.each do |(cookbook, deps)| name = cookbook.name version = cookbook.version mapped_deps = deps.map do |dep| [dep[0], dep[1].to_s] end if acc[name] if acc[name][version] if acc[name][version] != mapped_deps raise ConflictingCookbookDependencies.new("Conflicting dependencies provided for cookbook #{name}") end else raise ConflictingCookbookVersions.new("Multiple versions provided for cookbook #{name}") end else acc[name] = {} acc[name][version] = mapped_deps end end acc end end
source_options()
click to toggle source
# File lib/chef-cli/policyfile/included_policies_cookbook_source.rb, line 127 def source_options @source_options ||= build_source_options end