project

package
v0.6.0 Latest Latest
Warning

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

Go to latest
Published: Dec 29, 2021 License: AGPL-3.0 Imports: 28 Imported by: 0

Documentation

Index

Constants

View Source
const ConfigFilePattern = "^project.y[a]{0,1}ml$"

ConfigFilePattern name of required project config file.

View Source
const OutputLinkType = "outputMarkers"

Variables

View Source
var BackendsFactories = map[string]BackendsFactory{}

BackendsFactories map of backend providers factories. Use BackendsFactories["prov_name"].New() to create backend of provider 'prov_name'

View Source
var SecretDriversMap = map[string]SecretDriver{}
View Source
var TemplateDriversMap map[string]TemplateDriver = map[string]TemplateDriver{}
View Source
var UnitFactoriesMap = map[string]UnitFactory{}

Functions

func BcryptString

func BcryptString(pwd []byte) (string, error)

func ConvertToShellVar

func ConvertToShellVar(name string) string

func ConvertToShellVarName

func ConvertToShellVarName(name string) string

func ConvertToTfVarName

func ConvertToTfVarName(name string) string

func CreateMarker

func CreateMarker(link ULinkT) (string, error)

CreateMarker generate hash string for template markers.

func InsertYaml added in v0.6.0

func InsertYaml(data interface{}) (string, error)

InsertYaml function for template. Insert data to yaml in json one line string (supported from a box by yaml unmarshal functions).

func NewStackTemplate added in v0.5.0

func NewStackTemplate(data []byte) (*stackTemplate, error)

func OutputsReplacer added in v0.6.0

func OutputsReplacer(data reflect.Value, unit Unit) (reflect.Value, error)

OutputsReplacer - project scanner function, witch process dependencies markers in unit data setted by AddRemoteStateMarker template function.

func OutputsScanner added in v0.5.0

func OutputsScanner(data reflect.Value, unit Unit) (reflect.Value, error)

OutputsScanner - project scanner function, witch process dependencies markers in unit data setted by AddRemoteStateMarker template function.

func ProjectsFilesExists

func ProjectsFilesExists() bool

func RegisterBackendFactory

func RegisterBackendFactory(f BackendsFactory, provider string) error

RegisterBackendFactory - register factory of some provider (like s3) in map.

func RegisterSecretDriver

func RegisterSecretDriver(drv SecretDriver, key string) error

func RegisterTemplateDriver

func RegisterTemplateDriver(drv TemplateDriver)

RegisterTemplateDriver register unit template driver.

func RegisterUnitFactory added in v0.5.0

func RegisterUnitFactory(f UnitFactory, modType string) error

func ScanMarkers

func ScanMarkers(data interface{}, procFunc MarkerScanner, unit Unit) error

ScanMarkers use marker scanner function to replace templated markers.

func StateOutputsReplacer added in v0.6.0

func StateOutputsReplacer(data reflect.Value, unit Unit) (reflect.Value, error)

StateOutputsReplacer scan state data for outputs markers and replaces them for placeholders with output ref like <output "stack.unit.output" >

Types

type Backend

type Backend interface {
	Name() string
	Provider() string
	GetBackendHCL(string, string) (*hclwrite.File, error)
	GetBackendBytes(string, string) ([]byte, error)
	GetRemoteStateHCL(string, string) ([]byte, error)
	State() map[string]interface{}
	LockState() error
	UnlockState() error
	WriteState(stateData string) error
	ReadState() (string, error)
}

Backend interface for backend provider.

type BackendsFactory

type BackendsFactory interface {
	New([]byte, string, *Project) (Backend, error)
}

BackendsFactory - interface for backend provider factory. New() creates backend.

type GlobalTemplateDriver added in v0.5.0

type GlobalTemplateDriver struct {
}

func (*GlobalTemplateDriver) AddTemplateFunctions added in v0.5.0

func (d *GlobalTemplateDriver) AddTemplateFunctions(mp template.FuncMap, p *Project, s *Stack)

func (*GlobalTemplateDriver) Name added in v0.5.0

func (d *GlobalTemplateDriver) Name() string

type MarkerScanner

type MarkerScanner func(data reflect.Value, unit Unit) (reflect.Value, error)

MarkerScanner type witch describe function for scaning markers in templated and unmarshaled yaml data.

type ObjectData

type ObjectData struct {
	// contains filtered or unexported fields
}

ObjectData simple representation of project object.

type PrinterOutput added in v0.4.5

type PrinterOutput struct {
	Name   string `json:"name"`
	Output string `json:"output"`
}

TODO: // ProjectConfSpec type for project.yaml config.

