github.com/replicatedhq/ship@v0.55.0/pkg/lifecycle/render/local/render.go (about)

     1  package local
     2  
     3  import (
     4  	"context"
     5  	"path/filepath"
     6  
     7  	"github.com/go-kit/kit/log"
     8  	"github.com/go-kit/kit/log/level"
     9  	"github.com/pkg/errors"
    10  	"github.com/replicatedhq/libyaml"
    11  	"github.com/replicatedhq/ship/pkg/api"
    12  	"github.com/replicatedhq/ship/pkg/util"
    13  	"github.com/spf13/afero"
    14  )
    15  
    16  type Renderer interface {
    17  	Execute(
    18  		asset api.LocalAsset,
    19  		meta api.ReleaseMetadata,
    20  		templateContext map[string]interface{},
    21  		configGroups []libyaml.ConfigGroup,
    22  	) func(ctx context.Context) error
    23  }
    24  
    25  var _ Renderer = &LocalRenderer{}
    26  
    27  type LocalRenderer struct {
    28  	Logger log.Logger
    29  	Fs     afero.Afero
    30  }
    31  
    32  func NewRenderer(
    33  	logger log.Logger,
    34  	fs afero.Afero,
    35  ) Renderer {
    36  	return &LocalRenderer{
    37  		Logger: logger,
    38  		Fs:     fs,
    39  	}
    40  }
    41  
    42  func (r *LocalRenderer) Execute(
    43  	asset api.LocalAsset,
    44  	meta api.ReleaseMetadata,
    45  	templateContext map[string]interface{},
    46  	configGroups []libyaml.ConfigGroup,
    47  ) func(ctx context.Context) error {
    48  	return func(ctx context.Context) error {
    49  		debug := level.Debug(log.With(r.Logger, "step.type", "render", "render.phase", "execute", "asset.type", "local"))
    50  
    51  		err := util.IsLegalPath(asset.Dest)
    52  		if err != nil {
    53  			return errors.Wrap(err, "local asset dest")
    54  		}
    55  
    56  		err = util.IsLegalPath(asset.Path)
    57  		if err != nil {
    58  			return errors.Wrap(err, "local asset path")
    59  		}
    60  
    61  		if err := r.Fs.MkdirAll(filepath.Dir(asset.Dest), 0777); err != nil {
    62  			return errors.Wrapf(err, "mkdir %s", asset.Dest)
    63  		}
    64  
    65  		debug.Log("event", "rename", "from", asset.Path, "dest", asset.Dest)
    66  		if err := r.Fs.Rename(asset.Path, asset.Dest); err != nil {
    67  			return errors.Wrap(err, "rename path to dest")
    68  		}
    69  
    70  		return nil
    71  	}
    72  }