github.com/replicatedhq/ship@v0.55.0/pkg/patch/kustomize.go (about) 1 package patch 2 3 import ( 4 "bytes" 5 "io" 6 "path/filepath" 7 8 "github.com/pkg/errors" 9 "sigs.k8s.io/kustomize/k8sdeps" 10 "sigs.k8s.io/kustomize/pkg/fs" 11 "sigs.k8s.io/kustomize/pkg/loader" 12 "sigs.k8s.io/kustomize/pkg/target" 13 ) 14 15 func (p *ShipPatcher) RunKustomize(kustomizationPath string) ([]byte, error) { 16 buf := new(bytes.Buffer) 17 fsys := fs.MakeRealFS() 18 19 if err := p.runKustomize(buf, fsys, kustomizationPath); err != nil { 20 return nil, errors.Wrap(err, "failed to run kustomize build") 21 } 22 23 return buf.Bytes(), nil 24 } 25 26 func (p *ShipPatcher) runKustomize(out io.Writer, fSys fs.FileSystem, kustomizationPath string) error { 27 absPath, err := filepath.Abs(kustomizationPath) 28 if err != nil { 29 return err 30 } 31 32 ldr, err := loader.NewLoader(absPath, fSys) 33 if err != nil { 34 return errors.Wrap(err, "make loader") 35 } 36 37 k8sFactory := k8sdeps.NewFactory() 38 39 kt, err := target.NewKustTarget(ldr, k8sFactory.ResmapF, k8sFactory.TransformerF) 40 if err != nil { 41 return errors.Wrap(err, "make customized kustomize target") 42 } 43 44 allResources, err := kt.MakeCustomizedResMap() 45 if err != nil { 46 return errors.Wrap(err, "make customized res map") 47 } 48 49 // Output the objects. 50 res, err := allResources.EncodeAsYaml() 51 if err != nil { 52 return errors.Wrap(err, "encode as yaml") 53 } 54 _, err = out.Write(res) 55 return err 56 }