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
103
104
105
106
107
108
109
110
111
112
113
114
115
|
# File 'lib/kdep/commands/migrate.rb', line 26
def execute
path = @args[0]
unless path
@ui.error("Missing path argument")
@ui.info("Usage: kdep migrate [path]")
exit 1
end
unless File.directory?(path)
@ui.error("Path not found: #{path}")
exit 1
end
old = Kdep::OldFormat.new(path)
begin
kdep_config = old.to_kdep_config
name = kdep_config["name"] || old.app_name
rescue => e
@ui.error(e.message)
exit 1
end
target_dir = File.join(Dir.pwd, "kdep", name)
if File.exist?(target_dir)
@ui.error("kdep/#{name} already exists")
exit 1
end
FileUtils.mkdir_p(target_dir)
File.write(File.join(target_dir, "app.yml"), YAML.dump(kdep_config))
@ui.file_written("kdep/#{name}/app.yml")
env = old.
unless env.empty?
@ui.info("Extracted #{env.size} env vars from ConfigMap (already in envFrom refs)")
end
secrets = old.
if secrets.empty?
@ui.warn("No secrets found. Create kdep/#{name}/secrets.yml manually if needed.")
else
require "base64"
decoded = {}
secrets.each do |k, v|
decoded[k] = Base64.decode64(v) rescue v
end
secrets_path = File.join(target_dir, "secrets.yml")
File.write(secrets_path, YAML.dump(decoded))
@ui.file_written("kdep/#{name}/secrets.yml")
@ui.warn("#{secrets.size} secrets written. Review kdep/#{name}/secrets.yml — values are now plain text.")
end
custom_resources = old.
unless custom_resources.empty?
res_dir = File.join(target_dir, "resources")
FileUtils.mkdir_p(res_dir)
custom_resources.each do |cr|
kind = cr["kind"]
doc = cr["doc"]
res_name = doc.dig("metadata", "name") || kind.downcase
filename = "#{res_name.gsub(/[^a-zA-Z0-9_-]/, "-")}.yml.erb"
File.write(File.join(res_dir, filename), YAML.dump(doc))
@ui.file_written("kdep/#{name}/resources/#{filename}")
end
@ui.info("#{custom_resources.size} custom resource(s) generated as templates")
end
@ui.success("Migration complete: kdep/#{name}/")
@ui.info("")
@ui.info("Generated config:")
kdep_config.each do |k, v|
if v.is_a?(Hash) || v.is_a?(Array)
@ui.info(" #{k}: #{v.inspect}")
else
@ui.info(" #{k}: #{v}")
end
end
@ui.info("")
verify_migration(old, target_dir, kdep_config)
@ui.info("")
@ui.info("Next: review kdep/#{name}/app.yml, then `kdep render #{name}` to test")
end
|