forked from argoproj/argo-workflows
-
Notifications
You must be signed in to change notification settings - Fork 0
/
kubeifyswagger.go
92 lines (86 loc) · 2.58 KB
/
kubeifyswagger.go
1
2
3
4
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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
package main
import (
"encoding/json"
"os"
"reflect"
)
func kubeifySwagger(in, out string) {
f, err := os.Open(in)
if err != nil {
panic(err)
}
swagger := obj{}
err = json.NewDecoder(f).Decode(&swagger)
if err != nil {
panic(err)
}
definitions := swagger["definitions"].(obj)
definitions["io.k8s.apimachinery.pkg.apis.meta.v1.Fields"] = obj{}
definitions["io.k8s.apimachinery.pkg.apis.meta.v1.Initializer"] = obj{}
definitions["io.k8s.apimachinery.pkg.apis.meta.v1.Initializers"] = obj{}
definitions["io.k8s.apimachinery.pkg.apis.meta.v1.Status"] = obj{}
definitions["io.k8s.apimachinery.pkg.apis.meta.v1.StatusCause"] = obj{}
definitions["io.k8s.apimachinery.pkg.apis.meta.v1.StatusDetails"] = obj{}
delete(definitions, "io.k8s.apimachinery.pkg.apis.meta.v1.Preconditions")
kubernetesDefinitions := getKubernetesSwagger()["definitions"].(obj)
for n, d := range definitions {
kd, ok := kubernetesDefinitions[n]
if ok && !reflect.DeepEqual(d, kd) {
println("replacing bad definition " + n)
definitions[n] = kd
}
}
// loop again to handle any new bad definitions
for _, d := range definitions {
props, ok := d.(obj)["properties"].(obj)
if ok {
for _, prop := range props {
prop := prop.(obj)
if prop["format"] == "int32" || prop["format"] == "int64" {
delete(prop, "format")
}
delete(prop, "default")
items, ok := prop["items"].(obj)
if ok {
delete(items, "default")
}
additionalProperties, ok := prop["additionalProperties"].(obj)
if ok {
delete(additionalProperties, "default")
}
}
}
props, ok = d.(obj)["additionalProperties"].(obj)
if ok {
delete(props, "default")
}
}
definitions["io.k8s.apimachinery.pkg.util.intstr.IntOrString"] = obj{"type": "string"}
// "omitempty" does not work for non-nil structs, so we must change it here
definitions["io.argoproj.workflow.v1alpha1.CronWorkflow"].(obj)["required"] = array{"metadata", "spec"}
definitions["io.argoproj.workflow.v1alpha1.Workflow"].(obj)["required"] = array{"metadata", "spec"}
definitions["io.argoproj.workflow.v1alpha1.ScriptTemplate"].(obj)["required"] = array{"image", "source"}
definitions["io.k8s.api.core.v1.Container"].(obj)["required"] = array{"image"}
f, err = os.Create(out)
if err != nil {
panic(err)
}
e := json.NewEncoder(f)
e.SetIndent("", " ")
err = e.Encode(swagger)
if err != nil {
panic(err)
}
}
func getKubernetesSwagger() obj {
f, err := os.Open("dist/kubernetes.swagger.json")
if err != nil {
panic(err)
}
swagger := obj{}
err = json.NewDecoder(f).Decode(&swagger)
if err != nil {
panic(err)
}
return swagger
}