diff --git a/CHANGELOG.next.asciidoc b/CHANGELOG.next.asciidoc index 246c248789be..48be335de467 100644 --- a/CHANGELOG.next.asciidoc +++ b/CHANGELOG.next.asciidoc @@ -239,6 +239,7 @@ https://github.com/elastic/beats/compare/v7.0.0-alpha2...master[Check the HEAD d - Add aws overview dashboard. {issue}11007[11007] {pull}12175[12175] - Add `decompress_gzip_field` processor. {pull}12733[12733] - Add `timestamp` processor for parsing time fields. {pull}12699[12699] +- Fail with error when autodiscover providers have no defined configs. {pull}13078[13078] - Add a check so alias creation explicitely fails if there is an index with the same name. {pull}13070[13070] - Update kubernetes watcher to use official client-go libraries. {pull}13051[13051] - Add support for unix epoch time values in the `timestamp` processor. {pull}13319[13319] diff --git a/libbeat/autodiscover/providers/docker/docker.go b/libbeat/autodiscover/providers/docker/docker.go index a37ff7569349..e0febbdf8803 100644 --- a/libbeat/autodiscover/providers/docker/docker.go +++ b/libbeat/autodiscover/providers/docker/docker.go @@ -20,10 +20,11 @@ package docker import ( - "errors" + "fmt" "time" "github.com/gofrs/uuid" + "github.com/pkg/errors" "github.com/elastic/beats/libbeat/autodiscover" "github.com/elastic/beats/libbeat/autodiscover/builder" @@ -60,37 +61,45 @@ type Provider struct { // AutodiscoverBuilder builds and returns an autodiscover provider func AutodiscoverBuilder(bus bus.Bus, uuid uuid.UUID, c *common.Config) (autodiscover.Provider, error) { cfgwarn.Beta("The docker autodiscover is beta") + + errWrap := func(err error) error { + return errors.Wrap(err, "error setting up docker autodiscover provider") + } + config := defaultConfig() err := c.Unpack(&config) if err != nil { - return nil, err + return nil, errWrap(err) } watcher, err := docker.NewWatcher(config.Host, config.TLS, false) if err != nil { - return nil, err + return nil, errWrap(err) } mapper, err := template.NewConfigMapper(config.Templates) if err != nil { - return nil, err + return nil, errWrap(err) + } + if len(mapper) == 0 && !config.Hints.Enabled() { + return nil, errWrap(fmt.Errorf("no configs or hints defined for autodiscover provider")) } builders, err := autodiscover.NewBuilders(config.Builders, config.Hints) if err != nil { - return nil, err + return nil, errWrap(err) } appenders, err := autodiscover.NewAppenders(config.Appenders) if err != nil { - return nil, err + return nil, errWrap(err) } start := watcher.ListenStart() stop := watcher.ListenStop() if err := watcher.Start(); err != nil { - return nil, err + return nil, errWrap(err) } return &Provider{ diff --git a/libbeat/autodiscover/providers/docker/docker_integration_test.go b/libbeat/autodiscover/providers/docker/docker_integration_test.go index ccba884df9ee..fd5c4f6f86e5 100644 --- a/libbeat/autodiscover/providers/docker/docker_integration_test.go +++ b/libbeat/autodiscover/providers/docker/docker_integration_test.go @@ -23,6 +23,8 @@ import ( "testing" "time" + "github.com/elastic/beats/libbeat/autodiscover/template" + "github.com/gofrs/uuid" "github.com/stretchr/testify/assert" @@ -45,6 +47,9 @@ func TestDockerStart(t *testing.T) { bus := bus.New("test") config := defaultConfig() config.CleanupTimeout = 0 + + s := &template.MapperSettings{nil, nil} + config.Templates = *s provider, err := AutodiscoverBuilder(bus, UUID, common.MustNewConfigFrom(config)) if err != nil { t.Fatal(err) diff --git a/libbeat/autodiscover/providers/jolokia/jolokia.go b/libbeat/autodiscover/providers/jolokia/jolokia.go index 728040d3e43b..f938e4a379a9 100644 --- a/libbeat/autodiscover/providers/jolokia/jolokia.go +++ b/libbeat/autodiscover/providers/jolokia/jolokia.go @@ -18,7 +18,10 @@ package jolokia import ( + "fmt" + "github.com/gofrs/uuid" + "github.com/pkg/errors" "github.com/elastic/beats/libbeat/autodiscover" "github.com/elastic/beats/libbeat/autodiscover/template" @@ -50,10 +53,14 @@ type Provider struct { // AutodiscoverBuilder builds a Jolokia Discovery autodiscover provider, it fails if // there is some problem with the configuration func AutodiscoverBuilder(bus bus.Bus, uuid uuid.UUID, c *common.Config) (autodiscover.Provider, error) { + errWrap := func(err error) error { + return errors.Wrap(err, "error setting up jolokia autodiscover provider") + } + config := defaultConfig() err := c.Unpack(&config) if err != nil { - return nil, err + return nil, errWrap(err) } discovery := &Discovery{ @@ -63,17 +70,20 @@ func AutodiscoverBuilder(bus bus.Bus, uuid uuid.UUID, c *common.Config) (autodis mapper, err := template.NewConfigMapper(config.Templates) if err != nil { - return nil, err + return nil, errWrap(err) + } + if len(mapper) == 0 { + return nil, errWrap(fmt.Errorf("no configs defined for autodiscover provider")) } builders, err := autodiscover.NewBuilders(config.Builders, nil) if err != nil { - return nil, err + return nil, errWrap(err) } appenders, err := autodiscover.NewAppenders(config.Appenders) if err != nil { - return nil, err + return nil, errWrap(err) } return &Provider{ diff --git a/libbeat/autodiscover/providers/kubernetes/kubernetes.go b/libbeat/autodiscover/providers/kubernetes/kubernetes.go index d0de3f314f5c..6f257cfa2978 100644 --- a/libbeat/autodiscover/providers/kubernetes/kubernetes.go +++ b/libbeat/autodiscover/providers/kubernetes/kubernetes.go @@ -24,6 +24,7 @@ import ( "time" "github.com/gofrs/uuid" + "github.com/pkg/errors" "github.com/elastic/beats/libbeat/autodiscover" "github.com/elastic/beats/libbeat/autodiscover/builder" @@ -56,20 +57,25 @@ type Provider struct { // AutodiscoverBuilder builds and returns an autodiscover provider func AutodiscoverBuilder(bus bus.Bus, uuid uuid.UUID, c *common.Config) (autodiscover.Provider, error) { cfgwarn.Beta("The kubernetes autodiscover is beta") + + errWrap := func(err error) error { + return errors.Wrap(err, "error setting up kubernetes autodiscover provider") + } + config := defaultConfig() err := c.Unpack(&config) if err != nil { - return nil, err + return nil, errWrap(err) } client, err := kubernetes.GetKubernetesClient(config.KubeConfig) if err != nil { - return nil, err + return nil, errWrap(err) } metagen, err := kubernetes.NewMetaGenerator(c) if err != nil { - return nil, err + return nil, errWrap(err) } config.Host = kubernetes.DiscoverKubernetesNode(config.Host, kubernetes.IsInCluster(config.KubeConfig), client) @@ -80,22 +86,25 @@ func AutodiscoverBuilder(bus bus.Bus, uuid uuid.UUID, c *common.Config) (autodis Namespace: config.Namespace, }) if err != nil { - return nil, fmt.Errorf("kubernetes: Couldn't create watcher for %T due to error %+v", &kubernetes.Pod{}, err) + return nil, errWrap(fmt.Errorf("couldn't create watcher for %T due to error %+v", &kubernetes.Pod{}, err)) } mapper, err := template.NewConfigMapper(config.Templates) if err != nil { - return nil, err + return nil, errWrap(err) + } + if len(mapper) == 0 && !config.Hints.Enabled() { + return nil, errWrap(fmt.Errorf("no configs or hints defined for autodiscover provider")) } builders, err := autodiscover.NewBuilders(config.Builders, config.Hints) if err != nil { - return nil, err + return nil, errWrap(err) } appenders, err := autodiscover.NewAppenders(config.Appenders) if err != nil { - return nil, err + return nil, errWrap(err) } p := &Provider{