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

     1  package lifecycle
     2  
     3  import (
     4  	"context"
     5  
     6  	"github.com/go-kit/kit/log"
     7  	"github.com/go-kit/kit/log/level"
     8  	"github.com/pkg/errors"
     9  	"github.com/replicatedhq/ship/pkg/api"
    10  	"go.uber.org/dig"
    11  )
    12  
    13  type StepExecutor struct {
    14  	dig.In
    15  
    16  	Logger       log.Logger
    17  	Messenger    Messenger
    18  	Renderer     Renderer
    19  	Terraformer  Terraformer
    20  	HelmIntro    HelmIntro
    21  	HelmValues   HelmValues
    22  	KubectlApply KubectlApply
    23  	Kustomizer   Kustomizer
    24  	Unforker     Unforker
    25  }
    26  
    27  func (s *StepExecutor) Execute(ctx context.Context, release *api.Release, step *api.Step) error {
    28  	debug := level.Debug(log.With(s.Logger, "method", "execute"))
    29  
    30  	if step.Message != nil {
    31  		debug.Log("event", "step.resolve", "type", "message")
    32  		err := s.Messenger.Execute(ctx, release, step.Message)
    33  		debug.Log("event", "step.complete", "type", "message", "err", err)
    34  		return errors.Wrap(err, "execute message step")
    35  	} else if step.Render != nil {
    36  		debug.Log("event", "step.resolve", "type", "render")
    37  		err := s.Renderer.Execute(ctx, release, step.Render)
    38  		debug.Log("event", "step.complete", "type", "render", "err", err)
    39  		return errors.Wrap(err, "execute render step")
    40  	} else if step.Terraform != nil {
    41  		debug.Log("event", "step.resolve", "type", "terraform")
    42  		err := s.Terraformer.Execute(ctx, *release, *step.Terraform, make(chan bool))
    43  		debug.Log("event", "step.complete", "type", "terraform", "err", err)
    44  		return errors.Wrap(err, "execute terraform step")
    45  	} else if step.Kustomize != nil {
    46  		if err := s.Kustomizer.PreExecute(ctx, *step); err != nil {
    47  			return errors.Wrap(err, "preExecute kustomize step")
    48  		}
    49  		debug.Log("event", "step.resolve", "type", "kustomize")
    50  		err := s.Kustomizer.Execute(ctx, release, *step.Kustomize)
    51  		debug.Log("event", "step.complete", "type", "kustomize", "err", err)
    52  		return errors.Wrap(err, "execute kustomize step")
    53  	} else if step.Unfork != nil {
    54  		if err := s.Unforker.PreExecute(ctx, *step); err != nil {
    55  			return errors.Wrap(err, "preExecute unforker step")
    56  		}
    57  		debug.Log("event", "step.resolve", "type", "unfork")
    58  		err := s.Unforker.Execute(ctx, release, *step.Unfork)
    59  		debug.Log("event", "step.complete", "type", "unfork", "err", err)
    60  	} else if step.HelmIntro != nil && release.Metadata.ShipAppMetadata.Readme != "" {
    61  		debug.Log("event", "step.helmIntro", "type", "helmIntro")
    62  		err := s.HelmIntro.Execute(ctx, release, step.HelmIntro)
    63  		debug.Log("event", "step.complete", "type", "helmIntro", "err", err)
    64  	} else if step.HelmValues != nil {
    65  		debug.Log("event", "step.helmValues", "type", "helmValues")
    66  		err := s.HelmValues.Execute(ctx, release, step.HelmValues)
    67  		debug.Log("event", "step.complete", "type", "helmValues", "err", err)
    68  	} else if step.KubectlApply != nil {
    69  		debug.Log("event", "step.resolve", "type", "kubectl")
    70  		err := s.KubectlApply.Execute(ctx, *release, *step.KubectlApply, make(chan bool))
    71  		debug.Log("event", "step.complete", "type", "kubectl", "err", err)
    72  	}
    73  
    74  	debug.Log("event", "step.unknown", "name", step.ShortName(), "id", step.Shared().ID)
    75  	return nil
    76  }