Skip to content
This repository was archived by the owner on Mar 24, 2023. It is now read-only.

Commit b1dbed0

Browse files
authored
Ship should show human readable messages when running in headless (#289)
* initial message locations * print kustomize, helmValues, and render progress messages
1 parent 8fd0bc2 commit b1dbed0

File tree

5 files changed

+21
-20
lines changed

5 files changed

+21
-20
lines changed

pkg/lifecycle/daemon/headless/daemon.go

+3-1
Original file line numberDiff line numberDiff line change
@@ -173,7 +173,9 @@ func (d *HeadlessDaemon) HeadlessResolve(ctx context.Context, release *api.Relea
173173
}
174174

175175
func (d *HeadlessDaemon) SetProgress(progress daemontypes.Progress) {
176-
d.UI.Output(progress.Detail)
176+
if progress.Type == "string" {
177+
d.UI.Output(progress.Detail)
178+
}
177179
}
178180

179181
func (d *HeadlessDaemon) ClearProgress() {}

pkg/lifecycle/helmValues/helmValues.go

+2
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,8 @@ func (h *helmValues) Execute(ctx context.Context, release *api.Release, step *ap
4949
return errors.Wrap(err, "read file values.yaml")
5050
}
5151

52+
h.Daemon.SetProgress(daemontypes.StringProgress("helmValues", "generating installable application manifests"))
53+
5254
h.Daemon.PushHelmValuesStep(ctx, daemontypes.HelmValues{
5355
Values: string(bytes),
5456
}, daemon.HelmValuesActions())

pkg/lifecycle/render/render.go

+10-13
Original file line numberDiff line numberDiff line change
@@ -21,12 +21,8 @@ import (
2121
)
2222

2323
var (
24-
ProgressLoad = daemontypes.StringProgress("render", "load")
25-
ProgressResolve = daemontypes.StringProgress("render", "resolve")
26-
ProgressBuild = daemontypes.StringProgress("render", "build")
27-
ProgressBackup = daemontypes.StringProgress("render", "backup")
28-
ProgressExecute = daemontypes.StringProgress("render", "execute")
29-
ProgressCommit = daemontypes.StringProgress("render", "commit")
24+
ProgressRead = daemontypes.StringProgress("render", "reading application release")
25+
ProgressRender = daemontypes.StringProgress("render", "rendering assets and configuration values")
3026
)
3127

3228
// A renderer takes a resolved spec, collects config values, and renders assets
@@ -48,34 +44,35 @@ func (r *renderer) Execute(ctx context.Context, release *api.Release, step *api.
4844
debug := level.Debug(log.With(r.Logger, "step.type", "render"))
4945
debug.Log("event", "step.execute")
5046

51-
r.StatusReceiver.SetProgress(ProgressLoad)
47+
debug.Log("event", "try.load")
5248
previousState, err := r.StateManager.TryLoad()
5349
if err != nil {
5450
return err
5551
}
5652

57-
r.StatusReceiver.SetProgress(ProgressResolve)
53+
r.StatusReceiver.SetProgress(ProgressRead)
54+
55+
debug.Log("event", "resolve.config")
5856
templateContext, err := r.ConfigResolver.ResolveConfig(ctx, release, previousState.CurrentConfig())
5957
if err != nil {
6058
return errors.Wrap(err, "resolve config")
6159
}
6260

61+
r.StatusReceiver.SetProgress(ProgressRender)
62+
6363
debug.Log("event", "render.plan")
64-
r.StatusReceiver.SetProgress(ProgressBuild)
6564
pln, err := r.Planner.Build(release.Spec.Assets.V1, release.Spec.Config.V1, release.Metadata, templateContext)
6665
if err != nil {
6766
return errors.Wrap(err, "build plan")
68-
6967
}
7068

7169
debug.Log("event", "backup.start")
72-
r.StatusReceiver.SetProgress(ProgressBackup)
7370
err = r.backupIfPresent(constants.InstallerPrefixPath)
7471
if err != nil {
7572
return errors.Wrapf(err, "backup existing install directory %s", constants.InstallerPrefixPath)
7673
}
7774

78-
r.StatusReceiver.SetProgress(ProgressExecute)
75+
debug.Log("event", "execute.plan")
7976
r.StatusReceiver.SetStepName(ctx, daemontypes.StepNameConfirm)
8077
err = r.Planner.Execute(ctx, pln)
8178
if err != nil {
@@ -97,7 +94,7 @@ func (r *renderer) Execute(ctx context.Context, release *api.Release, step *api.
9794
stateTemplateContext = templateContext
9895
}
9996

100-
r.StatusReceiver.SetProgress(ProgressCommit)
97+
debug.Log("event", "commit")
10198
if err := r.StateManager.SerializeConfig(release.Spec.Assets.V1, release.Metadata, stateTemplateContext); err != nil {
10299
return errors.Wrap(err, "serialize state")
103100
}

pkg/lifecycle/render/render_test.go

+2-6
Original file line numberDiff line numberDiff line change
@@ -68,13 +68,9 @@ func TestRender(t *testing.T) {
6868
V: viper.New(),
6969
}
7070

71-
prog := mockDaemon.EXPECT().SetProgress(ProgressLoad)
72-
prog = mockDaemon.EXPECT().SetProgress(ProgressResolve).After(prog)
73-
prog = mockDaemon.EXPECT().SetProgress(ProgressBuild).After(prog)
74-
prog = mockDaemon.EXPECT().SetProgress(ProgressBackup).After(prog)
75-
prog = mockDaemon.EXPECT().SetProgress(ProgressExecute).After(prog)
71+
prog := mockDaemon.EXPECT().SetProgress(ProgressRead)
72+
prog = mockDaemon.EXPECT().SetProgress(ProgressRender).After(prog)
7673
prog = mockDaemon.EXPECT().SetStepName(ctx, daemontypes.StepNameConfirm).After(prog)
77-
prog = mockDaemon.EXPECT().SetProgress(ProgressCommit).After(prog)
7874
mockDaemon.EXPECT().ClearProgress().After(prog)
7975

8076
renderer.StatusReceiver = mockDaemon

pkg/ship/kustomize.go

+4
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import (
1313
"github.com/replicatedhq/libyaml"
1414
"github.com/replicatedhq/ship/pkg/api"
1515
"github.com/replicatedhq/ship/pkg/constants"
16+
"github.com/replicatedhq/ship/pkg/lifecycle/daemon/daemontypes"
1617
"github.com/replicatedhq/ship/pkg/state"
1718
)
1819

@@ -56,6 +57,8 @@ func (s *Ship) Update(ctx context.Context) error {
5657
// does a state file exist on disk?
5758
existingState, err := s.State.TryLoad()
5859

60+
s.Daemon.SetProgress(daemontypes.StringProgress("kustomize", `loading state from `+constants.StatePath))
61+
5962
if _, noExistingState := existingState.(state.Empty); noExistingState {
6063
debug.Log("event", "state.missing")
6164
return errors.New(`No state file found at ` + s.Viper.GetString("state-file") + `, please run "ship init"`)
@@ -68,6 +71,7 @@ func (s *Ship) Update(ctx context.Context) error {
6871
}
6972

7073
debug.Log("event", "fetch latest chart")
74+
s.Daemon.SetProgress(daemontypes.StringProgress("kustomize", `downloading latest from upstream `+helmChartPath))
7175
helmChartMetadata, err := s.Resolver.ResolveChartMetadata(context.Background(), string(helmChartPath))
7276
if err != nil {
7377
return errors.Wrapf(err, "resolve helm chart metadata for %s", helmChartPath)

0 commit comments

Comments
 (0)