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

     1  package helmIntro
     2  
     3  import (
     4  	"context"
     5  	"time"
     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/ship/pkg/api"
    11  	"github.com/replicatedhq/ship/pkg/lifecycle"
    12  	"github.com/replicatedhq/ship/pkg/lifecycle/daemon"
    13  	"github.com/replicatedhq/ship/pkg/lifecycle/daemon/daemontypes"
    14  	"github.com/spf13/afero"
    15  	"go.uber.org/dig"
    16  )
    17  
    18  type HelmIntro struct {
    19  	Logger log.Logger
    20  	Daemon daemontypes.Daemon
    21  }
    22  
    23  type DaemonlessHelmIntro struct {
    24  	dig.In
    25  	Logger log.Logger
    26  }
    27  
    28  func (d *DaemonlessHelmIntro) Execute(context.Context, *api.Release, *api.HelmIntro) error {
    29  	level.Debug(d.Logger).Log("event", "DaemonlessHelmIntro.nothingToDo")
    30  	return nil
    31  }
    32  
    33  func NewHelmIntro(
    34  	fs afero.Afero,
    35  	logger log.Logger,
    36  	daemon daemontypes.Daemon,
    37  ) lifecycle.HelmIntro {
    38  
    39  	return &HelmIntro{
    40  		Logger: logger,
    41  		Daemon: daemon,
    42  	}
    43  }
    44  
    45  func (h *HelmIntro) Execute(ctx context.Context, release *api.Release, step *api.HelmIntro) error {
    46  	debug := level.Debug(log.With(h.Logger, "step.type", "helmIntro"))
    47  
    48  	daemonExitedChan := h.Daemon.EnsureStarted(ctx, release)
    49  	h.Daemon.PushHelmIntroStep(
    50  		ctx,
    51  		daemontypes.HelmIntro{
    52  			IsUpdate: step.IsUpdate,
    53  		},
    54  		daemon.HelmIntroActions(),
    55  	)
    56  	debug.Log("event", "step.pushed")
    57  
    58  	return h.awaitContinue(ctx, daemonExitedChan)
    59  }
    60  
    61  func (h *HelmIntro) awaitContinue(ctx context.Context, daemonExitedChan chan error) error {
    62  	debug := level.Debug(log.With(h.Logger, "step.type", "helmIntro", "awaitContinue"))
    63  	for {
    64  		select {
    65  		case <-ctx.Done():
    66  			return ctx.Err()
    67  		case err := <-daemonExitedChan:
    68  			if err != nil {
    69  				return err
    70  			}
    71  			return errors.New("daemon exited")
    72  		case <-h.Daemon.MessageConfirmedChan():
    73  			debug.Log("message.confirmed")
    74  			return nil
    75  		case <-time.After(10 * time.Second):
    76  			debug.Log("waitingFor", "message.confirmed")
    77  		}
    78  	}
    79  }