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 }