33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
|
# File 'lib/chef/knife/depgraph.rb', line 33
def run
unless name_args.size == 1
ui.err(opt_parser)
exit 1
end
node_name = name_args.first
node = Chef::Node.load(node_name)
environment ||= node.chef_environment
cookbooks = node.run_list.run_list_items
environment ||= '_default'
cookbooks = cookbooks.map do |arg|
arg = arg.to_s
if arg.include?('[')
run_list = [Chef::RunList::RunListItem.new(arg)]
expansion = Chef::RunList::RunListExpansionFromAPI.new(environment, run_list, rest)
expansion.expand
expansion.recipes
else
arg end
end.flatten.map do |arg|
arg.split('@').first.split('::').first
end
ui.err("Solving [#{cookbooks.join(', ')}] in #{environment} environment")
solution = solve_cookbooks(environment, cookbooks)
dep_graph = {}
solution.sort.each do |name, cb|
dep_graph[name] = {
"version" => cb.version,
"deps" => cb.metadata.dependencies
}
end
ui.msg( Chef::JSONCompat.to_json_pretty(dep_graph) )
end
|