project

package
v0.9.2 Latest Latest
Warning

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

Go to latest
Published: Mar 11, 2024 License: AGPL-3.0 Imports: 26 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 DependenciesRecursiveIterate added in v0.9.0

func DependenciesRecursiveIterate(u Unit, f func(Unit) error) error

func EscapeForMarkerStr added in v0.7.5

func EscapeForMarkerStr(in string) (string, error)

EscapeForMarkerStr convert URL to string which can be used as marker.

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 created 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 RenderUnitPlanningString added in v0.9.0

func RenderUnitPlanningString(uStatus *UnitPlanningStatus) string

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)
	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 ExecSet added in v0.9.0

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

func NewExecSet added in v0.9.0

func NewExecSet(planningStatus *ProjectPlanningStatus) *ExecSet

func (*ExecSet) AddUnit added in v0.9.0

func (e *ExecSet) AddUnit(u *UnitPlanningStatus)

func (*ExecSet) Delete added in v0.9.0

func (e *ExecSet) Delete(u Unit)

func (*ExecSet) Find added in v0.9.0

func (e *ExecSet) Find(u Unit) *UnitPlanningStatus

func (*ExecSet) Front added in v0.9.0

func (e *ExecSet) Front() *UnitPlanningStatus

func (*ExecSet) Index added in v0.9.0

func (e *ExecSet) Index(u Unit) int

func (*ExecSet) IsEmpty added in v0.9.0

func (e *ExecSet) IsEmpty() bool

func (*ExecSet) Len added in v0.9.0

func (e *ExecSet) Len() int

func (*ExecSet) Slice added in v0.9.0

func (e *ExecSet) Slice() []*UnitPlanningStatus

func (*ExecSet) StatusFilter added in v0.9.0

func (e *ExecSet) StatusFilter(statusList ...ExecutionStatus) *ExecSet

type ExecutionStatus added in v0.9.0

type ExecutionStatus uint16
const (
	Backlog ExecutionStatus = iota + 1
	ReadyForExec
	InProgress
	Finished
)

type ExtendedFuncMap added in v0.7.14

type ExtendedFuncMap template.FuncMap

Type for tmpl functions list with additional options, like set path to templated file.

func (*ExtendedFuncMap) Get added in v0.7.14

func (f *ExtendedFuncMap) Get(path string, s *Stack) template.FuncMap

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 scanning 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"`
}

type Project

type Project struct {
	SessionId string
	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
	UUID                string
	ProcessedUnitsCount uint
	HupUnlockChan       chan os.Signal
	NewVersionMessage   string
	// 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) NewEmptyState added in v0.9.0

func (p *Project) NewEmptyState() *StateProject

func (*Project) Plan

func (p *Project) Plan() (*graph, 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() (err 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) StartSigTrap added in v0.9.2

func (p *Project) StartSigTrap(stop chan struct{})

func (*Project) StopSigTrap added in v0.9.2

func (p *Project) StopSigTrap()

func (*Project) TemplateMust

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

TemplateMust do template

func (*Project) TemplateTry

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

TemplateTry do template

func (*Project) UnLockState added in v0.4.5

func (p *Project) UnLockState() error

func (*Project) UnitsSlice added in v0.9.0

func (p *Project) UnitsSlice() []Unit

type ProjectPlanningStatus added in v0.9.0

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

func (*ProjectPlanningStatus) Add added in v0.9.0

func (s *ProjectPlanningStatus) Add(u Unit, op UnitOperation, diff string, tainted bool)

func (*ProjectPlanningStatus) AddIfNotExists added in v0.9.0

func (s *ProjectPlanningStatus) AddIfNotExists(u Unit, op UnitOperation, diff string, tainted bool)

func (*ProjectPlanningStatus) AddOrUpdate added in v0.9.0

func (s *ProjectPlanningStatus) AddOrUpdate(u Unit, op UnitOperation, diff string, tainted bool)

func (*ProjectPlanningStatus) BuildGraph added in v0.9.0

func (s *ProjectPlanningStatus) BuildGraph() (*graph, error)

func (*ProjectPlanningStatus) FindUnit added in v0.9.0

func (s *ProjectPlanningStatus) FindUnit(unit Unit) *UnitPlanningStatus

FindUnit searching unit by pointer, return *UnitPlanningStatus only for same unit

func (*ProjectPlanningStatus) FindUnitByKey added in v0.9.0

func (s *ProjectPlanningStatus) FindUnitByKey(unit Unit) *UnitPlanningStatus

FindUnit searching unit by pointer, return *UnitPlanningStatus if unit with same key exists (possible to have 2 different units ptr with same key - project/projectState)

func (*ProjectPlanningStatus) HasChanges added in v0.9.0

func (s *ProjectPlanningStatus) HasChanges() bool

func (*ProjectPlanningStatus) Len added in v0.9.0

func (s *ProjectPlanningStatus) Len() int

func (*ProjectPlanningStatus) OperationFilter added in v0.9.0

func (s *ProjectPlanningStatus) OperationFilter(ops ...UnitOperation) *ProjectPlanningStatus

func (*ProjectPlanningStatus) Print added in v0.9.0

func (s *ProjectPlanningStatus) Print()

func (*ProjectPlanningStatus) Slice added in v0.9.0

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, fileName string) (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, fileName string) (res []byte, warn bool, err error)

TemplateTry apply values 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(unit 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"`
	TargetStackName 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() Unit
	GetDiffData() interface{}
	GetStateDiffData() interface{}
	LoadState(interface{}, string, *StateProject) error
	KindKey() string
	CodeDir() string
	UpdateProjectRuntimeData(p *Project) error
	WasApplied() bool
	ForceApply() bool
	Mux() *sync.Mutex
	IsTainted() bool
	SetTainted(newValue bool, err error)
	SetExecStatus(ExecutionStatus)
	GetExecStatus() ExecutionStatus
	ExecError() error
}

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 {
	LinksList map[string]*ULinkT `json:"unit_links_list,omitempty"`
	MapMutex  sync.RWMutex
}

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

func NewUnitLinksT added in v0.7.20

func NewUnitLinksT() *UnitLinksT

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) Insert added in v0.7.20

func (o *UnitLinksT) Insert(key string, l *ULinkT)

Insert insert element to map, override if exists

func (*UnitLinksT) InsertTry added in v0.7.20

func (o *UnitLinksT) InsertTry(key string, l *ULinkT) error

Insert insert element to map, return error if exists

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) JoinWithDataReplace added in v0.6.1

func (o *UnitLinksT) JoinWithDataReplace(source *UnitLinksT) error

JoinWithDataReplace join source links into o. If link exists - only copy output data.

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)

func (*UnitLinksT) UniqUnits added in v0.7.11

func (o *UnitLinksT) UniqUnits() map[string]Unit

UniqUnits return list of uniq links units.

type UnitOperation added in v0.9.0

type UnitOperation uint16
const (
	Apply UnitOperation = iota + 1
	Destroy
	Update
	NotChanged
)

func (UnitOperation) HasChanges added in v0.9.0

func (u UnitOperation) HasChanges() bool

func (UnitOperation) String added in v0.9.0

func (u UnitOperation) String() string

type UnitPlanningStatus added in v0.9.0

type UnitPlanningStatus struct {
	UnitPtr   Unit
	Diff      string
	Operation UnitOperation
	IsTainted bool
	Index     int
}

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