Merge pull request #17372 from roidelapluie/roidelapluie/relabeling

relabeling: Fix labelmap action validation with legacy metric name scheme
This commit is contained in:
George Krajcsovits 2025-10-22 11:01:19 +02:00 committed by GitHub
commit 34360d3068
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 23 additions and 1 deletions

View File

@ -145,7 +145,13 @@ func (c *Config) Validate(nameValidationScheme model.ValidationScheme) error {
// UTF-8 allows ${} characters, so standard validation allow $variables by default.
// TODO(bwplotka): Relabelling users cannot put $ and ${<...>} characters in metric names or values.
// Design escaping mechanism to allow that, once valid use case appears.
return c.NameValidationScheme.IsValidLabelName(value)
switch c.NameValidationScheme {
case model.UTF8Validation:
return c.NameValidationScheme.IsValidLabelName(value)
default:
// For legacy validation, use the legacy regex that allows $variables.
return relabelTargetLegacy.MatchString(value)
}
}
if c.Action == Replace && varInRegexTemplate(c.TargetLabel) && !isValidLabelNameWithRegexVarFn(c.TargetLabel) {
return fmt.Errorf("%q is invalid 'target_label' for %s action", c.TargetLabel, c.Action)

View File

@ -831,6 +831,22 @@ func TestRelabelValidate(t *testing.T) {
NameValidationScheme: model.UTF8Validation,
},
},
{
config: Config{
Regex: MustNewRegexp("__meta_kubernetes_pod_label_(strimzi_io_.+)"),
Action: LabelMap,
Replacement: "$1",
NameValidationScheme: model.LegacyValidation,
},
},
{
config: Config{
Regex: MustNewRegexp("__meta_(.+)"),
Action: LabelMap,
Replacement: "${1}",
NameValidationScheme: model.LegacyValidation,
},
},
}
for i, test := range tests {
t.Run(strconv.Itoa(i), func(t *testing.T) {