github.com/replicatedhq/ship@v0.55.0/pkg/lifecycle/render/factory.go (about) 1 package render 2 3 import ( 4 "context" 5 "time" 6 7 "github.com/go-kit/kit/log" 8 "github.com/mitchellh/cli" 9 "github.com/replicatedhq/ship/pkg/api" 10 "github.com/replicatedhq/ship/pkg/lifecycle" 11 "github.com/replicatedhq/ship/pkg/lifecycle/daemon/daemontypes" 12 "github.com/replicatedhq/ship/pkg/lifecycle/render/config" 13 pkgplanner "github.com/replicatedhq/ship/pkg/lifecycle/render/planner" 14 "github.com/replicatedhq/ship/pkg/state" 15 "github.com/spf13/afero" 16 ) 17 18 // Factory gets a *headlessrenderer and implements lifecycle.Renderer 19 type Factory func() *headlessrenderer 20 21 // factory implements lifecycle.Renderer 22 var _ lifecycle.Renderer = Factory(func() *headlessrenderer { return nil }) 23 24 func (f Factory) Execute(ctx context.Context, release *api.Release, step *api.Render) error { 25 r := f() 26 return r.Execute(ctx, release, step) 27 } 28 29 func (f Factory) WithPlanner(plannerFactory pkgplanner.Planner) lifecycle.Renderer { 30 return Factory(func() *headlessrenderer { 31 r := f() 32 return &headlessrenderer{ 33 Logger: r.Logger, 34 ConfigResolver: r.ConfigResolver, 35 Planner: plannerFactory, 36 StateManager: r.StateManager, 37 Fs: r.Fs, 38 UI: r.UI, 39 Now: time.Now, 40 StatusReceiver: r.StatusReceiver, 41 } 42 }) 43 } 44 45 func (f Factory) WithStatusReceiver(receiver daemontypes.StatusReceiver) lifecycle.Renderer { 46 return Factory(func() *headlessrenderer { 47 r := f() 48 return &headlessrenderer{ 49 Logger: r.Logger, 50 ConfigResolver: r.ConfigResolver, 51 Planner: r.Planner, 52 StateManager: r.StateManager, 53 Fs: r.Fs, 54 UI: r.UI, 55 Now: time.Now, 56 StatusReceiver: receiver, 57 } 58 }) 59 } 60 61 func NewFactory( 62 logger log.Logger, 63 fs afero.Afero, 64 ui cli.Ui, 65 stateManager state.Manager, 66 planner pkgplanner.Planner, 67 resolver config.Resolver, 68 status daemontypes.StatusReceiver, 69 ) lifecycle.Renderer { 70 return Factory(func() *headlessrenderer { 71 return &headlessrenderer{ 72 Logger: logger, 73 ConfigResolver: resolver, 74 Planner: planner, 75 StateManager: stateManager, 76 Fs: fs, 77 UI: ui, 78 Now: time.Now, 79 StatusReceiver: status, 80 } 81 }) 82 }