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
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
|
# 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")
FileUtils.cp(
File.join(Kdep.templates_dir, "init", "gitignore"),
File.join(target_dir, ".gitignore")
)
@ui.file_written("kdep/#{name}/.gitignore")
if (tag = old.)
Kdep::State.write(target_dir, tag: tag)
@ui.file_written("kdep/#{name}/state.yml")
@ui.info("Seeded state.yml from live deploy tag: #{tag}")
unless Kdep::State.parseable_tag?(tag)
@ui.warn("Tag #{tag} is not kdep's major.minor format. Verify state.yml before bumping; next bump may produce 0.1.")
end
else
@ui.warn("Could not extract tag from old deploy (latest/missing). Next 'kdep bump' will prompt to seed state.")
end
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
|