utils

package
v1.5.0-slog4 Latest Latest
Warning

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

Go to latest
Published: Oct 28, 2024 License: Apache-2.0 Imports: 22 Imported by: 30

Documentation

Index

Constants

View Source
const (
	PathsSeparator       = ":"
	ValuesFileName       = "values.yaml"
	ConfigValuesFileName = "config-values.yaml"
)
View Source
const (
	NonExistentPathErrorMsg = "error in remove for path:"
	MissingPathErrorMsg     = "remove operation does not apply: doc is missing path"
)

Error messages to distinguish non-typed errors from the 'json-patch' library.

View Source
const (
	GlobalValuesKey = "global"
)

Variables

View Source
var (
	ErrTestFailed   = errors.New("test failed")
	ErrMissing      = errors.New("missing value")
	ErrUnknownType  = errors.New("unknown object type")
	ErrInvalid      = errors.New("invalid state detected")
	ErrInvalidIndex = errors.New("invalid index referenced")
)
View Source
var (
	ModuleEnabled  = true
	ModuleDisabled = false
)

Functions

func CalculateChecksumOfDirectory

func CalculateChecksumOfDirectory(dir string) (string, error)

func CalculateChecksumOfFile

func CalculateChecksumOfFile(path string) (string, error)

func CalculateChecksumOfPaths

func CalculateChecksumOfPaths(paths ...string) (string, error)

func CalculateStringsChecksum

func CalculateStringsChecksum(stringArr ...string) string

func CreateEmptyWritableFile added in v1.3.3

func CreateEmptyWritableFile(filePath string) error

func DumpData added in v1.3.3

func DumpData(filePath string, data []byte) error

func EnrichLoggerWithLabels added in v1.5.1

func EnrichLoggerWithLabels(logger *unilogger.Logger, labelsMaps ...map[string]string) *unilogger.Logger

func FilesFromRoot

func FilesFromRoot(root string, filterFn func(dir string, name string, info os.FileInfo) bool) (files map[string]map[string]string, err error)

FilesFromRoot returns a map with path and array of files under it

func FindExecutableFilesInPath

func FindExecutableFilesInPath(dir string) (executables []string, nonExecutables []string, err error)

FindExecutableFilesInPath returns a list of executable and a list of non-executable files in path

func IsNonExistentPathError

func IsNonExistentPathError(err error) bool

func JSONEqual added in v1.1.3

func JSONEqual(a, b []byte) bool

JSONEqual indicates if 2 JSON documents have the same structural equality.

func KeysSortedByReference added in v1.0.6

func KeysSortedByReference(m map[string]struct{}, ref []string) []string

KeysSortedByReference returns keys from map sorted by the order of 'ref' array. Note: keys not in ref are ignored.

func ListFullyIn

func ListFullyIn(arr []string, ref []string) bool

ListFullyIn returns whether all 'arr' items contains in `ref` array.

func ListIntersection

func ListIntersection(arrs ...[]string) (result []string)

ListIntersection returns an array with items that are present in all 'arrs' arrays.

func ListSubtract

func ListSubtract(src []string, ignored ...[]string) (result []string)

ListSubtract creates a new array from 'src' array with items that are not present in 'ignored' arrays.

func ListToMapStringStruct added in v1.0.6

func ListToMapStringStruct(items []string) map[string]struct{}

func ListUnion

func ListUnion(src []string, more ...[]string) []string

ListUnion creates a new array with unique items from all src arrays.

func MapStringStructKeys added in v1.0.6

func MapStringStructKeys(m map[string]struct{}) []string

func MergeLabels

func MergeLabels(labelsMaps ...map[string]string) map[string]string

MergeLabels merges several maps into one. Last map keys overrides keys from first maps.

Can be used to copy a map if just one argument is used.

func ModuleEnabledValue

func ModuleEnabledValue(i interface{}) (*bool, error)

func ModuleNameFromValuesKey

