class Chef::Knife::EnvironmentCompare

Public Instance Methods

run() click to toggle source
# File lib/chef/knife/environment_compare.rb, line 43
def run
  # Get the commandline environments or all if none are provided.
  environments = environment_list     

  # Get a list of all cookbooks that have constraints and their environment.
  constraints = constraint_list(environments) 

  # Get the total list of cookbooks that have constraints
  cookbooks = cookbook_list(constraints)

  # If we cannot find any cookbooks, we can stop here.
  if cookbooks.nil? || cookbooks.empty?
    ui.error "Cannot find any environment cookbook constraints"
    exit 1
  end
     
  # Get all cookbooks so we can compare them all
  cookbooks = rest.get_rest("/cookbooks?num_versions=1") if config[:all]

  # display matrix view of in the requested format.
  if config[:format] == 'summary'
    matrix = matrix_output(cookbooks, constraints)
    ui.output(matrix)
  else
    ui.output(constraints)
  end
end

Private Instance Methods

constraint_list(environments) click to toggle source
# File lib/chef/knife/environment_compare.rb, line 82
def constraint_list(environments)
  constraints = {}
  environments.each do |env,url|
    # Because you cannot modify the default environment I filter it out here.
    unless env == "_default"
      envdata = Chef::Environment.load(env)
      ver = envdata.cookbook_versions
      constraints[env] = ver
    end
  end
  constraints
end
cookbook_list(constraints) click to toggle source
# File lib/chef/knife/environment_compare.rb, line 95
def cookbook_list(constraints)
  result = {}
  constraints.each { |env, cb| result.merge!(cb) }
  result
end
environment_list() click to toggle source
# File lib/chef/knife/environment_compare.rb, line 73
def environment_list
  environments = []
  unless @name_args.nil? || @name_args.empty?
    @name_args.each { |name| environments << name }
  else
    environments = Chef::Environment.list
  end
end
matrix_output(cookbooks, constraints) click to toggle source
# File lib/chef/knife/environment_compare.rb, line 101
def matrix_output(cookbooks, constraints)
  rows = [ '' ]
  environments = []
  constraints.each { |e,v| environments << e.to_s }
  columns = environments.count + 1
  environments.each { |env| rows << ui.color(env, :bold) }
  cookbooks.each do |c,v|
    total = []
    environments.each { |n| total << constraints[n][c]}
    if total.uniq.count == 1
      next if config[:mismatch]
      color = :white
    else
      color = :yellow
    end
    rows << ui.color(c, :bold)
    environments.each do |e|
      tag = constraints[e][c] || "latest"
      rows << ui.color(tag, color)   
    end
  end
  ui.list(rows, :uneven_columns_across, columns)
end