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  }