func ModuleNameFromValuesKey(moduleValuesKey string) string

ModuleNameFromValuesKey returns kebab-cased name from camelCased (verySimpleModule become very-simple-module)

func ModuleNameToValuesKey

func ModuleNameToValuesKey(moduleName string) string

ModuleNameToValuesKey returns camelCased name from kebab-cased (very-simple-module become verySimpleModule)

func ReadOpenAPIFiles added in v1.3.3

func ReadOpenAPIFiles(openApiDir string) (configValuesBytes, valuesBytes []byte, err error)

ReadOpenAPIFiles reads config-values.yaml and values.yaml from the specified directory. Global schemas:

/global/openapi/config-values.yaml
/global/openapi/values.yaml

Module schemas:

/modules/XXX-module-name/openapi/config-values.yaml
/modules/XXX-module-name/openapi/values.yaml

func SortByReference

func SortByReference(in []string, ref []string) []string

SortByReference returns a new array with items sorted by the order of 'ref' array.

func SortReverse

func SortReverse(in []string) []string

SortReverse creates a copy of 'in' array and sort it in a reverse order.

func SortReverseByReference

func SortReverseByReference(in []string, ref []string) []string

SortReverseByReference returns a new array with items, reverse sorted by the order of 'ref' array.

func SplitToPaths added in v1.3.3

func SplitToPaths(dir string) []string

SplitToPaths split concatenated dirs to the array

func SymlinkInfo

func SymlinkInfo(path string, info os.FileInfo) (target string, isDir bool, err error)

func ValidateHookValuesPatch

func ValidateHookValuesPatch(valuesPatch ValuesPatch, permittedRootKey string) error
func WalkSymlinks(target string, linkName string, files map[string]map[string]string, filterFn func(dir string, name string, info os.FileInfo) bool) (symlinkedDirectories map[string]string, err error)

WalkSymlinks walks a directory, updates files map and returns symlinked directories

Types

type ApplyPatchMode

type ApplyPatchMode string
const (
	Strict                 ApplyPatchMode = "strict"
	IgnoreNonExistentPaths ApplyPatchMode = "ignore-non-existent-paths"
)

type ModuleConfig

type ModuleConfig struct {
	ModuleName string
	IsEnabled  *bool
	// contains filtered or unexported fields
}

func NewModuleConfig

func NewModuleConfig(moduleName string, values Values) *ModuleConfig

func (*ModuleConfig) Checksum

func (mc *ModuleConfig) Checksum() string

func (*ModuleConfig) FromYaml

func (mc *ModuleConfig) FromYaml(yamlString []byte) (*ModuleConfig, error)

FromYaml loads module config from a yaml string.

Example:

simpleModule:

param1: 10
param2: 120

simpleModuleEnabled: true

func (*ModuleConfig) GetEnabled

func (mc *ModuleConfig) GetEnabled() string

GetEnabled returns string description of enabled status.

func (*ModuleConfig) GetValues added in v1.3.0

func (mc *ModuleConfig) GetValues() Values

GetValues returns values but without moduleName

a: b
c: d

func (*ModuleConfig) GetValuesWithModuleName deprecated added in v1.3.3

func (mc *ModuleConfig) GetValuesWithModuleName() Values

GetValuesWithModuleName enrich module values with module's name top level key if key is already present - returns values as it module: test-module with values {"a": "b", "c": "d} will return:

testModule:
  a: b
  c: d

Deprecated: use GetValues instead

func (*ModuleConfig) LoadFromValues

func (mc *ModuleConfig) LoadFromValues(values Values) (*ModuleConfig, error)

LoadFromValues loads module config from a map.

Values for module in `values` map are addressed by a key. This key should be produced with ModuleNameToValuesKey.

func (*ModuleConfig) ModuleConfigKey

func (mc *ModuleConfig) ModuleConfigKey() string

ModuleConfigKey transforms module kebab-case name to the config camelCase name

func (*ModuleConfig) ModuleEnabledKey

