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 }