diff --git a/common/multistep_runner.go b/common/multistep_runner.go index a9b155086..512a3ecd4 100644 --- a/common/multistep_runner.go +++ b/common/multistep_runner.go @@ -61,6 +61,10 @@ type abortStep struct { ui packer.Ui } +func (s abortStep) InnerStepName() string { + return typeName(s.step) +} + func (s abortStep) Run(state multistep.StateBag) multistep.StepAction { return s.step.Run(state) } @@ -82,6 +86,10 @@ type askStep struct { ui packer.Ui } +func (s askStep) InnerStepName() string { + return typeName(s.step) +} + func (s askStep) Run(state multistep.StateBag) (action multistep.StepAction) { for { action = s.step.Run(state) diff --git a/vendor/github.com/mitchellh/multistep/debug_runner.go b/vendor/github.com/mitchellh/multistep/debug_runner.go index 42f68f242..882009494 100644 --- a/vendor/github.com/mitchellh/multistep/debug_runner.go +++ b/vendor/github.com/mitchellh/multistep/debug_runner.go @@ -17,6 +17,13 @@ const ( DebugLocationBeforeCleanup ) +// StepWrapper is an interface that wrapped steps can implement to expose their +// inner step names to the debug runner. +type StepWrapper interface { + // InnerStepName should return the human readable name of the wrapped step. + InnerStepName() string +} + // DebugPauseFn is the type signature for the function that is called // whenever the DebugRunner pauses. It allows the caller time to // inspect the state of the multi-step sequence at a given step. @@ -56,8 +63,14 @@ func (r *DebugRunner) Run(state StateBag) { steps := make([]Step, len(r.Steps)*2) for i, step := range r.Steps { steps[i*2] = step + name := "" + if wrapped, ok := step.(StepWrapper); ok { + name = wrapped.InnerStepName() + } else { + name = reflect.Indirect(reflect.ValueOf(step)).Type().Name() + } steps[(i*2)+1] = &debugStepPause{ - reflect.Indirect(reflect.ValueOf(step)).Type().Name(), + name, pauseFn, } }