func (mc *ModuleConfig) ModuleEnabledKey() string

ModuleEnabledKey transforms module kebab-case name to the config camelCase name with 'Enabled' suffix

func (*ModuleConfig) Reset added in v1.4.0

func (mc *ModuleConfig) Reset()

Reset removes values from module config and reset enabled IsEnabled

func (*ModuleConfig) String

func (mc *ModuleConfig) String() string

String returns description of ModuleConfig values.

type Operation added in v1.1.3

type Operation map[string]*json.RawMessage

Operation is a single JSON-Patch step, such as a single 'add' operation.

func DecodeJsonPatchOperation

func DecodeJsonPatchOperation(v interface{}) (Operation, error)

func (Operation) From added in v1.1.3

func (o Operation) From() (string, error)

From reads the "from" field of the Operation.

func (Operation) Kind added in v1.1.3

func (o Operation) Kind() string

Kind reads the "op" field of the Operation.

func (Operation) Path added in v1.1.3

func (o Operation) Path() (string, error)

Path reads the "path" field of the Operation.

func (Operation) ValueInterface added in v1.1.3

func (o Operation) ValueInterface() (interface{}, error)

ValueInterface decodes the operation value into an interface.

type Patch added in v1.1.3

type Patch []Operation

Patch is an ordered collection of Operations.

func DecodePatch added in v1.1.3

func DecodePatch(buf []byte) (Patch, error)

DecodePatch decodes the passed JSON document as an RFC 6902 patch.

func JsonPatchFromBytes

func JsonPatchFromBytes(data []byte) (Patch, error)

func JsonPatchFromReader

func JsonPatchFromReader(r io.Reader) (Patch, error)

func JsonPatchFromString

func JsonPatchFromString(in string) (Patch, error)

func (Patch) Apply added in v1.1.3

func (p Patch) Apply(doc []byte) ([]byte, error)

Apply mutates a JSON document according to the patch, and returns the new document.

func (Patch) ApplyIndent added in v1.1.3

func (p Patch) ApplyIndent(doc []byte, indent string) ([]byte, error)

ApplyIndent mutates a JSON document according to the patch, and returns the new document indented.

type Values

type Values map[string]interface{}

Values stores values for modules or hooks by name.

func ApplyValuesPatch

func ApplyValuesPatch(values Values, valuesPatch ValuesPatch, mode ApplyPatchMode) (Values, bool, error)

ApplyValuesPatch uses patched jsonpatch library to make the behavior of ApplyIgnoreNonExistentPaths as fast as ApplyStrict. This function does not mutate input Values

func LoadValuesFileFromDir added in v1.3.3

func LoadValuesFileFromDir(dir string) (Values, error)

LoadValuesFileFromDir finds and parses values.yaml files in the specified directory.

func MergeValues

func MergeValues(values ...Values) Values

func NewGlobalValues

func NewGlobalValues(globalSectionContent string) (Values, error)

NewGlobalValues creates Values with global section loaded from input string.

func NewValues

func NewValues(data map[string]interface{}) (Values, error)

NewValues load all sections from input data and makes sure that input map can be marshaled to yaml and that yaml is compatible with json.

func NewValuesFromBytes

func NewValuesFromBytes(data []byte) (Values, error)

NewValuesFromBytes loads values sections from maps in yaml or json format

func (Values) AsBytes

func (v Values) AsBytes(format string) ([]byte, error)

func (Values) AsConfigMapData

func (v Values) AsConfigMapData() (map[string]string, error)

AsConfigMapData returns values as map that can be used as a 'data' field in the ConfigMap.

func (Values) AsString

func (v Values) AsString(format string) string

func (Values) Checksum

func (v Values) Checksum() string

func (Values) Copy added in v1.3.4

func (v Values) Copy() Values

Copy returns full deep copy of the Values

func (Values) DebugString

func (v Values) DebugString() string

DebugString returns values as yaml or an error line if dump is failed

