-
Notifications
You must be signed in to change notification settings - Fork 904
/
schema.go
89 lines (80 loc) · 3.12 KB
/
schema.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
package composition
import (
"k8s.io/apiextensions-apiserver/pkg/apis/apiextensions"
"github.com/crossplane/crossplane/pkg/validation/internal/schema"
)
// sets all the defaults in the given schema.
func defaultMetadataSchema(in *apiextensions.JSONSchemaProps) *apiextensions.JSONSchemaProps {
out := in
if out == nil {
out = &apiextensions.JSONSchemaProps{}
}
if out.Type == "" {
out.Type = string(schema.KnownJSONTypeObject)
}
if out.Properties == nil {
out.Properties = map[string]apiextensions.JSONSchemaProps{}
}
if _, exists := out.Properties["metadata"]; !exists {
out.Properties["metadata"] = apiextensions.JSONSchemaProps{}
}
metadata := out.Properties["metadata"]
out.Properties["metadata"] = *defaultMetadataOnly(&metadata)
return out
}
func defaultMetadataOnly(metadata *apiextensions.JSONSchemaProps) *apiextensions.JSONSchemaProps {
setDefaultType(metadata)
setDefaultProperty(metadata, "name", string(schema.KnownJSONTypeString))
setDefaultProperty(metadata, "namespace", string(schema.KnownJSONTypeString))
setDefaultProperty(metadata, "uid", string(schema.KnownJSONTypeString))
setDefaultProperty(metadata, "generateName", string(schema.KnownJSONTypeString))
setDefaultLabels(metadata)
setDefaultAnnotations(metadata)
return metadata
}
func setDefaultType(metadata *apiextensions.JSONSchemaProps) {
if metadata.Type == "" {
metadata.Type = string(schema.KnownJSONTypeObject)
}
}
func setDefaultProperty(metadata *apiextensions.JSONSchemaProps, propertyName string, defaultType string) {
if metadata.Properties == nil {
metadata.Properties = map[string]apiextensions.JSONSchemaProps{}
}
if _, exists := metadata.Properties[propertyName]; !exists {
metadata.Properties[propertyName] = apiextensions.JSONSchemaProps{}
}
property := metadata.Properties[propertyName]
if property.Type == "" {
property.Type = defaultType
}
metadata.Properties[propertyName] = property
}
func setDefaultLabels(metadata *apiextensions.JSONSchemaProps) {
setDefaultProperty(metadata, "labels", string(schema.KnownJSONTypeObject))
labels := metadata.Properties["labels"]
if labels.AdditionalProperties == nil {
labels.AdditionalProperties = &apiextensions.JSONSchemaPropsOrBool{}
}
if labels.AdditionalProperties.Schema == nil {
labels.AdditionalProperties.Schema = &apiextensions.JSONSchemaProps{}
}
if labels.AdditionalProperties.Schema.Type == "" {
labels.AdditionalProperties.Schema.Type = string(schema.KnownJSONTypeString)
}
metadata.Properties["labels"] = labels
}
func setDefaultAnnotations(metadata *apiextensions.JSONSchemaProps) {
setDefaultProperty(metadata, "annotations", string(schema.KnownJSONTypeObject))
annotations := metadata.Properties["annotations"]
if annotations.AdditionalProperties == nil {
annotations.AdditionalProperties = &apiextensions.JSONSchemaPropsOrBool{}
}
if annotations.AdditionalProperties.Schema == nil {
annotations.AdditionalProperties.Schema = &apiextensions.JSONSchemaProps{}
}
if annotations.AdditionalProperties.Schema.Type == "" {
annotations.AdditionalProperties.Schema.Type = string(schema.KnownJSONTypeString)
}
metadata.Properties["annotations"] = annotations
}