Skip to content
Merged
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
35 changes: 34 additions & 1 deletion ssm/parameters.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import (
"encoding/json"
"fmt"
goPath "path"
"strings"

"github.com/apex/log"
"github.com/aws/aws-sdk-go/aws"
Expand Down Expand Up @@ -236,13 +237,20 @@ func GetParameters(names, paths, plainNames, plainPaths []string, transformation
localPaths = ExpandArgs(paths)
localPlainPaths = ExpandArgs(plainPaths)
}

allParameters, err := getAllParameters(localNames, localPaths, localPlainNames, localPlainPaths, strict, recursive)
if err != nil {
return parameters, err
}

parameters = make(map[string]string)
for _, parameter := range allParameters {
err = mergo.Merge(&parameters, &parameter, mergo.WithOverride)
// Normalize keys to uppercase before merging to solve Viper case sensitivity issue
normalized := make(map[string]string, len(parameter))
for k, v := range parameter {
normalized[strings.ToUpper(k)] = v
}
err = mergo.Merge(&parameters, &normalized, mergo.WithOverride)
if err != nil {
log.WithError(err).Fatal("Can't merge maps")
}
Expand All @@ -252,6 +260,30 @@ func GetParameters(names, paths, plainNames, plainPaths []string, transformation
log.WithError(err).Fatal("Can't expand vars")
}

// Normalize transformation rule keys to uppercase to match parameter keys
for _, transformation := range transformationsList {
switch t := transformation.(type) {
case *transformations.RenameTransformation:
normalizedRule := make(map[string]string, len(t.Rule))
for key, value := range t.Rule {
normalizedRule[strings.ToUpper(key)] = value
}
t.Rule = normalizedRule
case *transformations.TemplateTransformation:
normalizedRule := make(map[string]string, len(t.Rule))
for key, value := range t.Rule {
normalizedRule[strings.ToUpper(key)] = value
}
t.Rule = normalizedRule
case *transformations.DeleteTransformation:
for i, key := range t.Rule {
t.Rule[i] = strings.ToUpper(key)
}
}
// Note: TrimTransformation config keys (trim, starts_with) are NOT normalized
// because they are configuration instructions, not parameter names
}

for _, transformation := range transformationsList {
parameters, err = transformation.Transform(parameters)
if err != nil {
Expand All @@ -260,3 +292,4 @@ func GetParameters(names, paths, plainNames, plainPaths []string, transformation
}
return
}

Loading