5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
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
|
# File 'lib/kdep/validator.rb', line 5
def validate(yaml_string, resource_name)
if yaml_string.nil? || yaml_string.strip.empty?
return {"valid" => true, "errors" => []}
end
errors = []
begin
doc = YAML.safe_load(yaml_string)
rescue => e
return {"valid" => false, "errors" => ["YAML parse error: #{e.message}"]}
end
unless doc.is_a?(Hash)
return {"valid" => false, "errors" => ["YAML document is not a mapping"]}
end
errors << "Missing required field: apiVersion" unless doc["apiVersion"]
errors << "Missing required field: kind" unless doc["kind"]
if doc["metadata"].is_a?(Hash)
errors << "Missing required field: metadata.name" unless doc["metadata"]["name"]
errors << "Missing required field: metadata.namespace" unless doc["metadata"]["namespace"]
else
errors << "Missing required field: metadata"
end
case resource_name
when "deployment"
if doc["spec"].is_a?(Hash)
errors << "Missing required field: spec.replicas" unless doc["spec"]["replicas"]
errors << "Missing required field: spec.template" unless doc["spec"]["template"]
else
errors << "Missing required field: spec"
end
when "service"
if doc["spec"].is_a?(Hash)
errors << "Missing required field: spec.ports" unless doc["spec"]["ports"]
else
errors << "Missing required field: spec"
end
when "ingress"
if doc["spec"].is_a?(Hash)
errors << "Missing required field: spec.rules" unless doc["spec"]["rules"]
else
errors << "Missing required field: spec"
end
when "job"
if doc["spec"].is_a?(Hash)
errors << "Missing required field: spec.template" unless doc["spec"]["template"]
else
errors << "Missing required field: spec"
end
when "cronjob"
if doc["spec"].is_a?(Hash)
errors << "Missing required field: spec.schedule" unless doc["spec"]["schedule"]
else
errors << "Missing required field: spec"
end
end
{"valid" => errors.empty?, "errors" => errors}
end
|