github.com/joelanford/operator-sdk@v0.8.2/internal/util/k8sutil/crd.go (about)

     1  package k8sutil
     2  
     3  import (
     4  	"fmt"
     5  	"io/ioutil"
     6  	"os"
     7  	"path/filepath"
     8  	"strings"
     9  
    10  	yaml "github.com/ghodss/yaml"
    11  	apiextv1beta1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1"
    12  )
    13  
    14  func GetCRDs(crdsDir string) ([]*apiextv1beta1.CustomResourceDefinition, error) {
    15  	manifests, err := GetCRDManifestPaths(crdsDir)
    16  	if err != nil {
    17  		return nil, fmt.Errorf("failed to get CRD's from %s: (%v)", crdsDir, err)
    18  	}
    19  	var crds []*apiextv1beta1.CustomResourceDefinition
    20  	for _, m := range manifests {
    21  		b, err := ioutil.ReadFile(m)
    22  		if err != nil {
    23  			return nil, err
    24  		}
    25  		crd := &apiextv1beta1.CustomResourceDefinition{}
    26  		if err = yaml.Unmarshal(b, crd); err != nil {
    27  			return nil, err
    28  		}
    29  		crds = append(crds, crd)
    30  	}
    31  	return crds, nil
    32  }
    33  
    34  func GetCRDManifestPaths(crdsDir string) (crdPaths []string, err error) {
    35  	err = filepath.Walk(crdsDir, func(path string, info os.FileInfo, werr error) error {
    36  		if werr != nil {
    37  			return werr
    38  		}
    39  		if info == nil {
    40  			return nil
    41  		}
    42  		if !info.IsDir() && strings.HasSuffix(path, "_crd.yaml") {
    43  			crdPaths = append(crdPaths, path)
    44  		}
    45  		return nil
    46  	})
    47  	return crdPaths, err
    48  }