Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 12 additions & 6 deletions pkg/module_manager/models/hooks/dependency.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import (
gohook "github.com/flant/addon-operator/pkg/module_manager/go_hook"
"github.com/flant/addon-operator/pkg/module_manager/models/hooks/kind"
"github.com/flant/addon-operator/pkg/utils"
"github.com/flant/addon-operator/pkg/values/validation/defaults"
bindingcontext "github.com/flant/shell-operator/pkg/hook/binding_context"
"github.com/flant/shell-operator/pkg/hook/config"
"github.com/flant/shell-operator/pkg/hook/controller"
Expand All @@ -32,19 +33,24 @@ type kubeObjectPatcher interface {
ExecuteOperations([]sdkpkg.PatchCollectorOperation) error
}

type defaultsOverrideApplier interface {
ApplyDefaultsOverride(overrides []defaults.Override)
}

type globalValuesGetter interface {
GetValues(bool) utils.Values
GetConfigValues(bool) utils.Values
}

// HookExecutionDependencyContainer container for all hook execution dependencies
type HookExecutionDependencyContainer struct {
HookMetricsStorage hooksMetricsStorage
KubeConfigManager kubeConfigManager
KubeObjectPatcher kubeObjectPatcher
MetricStorage metricStorage
GlobalValuesGetter globalValuesGetter
EnvironmentManager *environmentmanager.Manager
HookMetricsStorage hooksMetricsStorage
KubeConfigManager kubeConfigManager
KubeObjectPatcher kubeObjectPatcher
MetricStorage metricStorage
GlobalValuesGetter globalValuesGetter
DefaultsOverrideApplier defaultsOverrideApplier
EnvironmentManager *environmentmanager.Manager
}

type executableHook interface {
Expand Down
10 changes: 10 additions & 0 deletions pkg/module_manager/models/modules/basic.go
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ import (
"github.com/flant/addon-operator/pkg/module_manager/models/hooks/kind"
"github.com/flant/addon-operator/pkg/utils"
"github.com/flant/addon-operator/pkg/values/validation"
"github.com/flant/addon-operator/pkg/values/validation/defaults"
"github.com/flant/addon-operator/sdk"
shapp "github.com/flant/shell-operator/pkg/app"
"github.com/flant/shell-operator/pkg/executor"
Expand Down Expand Up @@ -117,6 +118,10 @@ func (bm *BasicModule) WithLogger(logger *log.Logger) {
bm.logger = logger
}

func (bm *BasicModule) SetDefaultsOverrideContracts(contracts []defaults.OverrideContract) {
bm.valuesStorage.SetDefaultsOverrideContracts(contracts)
}

func (bm *BasicModule) SetCritical(value bool) {
bm.critical = value
}
Expand Down Expand Up @@ -1344,6 +1349,11 @@ func (bm *BasicModule) GetSchemaStorage() *validation.SchemaStorage {
return bm.valuesStorage.schemaStorage
}

// ApplyDefaultsOverride overrides values schema openAPI spec defaults
func (bm *BasicModule) ApplyDefaultsOverride(override defaults.Override) {
bm.valuesStorage.ApplyDefaultsOverride(override)
}

// ApplyNewSchemaStorage updates schema storage of the basic module
func (bm *BasicModule) ApplyNewSchemaStorage(schema *validation.SchemaStorage) error {
return bm.valuesStorage.applyNewSchemaStorage(schema)
Expand Down
3 changes: 3 additions & 0 deletions pkg/module_manager/models/modules/global.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ import (
"github.com/flant/addon-operator/pkg/module_manager/models/hooks/kind"
"github.com/flant/addon-operator/pkg/utils"
"github.com/flant/addon-operator/pkg/values/validation"
"github.com/flant/addon-operator/pkg/values/validation/defaults"
"github.com/flant/addon-operator/sdk"
bindingcontext "github.com/flant/shell-operator/pkg/hook/binding_context"
sh_op_types "github.com/flant/shell-operator/pkg/hook/types"
Expand Down Expand Up @@ -306,6 +307,8 @@ func (gm *GlobalModule) executeHook(ctx context.Context, h *hooks.GlobalHook, bi
if err != nil {
return fmt.Errorf("apply enabled patches from global values patch: %v", err)
}

gm.dc.DefaultsOverrideApplier.ApplyDefaultsOverride(defaults.GetOverridesByPatch(*valuesPatch))
}

return nil
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import (

"github.com/flant/addon-operator/pkg/utils"
"github.com/flant/addon-operator/pkg/values/validation"
"github.com/flant/addon-operator/pkg/values/validation/defaults"
)

type transformer interface {
Expand All @@ -27,7 +28,7 @@ func (a *applyDefaults) Transform(values utils.Values) utils.Values {
}

res := values.Copy()
validation.ApplyDefaults(res, s)
defaults.ApplyDefaults(res, s)

return res
}
22 changes: 20 additions & 2 deletions pkg/module_manager/models/modules/values_storage.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import (

"github.com/flant/addon-operator/pkg/utils"
"github.com/flant/addon-operator/pkg/values/validation"
"github.com/flant/addon-operator/pkg/values/validation/defaults"
)

/*
Expand All @@ -27,6 +28,8 @@ type ValuesStorage struct {
schemaStorage *validation.SchemaStorage
moduleName string

overridePolicy *defaults.OverridePolicy

// we are locking the whole storage on any concurrent operation
// because it could be called from concurrent hooks (goroutines) and we will have a deadlock on RW mutex
lock sync.Mutex
Expand Down Expand Up @@ -66,14 +69,18 @@ func NewValuesStorage(moduleName string, staticValues utils.Values, configBytes,
schemaStorage: schemaStorage,
moduleName: moduleName,
}
err = vs.calculateResultValues()
if err != nil {

if err = vs.calculateResultValues(); err != nil {
return nil, fmt.Errorf("critical error occurred with calculating values for %q: %w", moduleName, err)
}

return vs, nil
}

func (vs *ValuesStorage) SetDefaultsOverrideContracts(contracts []defaults.OverrideContract) {
vs.overridePolicy = defaults.BuildOverridePolicy(contracts...)
}

func (vs *ValuesStorage) openapiDefaultsTransformer(schemaType validation.SchemaType) transformer {
return &applyDefaults{
SchemaType: schemaType,
Expand Down Expand Up @@ -268,3 +275,14 @@ func (vs *ValuesStorage) getValuesPatches() []utils.ValuesPatch {
func (vs *ValuesStorage) GetSchemaStorage() *validation.SchemaStorage {
return vs.schemaStorage
}

func (vs *ValuesStorage) ApplyDefaultsOverride(override defaults.Override) {
vs.lock.Lock()
defer vs.lock.Unlock()

scheme := vs.schemaStorage.Schemas[validation.ValuesSchema]
vs.overridePolicy.ApplyOverride(scheme, override)

// error could be only if values patch fails to apply
_ = vs.calculateResultValues()
}
12 changes: 12 additions & 0 deletions pkg/module_manager/module_manager.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,10 @@

"github.com/deckhouse/deckhouse/pkg/log"
metricsstorage "github.com/deckhouse/deckhouse/pkg/metrics-storage"
"github.com/flant/addon-operator/pkg/values/validation/defaults"

Check failure on line 16 in pkg/module_manager/module_manager.go

View workflow job for this annotation

GitHub Actions / Run linter

File is not properly formatted (gci)
"github.com/hashicorp/go-multierror"
"go.opentelemetry.io/otel"

Check failure on line 19 in pkg/module_manager/module_manager.go

View workflow job for this annotation

GitHub Actions / Run linter

File is not properly formatted (goimports)
"github.com/flant/addon-operator/pkg"
"github.com/flant/addon-operator/pkg/app"
"github.com/flant/addon-operator/pkg/helm"
Expand Down Expand Up @@ -1525,6 +1526,17 @@
return mm.environmentManager != nil
}

func (mm *ModuleManager) ApplyDefaultsOverride(overrides []defaults.Override) {
for _, override := range overrides {
basic := mm.GetModule(override.Target)
if basic == nil {
return
}

basic.ApplyDefaultsOverride(override)
}
}

// queueHasPendingModuleRunTaskWithStartup returns true if queue has pending tasks
// with the type "ModuleRun" related to the module "moduleName" and DoModuleStartup is set to true.
func queueHasPendingModuleRunTaskWithStartup(q *queue.TaskQueue, moduleName string) bool {
Expand Down
9 changes: 5 additions & 4 deletions pkg/module_manager/module_manager_hooks.go
Original file line number Diff line number Diff line change
Expand Up @@ -85,10 +85,11 @@ func (mm *ModuleManager) loadGlobalValues() (*globalValues, error) {
func (mm *ModuleManager) registerGlobalModule(globalValues utils.Values, configBytes, valuesBytes []byte) error {
// load and registry global hooks
dep := hooks.HookExecutionDependencyContainer{
HookMetricsStorage: mm.dependencies.HookMetricStorage,
KubeConfigManager: mm.dependencies.KubeConfigManager,
KubeObjectPatcher: mm.dependencies.KubeObjectPatcher,
MetricStorage: mm.dependencies.MetricStorage,
HookMetricsStorage: mm.dependencies.HookMetricStorage,
KubeConfigManager: mm.dependencies.KubeConfigManager,
KubeObjectPatcher: mm.dependencies.KubeObjectPatcher,
MetricStorage: mm.dependencies.MetricStorage,
DefaultsOverrideApplier: mm,
}

gm, err := modules.NewGlobalModule(mm.GlobalHooksDir, globalValues, &dep, configBytes, valuesBytes, shapp.DebugKeepTmpFiles, modules.WithLogger(mm.logger.Named("global-module")))
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package validation
package defaults

import (
"github.com/go-openapi/spec"
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package validation_test
package defaults_test

import (
"testing"
Expand All @@ -11,6 +11,7 @@ import (
"github.com/flant/addon-operator/pkg/module_manager/models/modules"
"github.com/flant/addon-operator/pkg/utils"
"github.com/flant/addon-operator/pkg/values/validation"
"github.com/flant/addon-operator/pkg/values/validation/defaults"
)

func Test_ApplyDefaults(t *testing.T) {
Expand Down Expand Up @@ -72,7 +73,7 @@ properties:

s := valueStorage.GetSchemaStorage().Schemas[validation.ConfigValuesSchema]

changed := validation.ApplyDefaults(moduleValues["moduleName"], s)
changed := defaults.ApplyDefaults(moduleValues["moduleName"], s)

g.Expect(changed).Should(BeTrue())
g.Expect(moduleValues["moduleName"]).Should(HaveKey("param2"))
Expand Down Expand Up @@ -162,7 +163,7 @@ properties:

s := valueStorage.GetSchemaStorage().Schemas[validation.ConfigValuesSchema]

changed := validation.ApplyDefaults(moduleValues["moduleName"], s)
changed := defaults.ApplyDefaults(moduleValues["moduleName"], s)

validator := validate.NewSchemaValidator(s, nil, "", strfmt.Default)

Expand Down
Loading
Loading