@@ -3,12 +3,10 @@ package crd
3
3
import (
4
4
"bytes"
5
5
"fmt"
6
- "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions"
7
6
8
7
"k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/install"
9
8
apiextensionsv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1"
10
9
apiextensionsv1beta1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1"
11
- "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
12
10
"k8s.io/apimachinery/pkg/runtime"
13
11
"k8s.io/apimachinery/pkg/util/yaml"
14
12
)
@@ -30,59 +28,29 @@ func init() {
30
28
// SerializeV1 takes in a CRD manifest and returns a v1 versioned CRD object.
31
29
// Compatible with v1beta1 or v1 CRD manifests.
32
30
func SerializeV1 (manifest string ) (* apiextensionsv1.CustomResourceDefinition , error ) {
33
- u := & unstructured. Unstructured {}
31
+ crd := & apiextensionsv1. CustomResourceDefinition {}
34
32
reader := bytes .NewReader ([]byte (manifest ))
35
33
decoder := yaml .NewYAMLOrJSONDecoder (reader , 30 )
36
- if err := decoder .Decode (u ); err != nil {
37
- return nil , fmt .Errorf ("crd unmarshaling failed: %s" , err )
38
- }
39
-
40
- // Step through unversioned type to support v1beta1 -> v1
41
- unversioned := & apiextensions.CustomResourceDefinition {}
42
- if err := scheme .Convert (u , unversioned , nil ); err != nil {
43
- return nil , fmt .Errorf ("failed to convert crd from unstructured to internal: %s\n to v1: %s" , u , err )
44
- }
45
-
46
- crd := & apiextensionsv1.CustomResourceDefinition {}
47
- if err := scheme .Convert (unversioned , crd , nil ); err != nil {
48
- return nil , fmt .Errorf ("failed to convert crd from internal to v1: %s\n to v1: %s" , u , err )
34
+ if err := decoder .Decode (crd ); err != nil {
35
+ return nil , fmt .Errorf ("v1 crd unmarshaling failed: %s" , err )
49
36
}
50
37
51
38
// set CRD type meta
52
39
// for purposes of fake client for unit tests to pass
53
40
crd .TypeMeta .Kind = Kind
54
41
crd .TypeMeta .APIVersion = Group + V1Version
55
42
56
- // for each version in the CRD, check and make sure there is a schema
57
- // if not a schema, give a default schema of props
58
- for i := range crd .Spec .Versions {
59
- if crd .Spec .Versions [i ].Schema == nil {
60
- schema := & apiextensionsv1.JSONSchemaProps {Type : "object" }
61
- crd .Spec .Versions [i ].Schema = & apiextensionsv1.CustomResourceValidation {OpenAPIV3Schema : schema }
62
- }
63
- }
64
-
65
43
return crd , nil
66
44
}
67
45
68
46
// SerializeV1 takes in a CRD manifest and returns a v1 versioned CRD object.
69
47
// Compatible with v1beta1 or v1 CRD manifests.
70
48
func SerializeV1Beta1 (manifest string ) (* apiextensionsv1beta1.CustomResourceDefinition , error ) {
71
- u := & unstructured. Unstructured {}
49
+ crd := & apiextensionsv1beta1. CustomResourceDefinition {}
72
50
reader := bytes .NewReader ([]byte (manifest ))
73
51
decoder := yaml .NewYAMLOrJSONDecoder (reader , 30 )
74
- if err := decoder .Decode (u ); err != nil {
75
- return nil , fmt .Errorf ("crd unmarshaling failed: %s" , err )
76
- }
77
-
78
- unversioned := & apiextensions.CustomResourceDefinition {}
79
- if err := scheme .Convert (u , unversioned , nil ); err != nil {
80
- return nil , fmt .Errorf ("failed to convert crd from unstructured to internal: %s\n to v1: %s" , u , err )
81
- }
82
-
83
- crd := & apiextensionsv1beta1.CustomResourceDefinition {}
84
- if err := scheme .Convert (unversioned , crd , nil ); err != nil {
85
- return nil , fmt .Errorf ("failed to convert crd from internal to v1: %s\n to v1: %s" , u , err )
52
+ if err := decoder .Decode (crd ); err != nil {
53
+ return nil , fmt .Errorf ("v1beta1 crd unmarshaling failed: %s" , err )
86
54
}
87
55
88
56
// set CRD type meta
@@ -99,16 +67,11 @@ func SerializeV1FromExisting(crd interface{}) (*apiextensionsv1.CustomResourceDe
99
67
return c , nil
100
68
}
101
69
if c , ok := crd .(* apiextensionsv1beta1.CustomResourceDefinition ); ok {
102
- unversioned := & apiextensions.CustomResourceDefinition {}
103
- if err := scheme .Convert (c , unversioned , nil ); err != nil {
104
- return nil , fmt .Errorf ("failed to convert crd from unstructured to internal: %s\n to v1: %s" , c .String (), err )
105
- }
106
-
107
- c := & apiextensionsv1.CustomResourceDefinition {}
108
- if err := scheme .Convert (unversioned , crd , nil ); err != nil {
109
- return nil , fmt .Errorf ("failed to convert crd from internal to v1: %s\n to v1: %s" , c .String (), err )
70
+ v1crd := & apiextensionsv1.CustomResourceDefinition {}
71
+ if err := scheme .Convert (c , v1crd , nil ); err != nil {
72
+ return nil , fmt .Errorf ("failed to convert crd from v1beta1 to v1: %#v: %s" , c , err )
110
73
}
111
- return c , nil
74
+ return v1crd , nil
112
75
}
113
76
return nil , fmt .Errorf ("unable to determine crd type" )
114
77
}
0 commit comments