class Chef::Knife::Deps

Attributes

exit_code[RW]

Public Instance Methods

dependencies_from_runlist(run_list) click to toggle source
# File lib/chef/knife/deps.rb, line 136
def dependencies_from_runlist(run_list)
  chef_run_list = Chef::RunList.new
  chef_run_list.reset!(run_list)
  chef_run_list.map do |run_list_item|
    case run_list_item.type
    when :role
      "/roles/#{run_list_item.name}.json"
    when :recipe
      if run_list_item.name =~ /(.+)::[^:]*/
        "/cookbooks/#{$1}"
      else
        "/cookbooks/#{run_list_item.name}"
      end
    else
      raise "Unknown run list item type #{run_list_item.type}"
    end
  end
end
get_dependencies(entry) click to toggle source
# File lib/chef/knife/deps.rb, line 92
def get_dependencies(entry)
  if entry.parent && entry.parent.path == "/cookbooks"
    entry.chef_object.metadata.dependencies.keys.map { |cookbook| "/cookbooks/#{cookbook}" }

  elsif entry.parent && entry.parent.path == "/nodes"
    node = Chef::JSONCompat.parse(entry.read)
    result = []
    if node["chef_environment"] && node["chef_environment"] != "_default"
      result << "/environments/#{node["chef_environment"]}.json"
    end
    if node["run_list"]
      result += dependencies_from_runlist(node["run_list"])
    end
    result

  elsif entry.parent && entry.parent.path == "/roles"
    role = Chef::JSONCompat.parse(entry.read)
    result = []
    if role["run_list"]
      dependencies_from_runlist(role["run_list"]).each do |dependency|
        result << dependency unless result.include?(dependency)
      end
    end
    if role["env_run_lists"]
      role["env_run_lists"].each_pair do |env, run_list|
        dependencies_from_runlist(run_list).each do |dependency|
          result << dependency unless result.include?(dependency)
        end
      end
    end
    result

  elsif !entry.exists?
    raise Chef::ChefFS::FileSystem::NotFoundError.new(entry)

  else
    []
  end
rescue Chef::ChefFS::FileSystem::NotFoundError => e
  ui.error "#{format_path(e.entry)}: No such file or directory"
  self.exit_code = 2
  []
end
print_dependencies_tree(entry, dependencies, printed = {}, depth = 0) click to toggle source
print_flattened_dependencies(entry, dependencies) click to toggle source
run() click to toggle source
# File lib/chef/knife/deps.rb, line 48
def run
  if config[:recurse] == false && !config[:tree]
    ui.error "--no-recurse requires --tree"
    exit(1)
  end
  config[:recurse] = true if config[:recurse].nil?

  @root = config[:remote] ? chef_fs : local_fs
  dependencies = {}
  pattern_args.each do |pattern|
    Chef::ChefFS::FileSystem.list(@root, pattern).each do |entry|
      if config[:tree]
        print_dependencies_tree(entry, dependencies)
      else
        print_flattened_dependencies(entry, dependencies)
      end
    end
  end
  exit exit_code if exit_code
end