github.com/operator-framework/operator-lifecycle-manager@v0.30.0/pkg/lib/crd/unmarshal.go (about) 1 package crd 2 3 import ( 4 "bytes" 5 "fmt" 6 7 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/install" 8 apiextensionsv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1" 9 apiextensionsv1beta1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1" 10 "k8s.io/apimachinery/pkg/runtime" 11 "k8s.io/apimachinery/pkg/util/yaml" 12 ) 13 14 const ( 15 Kind = "CustomResourceDefinition" 16 Group = "apiextensions.k8s.io/" 17 ) 18 19 var ( 20 scheme = runtime.NewScheme() 21 ) 22 23 func init() { 24 // Add conversions between CRD versions 25 install.Install(scheme) 26 } 27 28 // UnmarshalV1 takes in a CRD manifest and returns a v1 versioned CRD object. 29 func UnmarshalV1(manifest string) (*apiextensionsv1.CustomResourceDefinition, error) { 30 crd := &apiextensionsv1.CustomResourceDefinition{} 31 reader := bytes.NewReader([]byte(manifest)) 32 decoder := yaml.NewYAMLOrJSONDecoder(reader, 30) 33 if err := decoder.Decode(crd); err != nil { 34 return nil, fmt.Errorf("v1 crd unmarshaling failed: %s", err) 35 } 36 37 return crd, nil 38 } 39 40 // UnmarshalV1 takes in a CRD manifest and returns a v1beta1 versioned CRD object. 41 func UnmarshalV1Beta1(manifest string) (*apiextensionsv1beta1.CustomResourceDefinition, error) { 42 crd := &apiextensionsv1beta1.CustomResourceDefinition{} 43 reader := bytes.NewReader([]byte(manifest)) 44 decoder := yaml.NewYAMLOrJSONDecoder(reader, 30) 45 if err := decoder.Decode(crd); err != nil { 46 return nil, fmt.Errorf("v1beta1 crd unmarshaling failed: %s", err) 47 } 48 49 return crd, nil 50 }