storage

package
v1.0.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Apr 11, 2019 License: MIT Imports: 22 Imported by: 1

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

func IsGSMError(err error) bool

IsGSMError returns true if err is a git-state-manager error

func PrepareTestGitRepo added in v1.0.1

func PrepareTestGitRepo(t *testing.T, s *sous.State, remotepath, outpath string)

PrepareTestGitRepo prepares a git repo for test purposes.

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

func (dup *DuplexStateManager) WriteState(state *sous.State, user sous.User) error

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

func (losm LogOnlyStateManager) WriteState(state *sous.State, _ sous.User) error

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

func (PostgresConfig) DB added in v1.0.1

func (c PostgresConfig) DB() (*sql.DB, error)

DB returns a database connection based on this config

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

func (m PostgresStateManager) WriteState(state *sous.State, user sous.User) error

WriteState implements StateWriter on PostgresStateManager

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL