Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 7 additions & 23 deletions crds/defs.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +8,7 @@ import (
"fmt"
"sync"

"k8s.io/apiextensions-apiserver/pkg/apis/apiextensions"
"k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/install"
apiextensionsv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1"
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
"k8s.io/apimachinery/pkg/runtime"
"k8s.io/apimachinery/pkg/util/yaml"
)

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

u := &unstructured.Unstructured{}
crd := &apiextensionsv1.CustomResourceDefinition{}
reader := bytes.NewReader(data)
decoder := yaml.NewYAMLOrJSONDecoder(reader, 30)
if err = decoder.Decode(u); err != nil {
panic(fmt.Errorf("crd unmarshaling failed: %s", err))
}

// Step through unversioned type to support v1beta1 -> v1
unversioned := &apiextensions.CustomResourceDefinition{}
if err = scheme.Convert(u, unversioned, nil); err != nil {
panic(fmt.Errorf("failed to convert crd: %s\nto v1: %s", u, err))
if err = decoder.Decode(crd); err != nil {
panic(fmt.Errorf("failed to unmarshal to crd: %s", err))
}

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

return crd
Expand All @@ -59,15 +48,10 @@ var (

// loaded stores previously unmarshaled CustomResourceDefinitions indexed by their file descriptor.
loaded = map[crdFile]*apiextensionsv1.CustomResourceDefinition{}
// scheme provides conversions between type versions.
scheme = runtime.NewScheme()
// supportedGVK is the version of CustomResourceDefinition supported for unmarshaling.
supportedGVK = apiextensionsv1.SchemeGroupVersion.WithKind("CustomResourceDefinition")
)

func init() {
// Add conversions between CRD versions
install.Install(scheme)
}

// getCRD lazily loads and returns the CustomResourceDefinition unmarshaled from a file.
func getCRD(file crdFile) *apiextensionsv1.CustomResourceDefinition {
lock.Lock()
Expand Down