fix: ensure templates access merged values via .Environment.Values
This commit fixes a regression in the CLIOverrides integration where templates accessing .Environment.Values couldn't see CLI override values. Changes: - Remove CLIOverrides-into-Values merge from Merge() to keep proper layering order (Defaults → Values → CLIOverrides) in GetMergedValues() - Update NewEnvironmentTemplateData to set envCopy.Values to the merged values, ensuring templates see the same values via both .Values and .Environment.Values This ensures: - Issue #2353: Layer arrays still replace entirely (Sparse strategy) - Issue #2281: CLI sparse arrays still merge element-by-element - Templates can access CLI overrides via .Environment.Values Signed-off-by: Aditya Menon <amenon@canarytechnologies.com>
This commit is contained in:
parent
13192704c4
commit
0016ff59e7
|
|
@ -85,9 +85,8 @@ func (e *Environment) Merge(other *Environment) (*Environment, error) {
|
|||
if e == nil {
|
||||
if other != nil {
|
||||
copy := other.DeepCopy()
|
||||
// Also merge CLIOverrides into Values for template access via .Environment.Values
|
||||
copy.Values = maputil.MergeMaps(copy.Values, copy.CLIOverrides,
|
||||
maputil.MergeOptions{ArrayStrategy: maputil.ArrayMergeStrategyMerge})
|
||||
// Don't merge CLIOverrides into Values here - keep them separate.
|
||||
// The proper merge happens in GetMergedValues() with correct layering.
|
||||
return ©, nil
|
||||
}
|
||||
return nil, nil
|
||||
|
|
@ -101,15 +100,14 @@ func (e *Environment) Merge(other *Environment) (*Environment, error) {
|
|||
if other.KubeContext != "" {
|
||||
copy.KubeContext = other.KubeContext
|
||||
}
|
||||
// Merge Values - layer values replace arrays
|
||||
// Merge Values - layer values replace arrays (using default Sparse strategy)
|
||||
copy.Values = maputil.MergeMaps(copy.Values, other.Values)
|
||||
copy.Defaults = maputil.MergeMaps(copy.Defaults, other.Defaults)
|
||||
// Merge CLIOverrides using element-by-element array merging
|
||||
copy.CLIOverrides = maputil.MergeMaps(copy.CLIOverrides, other.CLIOverrides,
|
||||
maputil.MergeOptions{ArrayStrategy: maputil.ArrayMergeStrategyMerge})
|
||||
// Also merge CLIOverrides into Values for template access via .Environment.Values
|
||||
copy.Values = maputil.MergeMaps(copy.Values, copy.CLIOverrides,
|
||||
maputil.MergeOptions{ArrayStrategy: maputil.ArrayMergeStrategyMerge})
|
||||
// Don't merge CLIOverrides into Values here - keep them separate.
|
||||
// The proper merge happens in GetMergedValues() with correct layering.
|
||||
}
|
||||
return ©, nil
|
||||
}
|
||||
|
|
|
|||
|
|
@ -20,8 +20,13 @@ type EnvironmentTemplateData struct {
|
|||
StateValues *map[string]any
|
||||
}
|
||||
|
||||
func NewEnvironmentTemplateData(environment environment.Environment, namespace string, values map[string]any) *EnvironmentTemplateData {
|
||||
d := EnvironmentTemplateData{environment, namespace, values, nil}
|
||||
func NewEnvironmentTemplateData(env environment.Environment, namespace string, values map[string]any) *EnvironmentTemplateData {
|
||||
// Create a copy of the environment with merged values for template access.
|
||||
// This ensures templates accessing .Environment.Values see the same merged values
|
||||
// (Defaults + Values + CLIOverrides) as templates accessing .Values directly.
|
||||
envCopy := env
|
||||
envCopy.Values = values
|
||||
d := EnvironmentTemplateData{envCopy, namespace, values, nil}
|
||||
d.StateValues = &d.Values
|
||||
return &d
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue