21
22
23
24
25
26
27
28
29
30
31
32
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
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
|
# File 'lib/kdep/commands/diff.rb', line 21
def execute
deploy_name = @args[0]
env = @args[1]
discovery = Kdep::Discovery.new
kdep_dir = discovery.find_kdep_dir
unless kdep_dir
@ui.error("No kdep/ directory found")
exit 1
end
deploy_dir = resolve_deploy_dir(kdep_dir, deploy_name, discovery)
unless deploy_dir
exit 1
end
config = Kdep::Config.new(deploy_dir, env).load
begin
Kdep::ContextGuard.new(config["context"]).validate!
rescue Kdep::Kubectl::Error => e
@ui.error(e.message)
exit 1
end
preset = Kdep::Preset.new(config["preset"], deploy_dir)
resources = preset.resources
repo_root = File.dirname(kdep_dir)
output_dir = File.join(deploy_dir, ".rendered")
writer = Kdep::Writer.new(output_dir)
writer.clean
renderer = Kdep::Renderer.new(config, deploy_dir)
resources.each_with_index do |resource_name, idx|
index = idx + 1
begin
content = renderer.render_resource(resource_name)
rescue => e
@ui.error("#{resource_name}: #{e.message}")
next
end
writer.write(resource_name, content, index)
end
rendered_files = Dir.glob(File.join(output_dir, "*.yml")).sort
if rendered_files.empty?
@ui.info("No rendered files to diff")
return
end
has_diffs = false
errors = []
rendered_files.each do |file_path|
begin
diff_output = Kdep::Kubectl.diff(file_path)
if diff_output
has_diffs = true
@ui.info("--- #{File.basename(file_path)} ---")
@ui.info(diff_output)
end
rescue Kdep::Kubectl::Error => e
errors << { "file" => File.basename(file_path), "error" => e.message }
@ui.error("#{File.basename(file_path)}: #{e.message}")
end
end
unless has_diffs || errors.any?
@ui.info("No changes -- cluster state matches rendered manifests.")
end
end
|