mirror of
https://github.com/prometheus/prometheus.git
synced 2024-11-13 17:14:05 -08:00
discovery/kubernetes: Fix valid label selector causing config error
Label selector can be "set-based"(https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#set-based-requirement) but such a selector causes Prometheus start failure with the "unexpected error: parsing YAML file ...: invalid selector: 'foo in (bar,baz)'; can't understand 'baz)'"-like error. This is caused by the `fields.ParseSelector(string)` function that simply splits an expression as a CSV-list, so a comma confuses such a parsing method and lead to the error. Use `labels.Parse(string)` to use a valid lexer to parse a selector expression. Closes #8284. Signed-off-by: Alexey Shumkin <Alex.Crezoff@gmail.com>
This commit is contained in:
parent
c08009139a
commit
73ddf603af
|
@ -6,3 +6,8 @@ scrape_configs:
|
||||||
- role: "pod"
|
- role: "pod"
|
||||||
label: "foo=bar"
|
label: "foo=bar"
|
||||||
field: "metadata.status=Running"
|
field: "metadata.status=Running"
|
||||||
|
- role: pod
|
||||||
|
selectors:
|
||||||
|
- role: "pod"
|
||||||
|
label: "foo in (bar,baz)"
|
||||||
|
field: "metadata.status=Running"
|
||||||
|
|
|
@ -33,6 +33,7 @@ import (
|
||||||
"k8s.io/api/networking/v1beta1"
|
"k8s.io/api/networking/v1beta1"
|
||||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
"k8s.io/apimachinery/pkg/fields"
|
"k8s.io/apimachinery/pkg/fields"
|
||||||
|
"k8s.io/apimachinery/pkg/labels"
|
||||||
"k8s.io/apimachinery/pkg/runtime"
|
"k8s.io/apimachinery/pkg/runtime"
|
||||||
"k8s.io/apimachinery/pkg/watch"
|
"k8s.io/apimachinery/pkg/watch"
|
||||||
"k8s.io/client-go/kubernetes"
|
"k8s.io/client-go/kubernetes"
|
||||||
|
@ -203,7 +204,7 @@ func (c *SDConfig) UnmarshalYAML(unmarshal func(interface{}) error) error {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
_, err = fields.ParseSelector(selector.Label)
|
_, err = labels.Parse(selector.Label)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue