module_manager

package
v1.0.6 Latest Latest
Warning

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

Go to latest
Published: Aug 23, 2022 License: Apache-2.0 Imports: 52 Imported by: 4

Documentation

Index

Constants

This section is empty.

Variables

View Source
var ValidModuleNameRe = regexp.MustCompile(`^[0-9][0-9][0-9]-(.*)$`)

Functions

func CreateEmptyWritableFile

func CreateEmptyWritableFile(filePath string) error

func GetGlobalHookConfigSchema

func GetGlobalHookConfigSchema(version string) *spec.Schema

func GetModuleHookConfigSchema

func GetModuleHookConfigSchema(version string) *spec.Schema

func MergeLayers

func MergeLayers(initial utils.Values, layers ...interface{}) utils.Values

func NewHookConfigFromGoConfig

func NewHookConfigFromGoConfig(input *go_hook.HookConfig) (config.HookConfig, error)

func NewModuleManager added in v1.0.6

func NewModuleManager() *moduleManager

NewModuleManager returns new MainModuleManager

func ReadOpenAPIFiles

func ReadOpenAPIFiles(openApiDir string) (configSchemaBytes, valuesSchemaBytes []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

Types

type AfterAllConfig

type AfterAllConfig struct {
	CommonBindingConfig
	Order float64
}

type AfterDeleteHelmConfig

type AfterDeleteHelmConfig struct {
	CommonBindingConfig
	Order float64
}

type AfterHelmConfig

type AfterHelmConfig struct {
	CommonBindingConfig
	Order float64
}

type ApplyDefaultsForGlobal

type ApplyDefaultsForGlobal struct {
	SchemaType      validation.SchemaType
	ValuesValidator *validation.ValuesValidator
}

func (*ApplyDefaultsForGlobal) Transform

func (a *ApplyDefaultsForGlobal) Transform(values utils.Values) utils.Values

type ApplyDefaultsForModule

type ApplyDefaultsForModule struct {
	ModuleValuesKey string
	SchemaType      validation.SchemaType
	ValuesValidator *validation.ValuesValidator
}

func (*ApplyDefaultsForModule) Transform

func (a *ApplyDefaultsForModule) Transform(values utils.Values) utils.Values

type BeforeAllConfig

type BeforeAllConfig struct {
	CommonBindingConfig
	Order float64
}

type BeforeHelmConfig

type BeforeHelmConfig struct {
	CommonBindingConfig
	Order float64
}

type CommonHook

type CommonHook struct {
	hook.Hook

	GoHook go_hook.GoHook
	// contains filtered or unexported fields
}

func (*CommonHook) GetGoHook

func (h *CommonHook) GetGoHook() go_hook.GoHook

func (*CommonHook) GetName

func (h *CommonHook) GetName() string

func (*CommonHook) GetPath

func (h *CommonHook) GetPath() string

func (*CommonHook) ShouldEnableSchedulesOnStartup added in v1.0.6

func (h *CommonHook) ShouldEnableSchedulesOnStartup() bool

ShouldEnableSchedulesOnStartup returns true for Go hooks if EnableSchedulesOnStartup is set. This flag for schedule hooks that start after onStartup hooks.

func (*CommonHook) SynchronizationNeeded

func (h *CommonHook) SynchronizationNeeded() bool

SynchronizationNeeded is true if there is binding with executeHookOnSynchronization.

func (*CommonHook) WithGoHook

func (c *CommonHook) WithGoHook(h go_hook.GoHook)

func (*CommonHook) WithModuleManager

func (c *CommonHook) WithModuleManager(moduleManager *moduleManager)

type GlobalHook

type GlobalHook struct {
	*CommonHook
	Config *GlobalHookConfig
}

func NewGlobalHook

func NewGlobalHook(name, path string) *GlobalHook

func SearchGlobalGoHooks

func SearchGlobalGoHooks() (hooks []*GlobalHook, err error)

func SearchGlobalHooks

func SearchGlobalHooks(hooksDir string) (hooks []*GlobalHook, err error)

SearchGlobalHooks recursively find all executables in hooksDir. Absent hooksDir is not an error.

func SearchGlobalShellHooks

func SearchGlobalShellHooks(hooksDir string) (hooks []*GlobalHook, err error)

SearchGlobalHooks recursively find all executables in hooksDir. Absent hooksDir is not an error.

func (*GlobalHook) GetConfigDescription

func (gh *GlobalHook) GetConfigDescription() string

func (*GlobalHook) GetConfigValues

func (h *GlobalHook) GetConfigValues() utils.Values

func (*GlobalHook) GetValues

func (h *GlobalHook) GetValues() (utils.Values, error)

func (*GlobalHook) Order

func (g *GlobalHook) Order(binding BindingType) float64

Order return float order number for bindings with order.

func (*GlobalHook) PrepareTmpFilesForHookRun

func (h *GlobalHook) PrepareTmpFilesForHookRun(bindingContext []byte) (tmpFiles map[string]string, err error)

PrepareTmpFilesForHookRun creates temporary files for hook and returns environment variables with paths

func (*GlobalHook) Run

func (h *GlobalHook) Run(bindingType BindingType, bindingContext []BindingContext, logLabels map[string]string) error

func (*GlobalHook) WithConfig

func (g *GlobalHook) WithConfig(configOutput []byte) (err error)

func (*GlobalHook) WithGoConfig

func (g *GlobalHook) WithGoConfig(config *go_hook.HookConfig) (err error)

type GlobalHookConfig

type GlobalHookConfig struct {
	config.HookConfig

	// versioned raw config values
	GlobalV0 *GlobalHookConfigV0
	GlobalV1 *GlobalHookConfigV0

	// effective config values
	BeforeAll *BeforeAllConfig
	AfterAll  *AfterAllConfig
}

GlobalHookConfig is a structure with versioned hook configuration

func NewGlobalHookConfigFromGoConfig

func NewGlobalHookConfigFromGoConfig(input *go_hook.HookConfig) (*GlobalHookConfig, error)

func (*GlobalHookConfig) Bindings

func (c *GlobalHookConfig) Bindings() []BindingType

func (*GlobalHookConfig) BindingsCount

func (c *GlobalHookConfig) BindingsCount() int

func (*GlobalHookConfig) ConvertAfterAll

func (c *GlobalHookConfig) ConvertAfterAll(value interface{}) (*AfterAllConfig, error)

func (*GlobalHookConfig) ConvertAndCheck

func (c *GlobalHookConfig) ConvertAndCheck(data []byte) error

func (*GlobalHookConfig) ConvertAndCheckV0

func (c *GlobalHookConfig) ConvertAndCheckV0() (err error)

func (*GlobalHookConfig) ConvertAndCheckV1

func (c *GlobalHookConfig) ConvertAndCheckV1() (err error)

func (*GlobalHookConfig) ConvertBeforeAll

func (c *GlobalHookConfig) ConvertBeforeAll(value interface{}) (*BeforeAllConfig, error)

func (*GlobalHookConfig) HasBinding

func (c *GlobalHookConfig) HasBinding(binding BindingType) bool

func (*GlobalHookConfig) LoadAndValidate

func (c *GlobalHookConfig) LoadAndValidate(data []byte) error

LoadAndValidate loads config from bytes and validate it. Returns multierror.

type GlobalHookConfigV0

type GlobalHookConfigV0 struct {
	BeforeAll interface{} `json:"beforeAll"`
	AfterAll  interface{} `json:"afterAll"`
}

type Hook

type Hook interface {
	WithModuleManager(moduleManager *moduleManager)
	WithConfig(configOutput []byte) (err error)
	WithGoConfig(config *go_hook.HookConfig) (err error)
	WithHookController(hookController controller.HookController)
	GetName() string
	GetPath() string
	GetGoHook() go_hook.GoHook
	GetValues() (utils.Values, error)
	GetConfigValues() utils.Values
	PrepareTmpFilesForHookRun(bindingContext []byte) (map[string]string, error)
	Order(binding sh_op_types.BindingType) float64
}

type HookExecutor

type HookExecutor struct {
	Hook                  Hook
	Context               []BindingContext
	ConfigVersion         string
	ConfigValuesPath      string
	ValuesPath            string
	ContextPath           string
	ConfigValuesPatchPath string
	ValuesPatchPath       string
	MetricsPath           string
	ObjectPatcher         *object_patch.ObjectPatcher
	KubernetesPatchPath   string
	LogLabels             map[string]string
	Helm                  *helm.Helm
}

func NewHookExecutor

func NewHookExecutor(h Hook, context []BindingContext, configVersion string, objectPatcher *object_patch.ObjectPatcher) *HookExecutor

func (*HookExecutor) Config

func (e *HookExecutor) Config() (configOutput []byte, err error)

func (*HookExecutor) Run

func (e *HookExecutor) Run() (result *HookResult, err error)

func (*HookExecutor) RunGoHook

func (e *HookExecutor) RunGoHook() (result *HookResult, err error)

func (*HookExecutor) WithHelm added in v1.0.6

func (e *HookExecutor) WithHelm(helm *helm.Helm)

func (*HookExecutor) WithLogLabels

func (e *HookExecutor) WithLogLabels(logLabels map[string]string)

type HookResult

type HookResult struct {
	Usage                   *executor.CmdUsage
	Patches                 map[utils.ValuesPatchType]*utils.ValuesPatch
	Metrics                 []metric_operation.MetricOperation
	ObjectPatcherOperations []object_patch.Operation
	BindingActions          []go_hook.BindingAction
}

type KubernetesBindingSynchronizationState

type KubernetesBindingSynchronizationState struct {
	HookName    string
	BindingName string
	Queued      bool
	Done        bool
}

KubernetesBindingSynchronizationState is a state of the single Synchronization task for one kubernetes binding.

func (*KubernetesBindingSynchronizationState) String

type Module

type Module struct {
	Name string
	Path string
	// module values from modules/values.yaml file
	CommonStaticConfig *utils.ModuleConfig
	// module values from modules/<module name>/values.yaml
	StaticConfig *utils.ModuleConfig

	State *ModuleState
	// contains filtered or unexported fields
}

func NewModule

func NewModule(name, path string) *Module

func SearchModules

func SearchModules(modulesDir string) (modules []*Module, err error)

func (*Module) ConfigValues

func (m *Module) ConfigValues() utils.Values

ConfigValues returns raw values from ConfigMap: - global section - module section

func (*Module) Delete

func (m *Module) Delete(logLabels map[string]string) error

Delete removes helm release if it exists and runs afterDeleteHelm hooks. It is a handler for MODULE_DELETE task.

func (*Module) HasKubernetesHooks added in v1.0.5

func (m *Module) HasKubernetesHooks() bool

HasKubernetesHooks is true if module has at least one kubernetes hook.

func (*Module) PrepareValuesYamlFile

func (m *Module) PrepareValuesYamlFile() (string, error)

values.yaml for helm

func (*Module) Run

func (m *Module) Run(logLabels map[string]string) (bool, error)

Run is a phase of module lifecycle that runs onStartup and beforeHelm hooks, helm upgrade --install command and afterHelm hook. It is a handler of task MODULE_RUN

func (*Module) RunOnStartup

func (m *Module) RunOnStartup(logLabels map[string]string) error

Run is a phase of module lifecycle that runs onStartup hooks. It is a handler of task MODULE_RUN

func (*Module) SafeName

func (m *Module) SafeName() string

func (*Module) ShouldRunHelmUpgrade

func (m *Module) ShouldRunHelmUpgrade(helmClient client.HelmClient, releaseName string, checksum string, manifests []manifest.Manifest, logLabels map[string]string) (bool, error)

ShouldRunHelmUpgrade tells if there is a case to run `helm upgrade`:

  • Helm chart in not installed yet.
  • Last release has FAILED status.
  • Checksum in release values not equals to checksum argument.
  • Some resources installed previously are missing.

If all these conditions aren't met, helm upgrade can be skipped.

func (*Module) StaticAndConfigValues

func (m *Module) StaticAndConfigValues() utils.Values

StaticAndConfigValues returns global common static values defined in various values.yaml files and in a ConfigMap and module values defined in various values.yaml files and in a ConfigMap.

func (*Module) StaticAndNewValues

func (m *Module) StaticAndNewValues(newValues utils.Values) utils.Values

StaticAndNewValues returns global values defined in various values.yaml files and in a ConfigMap and module values defined in various values.yaml files merged with newValues.

func (*Module) SynchronizationNeeded

func (m *Module) SynchronizationNeeded() bool

SynchronizationNeeded is true if module has at least one kubernetes hook with executeHookOnSynchronization.

func (*Module) Values

func (m *Module) Values() (utils.Values, error)

Values returns effective values for module hook or helm chart:

global section: static + config + defaults + patches from hooks

module section: static + config + defaults + patches from hooks

func (*Module) ValuesForEnabledScript

func (m *Module) ValuesForEnabledScript(precedingEnabledModules []string) (utils.Values, error)

ValuesForEnabledScript returns effective values for enabled script. There is enabledModules key in global section with previously enabled modules.

func (*Module) ValuesKey

func (m *Module) ValuesKey() string

TODO Transform to a field.

func (*Module) WithHelm added in v1.0.6

func (m *Module) WithHelm(helm *helm.Helm)

func (*Module) WithMetricStorage

func (m *Module) WithMetricStorage(mstor *metric_storage.MetricStorage)

func (*Module) WithModuleManager

func (m *Module) WithModuleManager(moduleManager *moduleManager)

type ModuleHook

type ModuleHook struct {
	*CommonHook
	Module *Module
	Config *ModuleHookConfig
}

func NewModuleHook

func NewModuleHook(name, path string) *ModuleHook

func SearchModuleGoHooks

func SearchModuleGoHooks(module *Module) (hooks []*ModuleHook, err error)

func SearchModuleHooks

func SearchModuleHooks(module *Module) (hooks []*ModuleHook, err error)

func SearchModuleShellHooks

func SearchModuleShellHooks(module *Module) (hooks []*ModuleHook, err error)

func (*ModuleHook) GetConfigDescription

func (m *ModuleHook) GetConfigDescription() string

func (*ModuleHook) GetConfigValues

func (h *ModuleHook) GetConfigValues() utils.Values

func (*ModuleHook) GetValues

func (h *ModuleHook) GetValues() (utils.Values, error)

func (*ModuleHook) Order

func (m *ModuleHook) Order(binding BindingType) float64

Order return float order number for bindings with order.

func (*ModuleHook) PrepareTmpFilesForHookRun

func (h *ModuleHook) PrepareTmpFilesForHookRun(bindingContext []byte) (tmpFiles map[string]string, err error)

PrepareTmpFilesForHookRun creates temporary files for hook and returns environment variables with paths

func (*ModuleHook) Run

func (h *ModuleHook) Run(bindingType BindingType, context []BindingContext, logLabels map[string]string, metricLabels map[string]string) error

func (*ModuleHook) WithConfig

func (m *ModuleHook) WithConfig(configOutput []byte) (err error)

func (*ModuleHook) WithGoConfig

func (m *ModuleHook) WithGoConfig(config *go_hook.HookConfig) (err error)

func (*ModuleHook) WithModule

func (m *ModuleHook) WithModule(module *Module)

type ModuleHookConfig

type ModuleHookConfig struct {
	config.HookConfig

	// versioned raw config values
	ModuleV0 *ModuleHookConfigV0
	ModuleV1 *ModuleHookConfigV0

	// effective config values
	BeforeHelm      *BeforeHelmConfig
	AfterHelm       *AfterHelmConfig
	AfterDeleteHelm *AfterDeleteHelmConfig
}

ModuleHookConfig is a structure with versioned hook configuration

func NewModuleHookConfigFromGoConfig

func NewModuleHookConfigFromGoConfig(input *go_hook.HookConfig) (*ModuleHookConfig, error)

func (*ModuleHookConfig) Bindings

func (c *ModuleHookConfig) Bindings() []BindingType

func (*ModuleHookConfig) BindingsCount

func (c *ModuleHookConfig) BindingsCount() int

func (*ModuleHookConfig) ConvertAfterDeleteHelm

func (c *ModuleHookConfig) ConvertAfterDeleteHelm(value interface{}) (*AfterDeleteHelmConfig, error)

func (*ModuleHookConfig) ConvertAfterHelm

func (c *ModuleHookConfig) ConvertAfterHelm(value interface{}) (*AfterHelmConfig, error)

func (*ModuleHookConfig) ConvertAndCheck

func (c *ModuleHookConfig) ConvertAndCheck(data []byte) error

func (*ModuleHookConfig) ConvertAndCheckV0

func (c *ModuleHookConfig) ConvertAndCheckV0() (err error)

func (*ModuleHookConfig) ConvertAndCheckV1

func (c *ModuleHookConfig) ConvertAndCheckV1() (err error)

func (*ModuleHookConfig) ConvertBeforeHelm

func (c *ModuleHookConfig) ConvertBeforeHelm(value interface{}) (*BeforeHelmConfig, error)

func (*ModuleHookConfig) HasBinding

func (c *ModuleHookConfig) HasBinding(binding BindingType) bool

func (*ModuleHookConfig) LoadAndValidate

func (c *ModuleHookConfig) LoadAndValidate(data []byte) error

LoadAndValidate loads config from bytes and validate it. Returns multierror.

type ModuleHookConfigV0

type ModuleHookConfigV0 struct {
	BeforeHelm      interface{} `json:"beforeHelm"`
	AfterHelm       interface{} `json:"afterHelm"`
	AfterDeleteHelm interface{} `json:"afterDeleteHelm"`
}

type ModuleManager

type ModuleManager interface {
	Init() error
	Start()

	// Dependencies
	WithContext(ctx context.Context)
	WithDirectories(modulesDir string, globalHooksDir string, tempDir string) ModuleManager
	WithKubeEventManager(kube_events_manager.KubeEventsManager)
	WithKubeObjectPatcher(*object_patch.ObjectPatcher)
	WithScheduleManager(schedule_manager.ScheduleManager)
	WithKubeConfigManager(kubeConfigManager kube_config_manager.KubeConfigManager)
	WithHelm(*helm.Helm)
	WithHelmResourcesManager(manager helm_resources_manager.HelmResourcesManager)
	WithMetricStorage(storage *metric_storage.MetricStorage)
	WithHookMetricStorage(storage *metric_storage.MetricStorage)

	GetGlobalHooksInOrder(bindingType BindingType) []string
	GetGlobalHooksNames() []string
	GetGlobalHook(name string) *GlobalHook

	GetEnabledModuleNames() []string
	IsModuleEnabled(moduleName string) bool
	GetModule(name string) *Module
	GetModuleHookNames(moduleName string) []string
	GetModuleHook(name string) *ModuleHook
	GetModuleHooksInOrder(moduleName string, bindingType BindingType) []string

	GlobalStaticAndConfigValues() utils.Values
	GlobalStaticAndNewValues(newValues utils.Values) utils.Values
	GlobalConfigValues() utils.Values
	GlobalValues() (utils.Values, error)
	GlobalValuesPatches() []utils.ValuesPatch
	UpdateGlobalConfigValues(configValues utils.Values)
	UpdateGlobalDynamicValuesPatches(valuesPatch utils.ValuesPatch)

	ModuleConfigValues(moduleName string) utils.Values
	ModuleDynamicValuesPatches(moduleName string) []utils.ValuesPatch
	UpdateModuleConfigValues(moduleName string, configValues utils.Values)
	UpdateModuleDynamicValuesPatches(moduleName string, valuesPatch utils.ValuesPatch)
	ApplyModuleDynamicValuesPatches(moduleName string, values utils.Values) (utils.Values, error)

	GetKubeConfigValid() bool
	SetKubeConfigValid(valid bool)

	// Methods to change module manager's state.
	RefreshStateFromHelmReleases(logLabels map[string]string) (*ModulesState, error)
	HandleNewKubeConfig(kubeConfig *kube_config_manager.KubeConfig) (*ModulesState, error)
	RefreshEnabledState(logLabels map[string]string) (*ModulesState, error)

	// Actions for tasks.
	DeleteModule(moduleName string, logLabels map[string]string) error
	RunModule(moduleName string, onStartup bool, logLabels map[string]string, afterStartupCb func() error) (bool, error)
	RunGlobalHook(hookName string, binding BindingType, bindingContext []BindingContext, logLabels map[string]string) (beforeChecksum string, afterChecksum string, err error)
	RunModuleHook(hookName string, binding BindingType, bindingContext []BindingContext, logLabels map[string]string) (beforeChecksum string, afterChecksum string, err error)

	RegisterModuleHooks(module *Module, logLabels map[string]string) error

	HandleKubeEvent(kubeEvent KubeEvent, createGlobalTaskFn func(*GlobalHook, controller.BindingExecutionInfo), createModuleTaskFn func(*Module, *ModuleHook, controller.BindingExecutionInfo))
	HandleGlobalEnableKubernetesBindings(hookName string, createTaskFn func(*GlobalHook, controller.BindingExecutionInfo)) error
	HandleModuleEnableKubernetesBindings(hookName string, createTaskFn func(*ModuleHook, controller.BindingExecutionInfo)) error
	EnableModuleScheduleBindings(moduleName string)
	DisableModuleHooks(moduleName string)
	HandleScheduleEvent(crontab string, createGlobalTaskFn func(*GlobalHook, controller.BindingExecutionInfo), createModuleTaskFn func(*Module, *ModuleHook, controller.BindingExecutionInfo)) error

	DynamicEnabledChecksum() string
	ApplyEnabledPatch(enabledPatch utils.ValuesPatch) error

	GlobalSynchronizationNeeded() bool
	GlobalSynchronizationState() *SynchronizationState
}

type ModuleRunPhase added in v1.0.5

type ModuleRunPhase string
const (
	// Startup - module is just enabled.
	Startup ModuleRunPhase = "Startup"
	// OnStartupDone - onStartup hooks are done.
	OnStartupDone ModuleRunPhase = "OnStartupDone"
	// QueueSynchronizationTasks - should queue Synchronization tasks.
	QueueSynchronizationTasks ModuleRunPhase = "QueueSynchronizationTasks"
	// WaitForSynchronization - some Synchronization tasks are in queues, should wait for them to finish.
	WaitForSynchronization ModuleRunPhase = "WaitForSynchronization"
	// EnableScheduleBindings - enable schedule binding after Synchronization.
	EnableScheduleBindings ModuleRunPhase = "EnableScheduleBindings"
	// CanRunHelm - module is ready to run its Helm chart.
	CanRunHelm ModuleRunPhase = "CanRunHelm"
)

type ModuleState

type ModuleState struct {
	Enabled bool
	Phase   ModuleRunPhase
	// contains filtered or unexported fields
}

func NewModuleState added in v1.0.5

func NewModuleState() *ModuleState

func (*ModuleState) Synchronization added in v1.0.5

func (s *ModuleState) Synchronization() *SynchronizationState

type ModulesState

type ModulesState struct {
	// All enabled modules.
	AllEnabledModules []string
	// Modules that should be deleted.
	ModulesToDisable []string
	// Modules that was disabled and now are enabled.
	ModulesToEnable []string
	// Modules changed after ConfigMap changes
	ModulesToReload []string
	// Helm releases without module directory (unknown modules).
	ModulesToPurge []string
}

ModulesState determines which modules should be enabled, disabled or reloaded.

type SynchronizationState added in v1.0.5

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

SynchronizationState stores state to track synchronization tasks for kubernetes bindings either for all global hooks or for module's hooks.

func NewSynchronizationState added in v1.0.5

func NewSynchronizationState() *SynchronizationState

func (*SynchronizationState) DebugDumpState added in v1.0.5

func (s *SynchronizationState) DebugDumpState(logEntry *log.Entry)

func (*SynchronizationState) DoneForBinding added in v1.0.5

func (s *SynchronizationState) DoneForBinding(id string)

func (*SynchronizationState) HasQueued added in v1.0.5

func (s *SynchronizationState) HasQueued() bool

func (*SynchronizationState) IsComplete added in v1.0.5

func (s *SynchronizationState) IsComplete() bool

IsComplete returns true if all states are in done status.

func (*SynchronizationState) QueuedForBinding added in v1.0.5

func (s *SynchronizationState) QueuedForBinding(metadata task.HookMetadata)

type ValuesTransform

type ValuesTransform func(values utils.Values) utils.Values

type ValuesTransformer

type ValuesTransformer interface {
	Transform(values utils.Values) utils.Values
}

Directories

Path Synopsis
test

Jump to

Keyboard shortcuts

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