type ProjectConfSpec struct {
	Name      string                 `yaml:"name"`
	Kind      string                 `yaml:"kind"`
	Backend   string                 `yaml:"backend,omitempty"`
	Exports   map[string]interface{} `yaml:"exports"`
	Variables map[string]interface{} `yaml:"variables"`
}

type Project

type Project struct {
	Units     map[string]Unit
	Stacks    map[string]*Stack
	Backends  map[string]Backend
	UnitLinks UnitLinksT

	CodeCacheDir     string
	StateMutex       sync.Mutex
	InitLock         sync.Mutex
	RuntimeDataset   RuntimeData
	StateBackendName string
	OwnState         *StateProject
	// contains filtered or unexported fields
}

Project describes main config with user-defined variables.

func LoadProjectBase

func LoadProjectBase() (*Project, error)

LoadProjectBase read project data in current directory, create base project, and load secrets. stacks, backends and other objects are not loads.

func LoadProjectFull

func LoadProjectFull() (*Project, error)

LoadProjectFull read project data in current directory, create base project, load secrets and all project's objects.

func NewEmptyProject

func NewEmptyProject() *Project

NewEmptyProject creates new empty project. The configuration will not be loaded.

func (*Project) Apply

func (p *Project) Apply() error

Apply all units.

func (*Project) BackupState added in v0.5.2

func (p *Project) BackupState() error

func (*Project) Build

func (p *Project) Build() error

Build generate all terraform code for project.

func (*Project) CheckContainsMarkers

func (p *Project) CheckContainsMarkers(data string, kinds ...string) bool

CheckContainsMarkers - check if string contains any template markers.

func (*Project) ClearCacheDir added in v0.4.5

func (p *Project) ClearCacheDir() error

func (*Project) Destroy

func (p *Project) Destroy() error

Destroy all units.

func (*Project) Edit

func (p *Project) Edit(name string) error

func (*Project) ExportEnvs

func (p *Project) ExportEnvs(ex interface{}) error

func (*Project) GetState added in v0.5.2

func (p *Project) GetState() ([]byte, error)

func (*Project) LoadState

func (p *Project) LoadState() (*StateProject, error)

func (*Project) LockState added in v0.4.5

func (p *Project) LockState() error

func (*Project) MkBuildDir

func (p *Project) MkBuildDir() error

func (*Project) Name

func (p *Project) Name() string

Name return project name.

func (*Project) Plan

func (p *Project) Plan() (hasChanges bool, err error)

Plan and output result.

func (*Project) PrintInfo

func (p *Project) PrintInfo() error

PrintInfo print project info.

func (*Project) PrintOutputs added in v0.4.5

func (p *Project) PrintOutputs() error

func (*Project) PrintSecretsList

func (p *Project) PrintSecretsList()

func (*Project) PullState added in v0.5.2

func (p *Project) PullState() error

func (*Project) SaveState

func (p *Project) SaveState() error

func (*Project) TemplateMust

func (p *Project) TemplateMust(data []byte) (res []byte, err error)

TemplateMust do template

func (*Project) TemplateTry

func (p *Project) TemplateTry(data []byte) (res []byte, warn bool, err error)

TemplateTry do template

func (*Project) UnLockState added in v0.4.5

func (p *Project) UnLockState() error

type RuntimeData added in v0.4.5

type RuntimeData struct {
	UnitsOutputs    map[string]interface{}
	PrintersOutputs []PrinterOutput
}

type Secret

type Secret struct {
	Filename  string
	DriverKey string
	Data      interface{}
}

type SecretDriver

type SecretDriver interface {
	// Read secret from raw yaml data. Return secret name, parsed secret data (for project templateing) and error.
	Read([]byte) (string, interface{}, error)
	// Return secret driver key (sops ...)
	Key() string
	// Edit secret.
	Edit(Secret) error
	// Create secret from files list generated by ui.generator/
	Create(map[string][]byte) error
}

type Stack added in v0.5.0

type Stack struct {
	ProjectPtr  *Project
	Backend     Backend
	Name        string
	BackendName string
	TemplateSrc string
	TemplateDir string
	Templates   []stackTemplate
	Variables   map[string]interface{}
	ConfigData  map[string]interface{}
}

Stack represent stack object.

func (*Stack) ReadTemplate added in v0.6.0

func (s *Stack) ReadTemplate(src string) (err error)

ReadTemplate read all templates in src.

func (*Stack) TemplateMust added in v0.5.0

func (i *Stack) TemplateMust(data []byte) (res []byte, err error)

TemplateMust apply stack variables to template data. If template has unresolved variables - function will return an error.

func (*Stack) TemplateTry added in v0.5.0

func (i *Stack) TemplateTry(data []byte) (res []byte, warn bool, err error)

TemplateTry apply stack variables to template data. If template has unresolved variables - warn will be set to true.

