github.com/replicatedhq/ship@v0.55.0/pkg/lifecycle/terraform/tfplan/daemonless.go (about)

     1  package tfplan
     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/replicatedhq/ship/pkg/api"
    10  	"github.com/replicatedhq/ship/pkg/lifecycle/daemon/daemontypes"
    11  )
    12  
    13  type DaemonlessPlanner struct {
    14  	Logger log.Logger
    15  	Status daemontypes.StatusReceiver
    16  }
    17  
    18  func NewDaemonlessPlanner(
    19  	logger log.Logger,
    20  ) PlanConfirmer {
    21  	return &DaemonlessPlanner{
    22  		Logger: logger,
    23  	}
    24  }
    25  
    26  func (d *DaemonlessPlanner) WithStatusReceiver(statusReceiver daemontypes.StatusReceiver) PlanConfirmer {
    27  	return &DaemonlessPlanner{
    28  		Logger: d.Logger,
    29  		Status: statusReceiver,
    30  	}
    31  }
    32  
    33  func (d *DaemonlessPlanner) ConfirmPlan(
    34  	ctx context.Context,
    35  	formattedTerraformPlan string,
    36  	release api.Release,
    37  	confirmedChan chan bool,
    38  ) (bool, error) {
    39  	debug := level.Debug(log.With(d.Logger, "struct", "daemonlessplanner", "method", "plan"))
    40  
    41  	debug.Log("event", "status.message")
    42  	d.Status.PushMessageStep(
    43  		ctx,
    44  		daemontypes.Message{Contents: formattedTerraformPlan, TrustedHTML: true},
    45  		planActions(),
    46  	)
    47  
    48  	return d.awaitMessageConfirmed(ctx, confirmedChan)
    49  }
    50  
    51  func (d *DaemonlessPlanner) awaitMessageConfirmed(ctx context.Context, confirmedChan chan bool) (bool, error) {
    52  	debug := level.Debug(log.With(d.Logger, "struct", "daemonlessplanner", "method", "awaitMessageConfirmed"))
    53  
    54  	for {
    55  		select {
    56  		case shouldApply := <-confirmedChan:
    57  			return shouldApply, nil
    58  		case <-time.After(10 * time.Second):
    59  			debug.Log("waitingFor", "message.confirmed")
    60  		}
    61  	}
    62  }