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  }