type StateProject

type StateProject struct {
	Project
	LoaderProjectPtr *Project
	ChangedUnits     map[string]Unit
}

func (*StateProject) CheckUnitChanges added in v0.5.0

func (sp *StateProject) CheckUnitChanges(unit Unit) (string, Unit)

func (*StateProject) DeleteUnit added in v0.5.0

func (sp *StateProject) DeleteUnit(mod Unit)

func (*StateProject) UpdateUnit added in v0.5.0

func (sp *StateProject) UpdateUnit(mod Unit)

type TemplateDriver

type TemplateDriver interface {
	AddTemplateFunctions(template.FuncMap, *Project, *Stack)
	Name() string
}

type ULinkT added in v0.6.0

type ULinkT struct {
	Unit            Unit        `json:"-"`
	LinkType        string      `json:"link_type"`
	TargetUnitName  string      `json:"target_unit_name"`
	TargenStackName string      `json:"target_stack_name"`
	OutputName      string      `json:"output_name"`
	OutputData      interface{} `json:"output_data"`
}

ULinkT describe unit link betwen one target unit and multiple cli units, which uses this unit (output or remote state, or custom unit dependency).

func (*ULinkT) InitUnitPtr added in v0.6.0

func (u *ULinkT) InitUnitPtr(p *Project) (err error)

func (*ULinkT) LinkPath added in v0.6.0

func (u *ULinkT) LinkPath() (res string)

func (*ULinkT) UnitKey added in v0.6.0

func (u *ULinkT) UnitKey() (res string)

type Unit added in v0.5.0

type Unit interface {
	Name() string
	Stack() *Stack
	Project() *Project
	Backend() Backend
	Prepare() error // Prepare scan all markers in unit, and build project unit links, and unit dependencies.
	Dependencies() *UnitLinksT
	Build() error
	Init() error
	Apply() error
	Plan() error
	Destroy() error
	Key() string
	GetState() interface{}
	GetDiffData() interface{}
	GetStateDiffData() interface{}
	LoadState(interface{}, string, *StateProject) error
	KindKey() string
	CodeDir() string
	UpdateProjectRuntimeData(p *Project) error
	WasApplied() bool
	ForceApply() bool
	Mux() *sync.Mutex
}

Unit interface for unit drivers.

func NewUnit added in v0.5.0

func NewUnit(spec map[string]interface{}, stack *Stack) (Unit, error)

NewUnit creates and return unit with needed driver.

func NewUnitFromState added in v0.5.0

func NewUnitFromState(state map[string]interface{}, name string, p *StateProject) (Unit, error)

NewUnitFromState creates unit from saved state.

type UnitDriver added in v0.5.0

type UnitDriver interface {
	AddTemplateFunctions(projectPtr *Project) error
	GetScanners() []MarkerScanner
}

type UnitFactory added in v0.5.0

type UnitFactory interface {
	New(map[string]interface{}, *Stack) (Unit, error)
	NewFromState(map[string]interface{}, string, *StateProject) (Unit, error)
}

type UnitLinksT added in v0.6.0

type UnitLinksT struct {
	List map[string]*ULinkT `json:"unit_links_list,omitempty"`
}

UnitLinksT describe a set of links (dependencies) betwen units inside project.

func (*UnitLinksT) ByLinkTypes added in v0.6.0

func (o *UnitLinksT) ByLinkTypes(outputType ...string) (res *UnitLinksT)

ByLinkTypes returns sublist with unit link types == any of outputType slice. Returns full list if outputType is empty.

func (*UnitLinksT) ByTargetUnit added in v0.6.0

func (o *UnitLinksT) ByTargetUnit(unit Unit) (res *UnitLinksT)

func (*UnitLinksT) Delete added in v0.6.0

func (o *UnitLinksT) Delete(marker string) (err error)

func (*UnitLinksT) Get added in v0.6.0

func (o *UnitLinksT) Get(key string) (res *ULinkT)

func (*UnitLinksT) IsEmpty added in v0.6.0

func (o *UnitLinksT) IsEmpty() bool

func (*UnitLinksT) Join added in v0.6.0

func (o *UnitLinksT) Join(l *UnitLinksT) error

func (*UnitLinksT) Map added in v0.6.0

func (o *UnitLinksT) Map() (res map[string]*ULinkT)

func (*UnitLinksT) Set added in v0.6.0

func (o *UnitLinksT) Set(l *ULinkT) (string, error)

func (*UnitLinksT) Size added in v0.6.0

func (o *UnitLinksT) Size() int

func (*UnitLinksT) Slice added in v0.6.0

func (o *UnitLinksT) Slice() (res []*ULinkT)

type UnitState added in v0.5.0

type UnitState interface {
	GetType() string
}

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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