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
|
# 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
if (state_tag = Kdep::State.tag(deploy_dir))
config["tag"] = state_tag
else
@ui.warn("No state.yml in #{deploy_dir} -- diff will compare preset default tag against live cluster.")
end
require "tmpdir"
Dir.mktmpdir("kdep-diff-") do |tmpdir|
preset = Kdep::Preset.new(config["preset"], deploy_dir)
writer = Kdep::Writer.new(tmpdir)
renderer = Kdep::Renderer.new(config, deploy_dir)
preset.resources.each_with_index do |resource_name, idx|
begin
content = renderer.render_resource(resource_name)
rescue => e
@ui.error("#{resource_name}: #{e.message}")
next
end
writer.write(resource_name, content, idx + 1)
end
rendered_files = Dir.glob(File.join(tmpdir, "*.yml")).sort
run_diff(rendered_files)
end
end
|