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 }