Skip to content

Commit 602c595

Browse files
committed
refactor(crds): decode to v1 directly w/o conversions
Replace hub and spoke CRD conversion with direct unmarshaling to v1. This follows advice to avoid the internal k8s types and conversions client-side (see operator-framework/operator-lifecycle-manager#1470 (comment)).
1 parent 44f2d92 commit 602c595

File tree

1 file changed

+9
-20
lines changed

1 file changed

+9
-20
lines changed

crds/defs.go

Lines changed: 9 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,8 @@ import (
88
"fmt"
99
"sync"
1010

11-
"k8s.io/apiextensions-apiserver/pkg/apis/apiextensions"
12-
"k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/install"
1311
apiextensionsv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1"
14-
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
15-
"k8s.io/apimachinery/pkg/runtime"
12+
"k8s.io/apimachinery/pkg/runtime/schema"
1613
"k8s.io/apimachinery/pkg/util/yaml"
1714
)
1815

@@ -33,22 +30,15 @@ func (c crdFile) mustUnmarshal() *apiextensionsv1.CustomResourceDefinition {
3330
panic(fmt.Errorf("unable to read crd file %s: %s", path, err))
3431
}
3532

36-
u := &unstructured.Unstructured{}
33+
crd := &apiextensionsv1.CustomResourceDefinition{}
3734
reader := bytes.NewReader(data)
3835
decoder := yaml.NewYAMLOrJSONDecoder(reader, 30)
39-
if err = decoder.Decode(u); err != nil {
40-
panic(fmt.Errorf("crd unmarshaling failed: %s", err))
41-
}
42-
43-
// Step through unversioned type to support v1beta1 -> v1
44-
unversioned := &apiextensions.CustomResourceDefinition{}
45-
if err = scheme.Convert(u, unversioned, nil); err != nil {
46-
panic(fmt.Errorf("failed to convert crd: %s\nto v1: %s", u, err))
36+
if err = decoder.Decode(crd); err != nil {
37+
panic(fmt.Errorf("failed to unmarshal to crd: %s", err))
4738
}
4839

49-
crd := &apiextensionsv1.CustomResourceDefinition{}
50-
if err = scheme.Convert(unversioned, crd, nil); err != nil {
51-
panic(fmt.Errorf("failed to convert crd: %s\nto v1: %s", u, err))
40+
if gvk := crd.GroupVersionKind(); gvk != supportedGVK {
41+
panic(fmt.Errorf("%s not supported", gvk))
5242
}
5343

5444
return crd
@@ -59,13 +49,12 @@ var (
5949

6050
// loaded stores previously unmarshaled CustomResourceDefinitions indexed by their file descriptor.
6151
loaded = map[crdFile]*apiextensionsv1.CustomResourceDefinition{}
62-
// scheme provides conversions between type versions.
63-
scheme = runtime.NewScheme()
52+
// supportedGVK is the version of CustomResourceDefinition supported for unmarshaling.
53+
supportedGVK schema.GroupVersionKind
6454
)
6555

6656
func init() {
67-
// Add conversions between CRD versions
68-
install.Install(scheme)
57+
supportedGVK = apiextensionsv1.SchemeGroupVersion.WithKind("CustomResourceDefinition")
6958
}
7059

7160
// getCRD lazily loads and returns the CustomResourceDefinition unmarshaled from a file.

0 commit comments

Comments
 (0)