2015-02-21 13:52:55 -06:00
|
|
|
package state
|
|
|
|
|
|
|
|
import (
|
|
|
|
"github.com/hashicorp/terraform/terraform"
|
|
|
|
)
|
|
|
|
|
2015-02-21 18:04:32 -06:00
|
|
|
// State is the collection of all state interfaces.
|
|
|
|
type State interface {
|
|
|
|
StateReader
|
|
|
|
StateWriter
|
|
|
|
StateRefresher
|
|
|
|
StatePersister
|
|
|
|
}
|
|
|
|
|
2015-02-21 13:52:55 -06:00
|
|
|
// StateReader is the interface for things that can return a state. Retrieving
|
|
|
|
// the state here must not error. Loading the state fresh (an operation that
|
|
|
|
// can likely error) should be implemented by RefreshState. If a state hasn't
|
|
|
|
// been loaded yet, it is okay for State to return nil.
|
|
|
|
type StateReader interface {
|
|
|
|
State() *terraform.State
|
|
|
|
}
|
|
|
|
|
|
|
|
// StateWriter is the interface that must be implemented by something that
|
|
|
|
// can write a state. Writing the state can be cached or in-memory, as
|
|
|
|
// full persistence should be implemented by StatePersister.
|
|
|
|
type StateWriter interface {
|
|
|
|
WriteState(*terraform.State) error
|
|
|
|
}
|
|
|
|
|
|
|
|
// StateRefresher is the interface that is implemented by something that
|
|
|
|
// can load a state. This might be refreshing it from a remote location or
|
|
|
|
// it might simply be reloading it from disk.
|
|
|
|
type StateRefresher interface {
|
|
|
|
RefreshState() error
|
|
|
|
}
|
|
|
|
|
|
|
|
// StatePersister is implemented to truly persist a state. Whereas StateWriter
|
|
|
|
// is allowed to perhaps be caching in memory, PersistState must write the
|
|
|
|
// state to some durable storage.
|
|
|
|
type StatePersister interface {
|
|
|
|
PersistState() error
|
|
|
|
}
|
2017-01-09 17:00:05 -06:00
|
|
|
|
|
|
|
// Locker is implemented to lock state during command execution.
|
|
|
|
type Locker interface {
|
|
|
|
Lock(reason string) error
|
|
|
|
Unlock() error
|
|
|
|
}
|