Browse Source

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>
pull/8285/head
Alexey Shumkin 4 years ago
parent
commit
73ddf603af
No known key found for this signature in database
GPG Key ID: 48EFA0A7C5DF6943
  1. 5
      config/testdata/kubernetes_selectors_pod.good.yml
  2. 3
      discovery/kubernetes/kubernetes.go

5
config/testdata/kubernetes_selectors_pod.good.yml vendored

@ -6,3 +6,8 @@ scrape_configs:
- role: "pod"
label: "foo=bar"
field: "metadata.status=Running"
- role: pod
selectors:
- role: "pod"
label: "foo in (bar,baz)"
field: "metadata.status=Running"

3
discovery/kubernetes/kubernetes.go

@ -33,6 +33,7 @@ import (
"k8s.io/api/networking/v1beta1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/fields"
"k8s.io/apimachinery/pkg/labels"
"k8s.io/apimachinery/pkg/runtime"
"k8s.io/apimachinery/pkg/watch"
"k8s.io/client-go/kubernetes"
@ -203,7 +204,7 @@ func (c *SDConfig) UnmarshalYAML(unmarshal func(interface{}) error) error {
if err != nil {
return err
}
_, err = fields.ParseSelector(selector.Label)
_, err = labels.Parse(selector.Label)
if err != nil {
return err
}

Loading…
Cancel
Save