2021-02-16 13:19:22 +01:00
|
|
|
package views
|
|
|
|
|
|
|
|
import (
|
|
|
|
"fmt"
|
|
|
|
|
|
|
|
"github.com/hashicorp/terraform/command/arguments"
|
|
|
|
)
|
|
|
|
|
|
|
|
// The StateLocker view is used to display locking/unlocking status messages
|
|
|
|
// if the state lock process takes longer than expected.
|
|
|
|
type StateLocker interface {
|
|
|
|
Locking()
|
|
|
|
Unlocking()
|
|
|
|
}
|
|
|
|
|
|
|
|
// NewStateLocker returns an initialized StateLocker implementation for the given ViewType.
|
|
|
|
func NewStateLocker(vt arguments.ViewType, view *View) StateLocker {
|
|
|
|
switch vt {
|
|
|
|
case arguments.ViewHuman:
|
2021-02-26 22:31:12 +01:00
|
|
|
return &StateLockerHuman{view: view}
|
2021-02-16 13:19:22 +01:00
|
|
|
default:
|
|
|
|
panic(fmt.Sprintf("unknown view type %v", vt))
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// StateLockerHuman is an implementation of StateLocker which prints status to
|
|
|
|
// a terminal.
|
|
|
|
type StateLockerHuman struct {
|
2021-02-26 22:31:12 +01:00
|
|
|
view *View
|
2021-02-16 13:19:22 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
var _ StateLocker = (*StateLockerHuman)(nil)
|
|
|
|
|
|
|
|
func (v *StateLockerHuman) Locking() {
|
2021-02-26 22:31:12 +01:00
|
|
|
v.view.streams.Println("Acquiring state lock. This may take a few moments...")
|
2021-02-16 13:19:22 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
func (v *StateLockerHuman) Unlocking() {
|
2021-02-26 22:31:12 +01:00
|
|
|
v.view.streams.Println("Releasing state lock. This may take a few moments...")
|
2021-02-16 13:19:22 +01:00
|
|
|
}
|