diff --git a/model/relabel/relabel.go b/model/relabel/relabel.go index c7c5439d54..c15049b2b0 100644 --- a/model/relabel/relabel.go +++ b/model/relabel/relabel.go @@ -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) diff --git a/model/relabel/relabel_test.go b/model/relabel/relabel_test.go index 79730055cb..99a4e09f56 100644 --- a/model/relabel/relabel_test.go +++ b/model/relabel/relabel_test.go @@ -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) {