Skip to content

Commit 6f6d02b

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 6f6d02b

File tree

1 file changed

+10
-14
lines changed

1 file changed

+10
-14
lines changed

crds/defs.go

Lines changed: 10 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,9 @@ 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"
1412
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
15-
"k8s.io/apimachinery/pkg/runtime"
13+
"k8s.io/apimachinery/pkg/runtime/schema"
1614
"k8s.io/apimachinery/pkg/util/yaml"
1715
)
1816

@@ -37,18 +35,17 @@ func (c crdFile) mustUnmarshal() *apiextensionsv1.CustomResourceDefinition {
3735
reader := bytes.NewReader(data)
3836
decoder := yaml.NewYAMLOrJSONDecoder(reader, 30)
3937
if err = decoder.Decode(u); err != nil {
40-
panic(fmt.Errorf("crd unmarshaling failed: %s", err))
38+
panic(fmt.Errorf("failed to unmarshal to unstructured %s", err))
4139
}
4240

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))
41+
if gvk := u.GroupVersionKind(); gvk != supportedGVK {
42+
panic(fmt.Errorf("%s not supported", gvk))
4743
}
4844

4945
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))
46+
reader.Reset(data)
47+
if err = decoder.Decode(crd); err != nil {
48+
panic(fmt.Errorf("failed to unmarshal to crd: %s", err))
5249
}
5350

5451
return crd
@@ -59,13 +56,12 @@ var (
5956

6057
// loaded stores previously unmarshaled CustomResourceDefinitions indexed by their file descriptor.
6158
loaded = map[crdFile]*apiextensionsv1.CustomResourceDefinition{}
62-
// scheme provides conversions between type versions.
63-
scheme = runtime.NewScheme()
59+
// supportedGVK is the version of CustomResourceDefinition supported for unmarshaling.
60+
supportedGVK schema.GroupVersionKind
6461
)
6562

6663
func init() {
67-
// Add conversions between CRD versions
68-
install.Install(scheme)
64+
supportedGVK = apiextensionsv1.SchemeGroupVersion.WithKind("CustomResourceDefinition")
6965
}
7066

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

0 commit comments

Comments
 (0)