Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fail with error when autodiscover providers have no defined configs #13078

Merged
merged 8 commits into from
Sep 13, 2019
1 change: 1 addition & 0 deletions CHANGELOG.next.asciidoc
Original file line number Diff line number Diff line change
Expand Up @@ -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]
Expand Down
23 changes: 16 additions & 7 deletions libbeat/autodiscover/providers/docker/docker.go
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down Expand Up @@ -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{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,8 @@ import (
"testing"
"time"

"github.com/elastic/beats/libbeat/autodiscover/template"

"github.com/gofrs/uuid"
"github.com/stretchr/testify/assert"

Expand All @@ -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)
Expand Down
18 changes: 14 additions & 4 deletions libbeat/autodiscover/providers/jolokia/jolokia.go
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down Expand Up @@ -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{
Expand All @@ -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{
Expand Down
23 changes: 16 additions & 7 deletions libbeat/autodiscover/providers/kubernetes/kubernetes.go
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down Expand Up @@ -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)
Expand All @@ -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{
Expand Down