72 lines
1.8 KiB
Go
72 lines
1.8 KiB
Go
![]() |
package state
|
||
|
|
||
|
import (
|
||
|
"github.com/hashicorp/terraform/terraform"
|
||
|
)
|
||
|
|
||
|
// CacheState is an implementation of the state interfaces that uses
|
||
|
// a StateReadWriter for a local cache.
|
||
|
type CacheState struct {
|
||
|
Cache CacheStateCache
|
||
|
Durable CacheStateDurable
|
||
|
|
||
|
state *terraform.State
|
||
|
}
|
||
|
|
||
|
// StateReader impl.
|
||
|
func (s *CacheState) State() *terraform.State {
|
||
|
return s.state
|
||
|
}
|
||
|
|
||
|
// WriteState will write and persist the state to the cache.
|
||
|
//
|
||
|
// StateWriter impl.
|
||
|
func (s *CacheState) WriteState(state *terraform.State) error {
|
||
|
if err := s.Cache.WriteState(state); err != nil {
|
||
|
return err
|
||
|
}
|
||
|
|
||
|
return s.Cache.PersistState()
|
||
|
}
|
||
|
|
||
|
// RefreshState will refresh both the cache and the durable states. It
|
||
|
// can return a myriad of errors (defined at the top of this file) depending
|
||
|
// on potential conflicts that can occur while doing this.
|
||
|
//
|
||
|
// If the durable state is newer than the local cache, then the local cache
|
||
|
// will be replaced with the durable.
|
||
|
//
|
||
|
// StateRefresher impl.
|
||
|
func (s *CacheState) RefreshState() error {
|
||
|
return nil
|
||
|
}
|
||
|
|
||
|
// PersistState takes the local cache, assuming it is newer than the remote
|
||
|
// state, and persists it to the durable storage. If you want to challenge the
|
||
|
// assumption that the local state is the latest, call a RefreshState prior
|
||
|
// to this.
|
||
|
//
|
||
|
// StatePersister impl.
|
||
|
func (s *CacheState) PersistState() error {
|
||
|
if err := s.Durable.WriteState(s.state); err != nil {
|
||
|
return err
|
||
|
}
|
||
|
|
||
|
return s.Durable.PersistState()
|
||
|
}
|
||
|
|
||
|
// CacheStateCache is the meta-interface that must be implemented for
|
||
|
// the cache for the CacheState.
|
||
|
type CacheStateCache interface {
|
||
|
StateReader
|
||
|
StateWriter
|
||
|
StatePersister
|
||
|
}
|
||
|
|
||
|
// CacheStateDurable is the meta-interface that must be implemented for
|
||
|
// the durable storage for CacheState.
|
||
|
type CacheStateDurable interface {
|
||
|
StateWriter
|
||
|
StatePersister
|
||
|
}
|