Documentation ¶
Overview ¶
Package storage is responsible for the persistent storage of state.
Sous state is stored in a file hierarchy like this:
/ defs.yaml manifests/ github.com/ username/ reponame/ dirname/ subdirname.yaml
Index ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func IsGSMError ¶ added in v1.0.1
IsGSMError returns true if err is a git-state-manager error
Types ¶
type DiskStateManager ¶
type DiskStateManager struct { BaseDir string Codec *hy.Codec // contains filtered or unexported fields }
DiskStateManager implements StateReader and StateWriter using disk storage as its back-end.
func NewDiskStateManager ¶
func NewDiskStateManager(baseDir string, ls logging.LogSink) *DiskStateManager
NewDiskStateManager returns a new DiskStateManager configured to read and write from a filesystem tree containing YAML files.
func (*DiskStateManager) ReadState ¶
func (dsm *DiskStateManager) ReadState() (*sous.State, error)
ReadState loads the entire intended state of the world from a dir.
func (*DiskStateManager) WriteState ¶
func (dsm *DiskStateManager) WriteState(s *sous.State, u sous.User) error
WriteState records the entire intended state of the world to a dir.
type DuplexStateManager ¶ added in v1.0.1
type DuplexStateManager struct {
// contains filtered or unexported fields
}
A DuplexStateManager echoes StateManager operation to a primary StateManager, but also ensures that writes occur to the secondary one.
func NewDuplexStateManager ¶ added in v1.0.1
func NewDuplexStateManager(primary, secondary sous.StateManager, log logging.LogSink) *DuplexStateManager
NewDuplexStateManager creates a DuplexStateManager
func (*DuplexStateManager) ReadState ¶ added in v1.0.1
func (dup *DuplexStateManager) ReadState() (*sous.State, error)
ReadState implements StateManager on DuplexStateManager
func (*DuplexStateManager) WriteState ¶ added in v1.0.1
WriteState implements StateManager on DuplexStateManager
type GitStateManager ¶ added in v0.0.3
type GitStateManager struct { // All reads and writes must use exclusive lock, because read affects state // by doing a git pull. sync.Mutex *DiskStateManager //can't just be a StateReader/Writer: needs dir // contains filtered or unexported fields }
GitStateManager wraps a DiskStateManager and implements transactional writes to a Git remote. It also polls the Git remote for changes
Methods of GitStateManager are serialised, and thus safe for concurrent access. No two GitStateManagers should have DiskStateManagers using the same BaseDir.
func NewGitStateManager ¶ added in v0.0.3
func NewGitStateManager(dsm *DiskStateManager, ls logging.LogSink) *GitStateManager
NewGitStateManager creates a new GitStateManager wrapping the provided DiskStateManager.
func (*GitStateManager) ReadState ¶ added in v0.0.3
func (gsm *GitStateManager) ReadState() (*sous.State, error)
ReadState reads sous state from the local disk.
func (*GitStateManager) WriteState ¶ added in v0.0.3
func (gsm *GitStateManager) WriteState(s *sous.State, u sous.User) error
WriteState writes sous state to disk, then attempts to push it to Remote. If the push fails, the state is reset and an error is returned.
type LogOnlyStateManager ¶ added in v1.0.1
type LogOnlyStateManager struct {
// contains filtered or unexported fields
}
A LogOnlyStateManager trivially implements StateManager, simply logging the actions requested of it.
func NewLogOnlyStateManager ¶ added in v1.0.1
func NewLogOnlyStateManager(log logging.LogSink) *LogOnlyStateManager
NewLogOnlyStateManager returns a new LogOnlyStateManager
func (LogOnlyStateManager) ReadState ¶ added in v1.0.1
func (losm LogOnlyStateManager) ReadState() (*sous.State, error)
ReadState implements StateManager on LogOnlyStateManager
func (LogOnlyStateManager) WriteState ¶ added in v1.0.1
WriteState implements StateManager on LogOnlyStateManager
type PostgresConfig ¶ added in v1.0.1
type PostgresConfig struct { DBName string `env:"SOUS_PG_DBNAME"` User string `env:"SOUS_PG_USER"` Password string `env:"SOUS_PG_PASSWORD"` Host string `env:"SOUS_PG_HOST"` Port string `env:"SOUS_PG_PORT"` SSL bool `env:"SOUS_PG_SSL"` }
A PostgresConfig describes how to connect to a postgres database
type PostgresStateManager ¶ added in v1.0.1
type PostgresStateManager struct {
// contains filtered or unexported fields
}
The PostgresStateManager provides the StateManager interface by reading/writing from a postgres database.
func NewPostgresStateManager ¶ added in v1.0.1
func NewPostgresStateManager(db *sql.DB, log logging.LogSink) *PostgresStateManager
NewPostgresStateManager creates a new PostgresStateManager.
func (PostgresStateManager) ReadState ¶ added in v1.0.1
func (m PostgresStateManager) ReadState() (*sous.State, error)
ReadState implements sous.StateReader on PostgresStateManager
func (PostgresStateManager) WriteState ¶ added in v1.0.1
WriteState implements StateWriter on PostgresStateManager