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  }