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("/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| # rubocop:disable Performance/HashEachMethods
    # 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_value { |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_key { |e| environments << e.to_s }
  columns = environments.count + 1
  environments.each { |env| rows << ui.color(env, :bold) }
  cookbooks.each_key do |c|
    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