func (Values) GetKeySection added in v1.3.3

func (v Values) GetKeySection(key string) Values

func (Values) Global

func (v Values) Global() Values

func (Values) HasGlobal

func (v Values) HasGlobal() bool

func (Values) HasKey

func (v Values) HasKey(key string) bool

func (Values) IsEmpty added in v1.0.6

func (v Values) IsEmpty() bool

func (Values) JsonBytes

func (v Values) JsonBytes() ([]byte, error)

func (Values) JsonString

func (v Values) JsonString() string

func (Values) SectionByKey deprecated

func (v Values) SectionByKey(key string) Values

Deprecated: some useless copy here, probably we don't need that

func (Values) YamlBytes

func (v Values) YamlBytes() ([]byte, error)

func (Values) YamlString

func (v Values) YamlString() string

type ValuesPatch

type ValuesPatch struct {
	Operations []*ValuesPatchOperation
}

func AppendValuesPatch

func AppendValuesPatch(valuesPatches []ValuesPatch, newValuesPatch ValuesPatch) []ValuesPatch

func CompactPatches

func CompactPatches(existedOperations []*ValuesPatchOperation, newOperations []*ValuesPatchOperation) ValuesPatch

CompactPatches modifies an array of existed patch operations according to the new array of patch operations. The rule is: only last operation for the path should be stored.

func CompactValuesPatches

func CompactValuesPatches(valuesPatches []ValuesPatch, newValuesPatch ValuesPatch) []ValuesPatch

func EnabledFromValuesPatch

func EnabledFromValuesPatch(valuesPatch ValuesPatch) ValuesPatch

func FilterValuesPatch

func FilterValuesPatch(valuesPatch ValuesPatch, rootPath string) ValuesPatch

func NewValuesPatch

func NewValuesPatch() *ValuesPatch

func ValuesPatchFromBytes

func ValuesPatchFromBytes(data []byte) (*ValuesPatch, error)

ValuesPatchFromBytes reads a JSON stream of json patches and single operations from bytes and returns a ValuesPatch with all json patch operations. TODO do we need a separate ValuesPatchOperation type??

func ValuesPatchFromFile

func ValuesPatchFromFile(filePath string) (*ValuesPatch, error)

func (*ValuesPatch) ApplyIgnoreNonExistentPaths

func (p *ValuesPatch) ApplyIgnoreNonExistentPaths(doc []byte) ([]byte, error)

ApplyIgnoreNonExistentPaths calls jsonpatch.Apply to transform an input JSON document.

- errors from "remove" operations are ignored.

func (*ValuesPatch) ApplyStrict

func (p *ValuesPatch) ApplyStrict(doc []byte) ([]byte, error)

ApplyStrict calls jsonpatch.Apply to transform a JSON document according to the patch.

- "remove" operation errors are not ignored. - absent paths are not ignored.

func (*ValuesPatch) MergeOperations

func (p *ValuesPatch) MergeOperations(src *ValuesPatch)

func (*ValuesPatch) ToJsonPatch

func (p *ValuesPatch) ToJsonPatch() (Patch, error)

ToJsonPatch returns a jsonpatch.Patch with all operations.

type ValuesPatchOperation

type ValuesPatchOperation struct {
	Op    string          `json:"op,omitempty"`
	Path  string          `json:"path,omitempty"`
	Value json.RawMessage `json:"value,omitempty"`
}

func (*ValuesPatchOperation) ToJsonPatch

func (op *ValuesPatchOperation) ToJsonPatch() (Patch, error)

ToJsonPatch returns a jsonpatch.Patch with one operation.

func (*ValuesPatchOperation) ToString

func (op *ValuesPatchOperation) ToString() string

type ValuesPatchType

type ValuesPatchType string
const (
	ConfigMapPatch    ValuesPatchType = "CONFIG_MAP_PATCH"
	MemoryValuesPatch ValuesPatchType = "MEMORY_VALUES_PATCH"
)

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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