diff --git a/CHANGELOG.asciidoc b/CHANGELOG.asciidoc index a5943dae2b7..32a10a60de0 100644 --- a/CHANGELOG.asciidoc +++ b/CHANGELOG.asciidoc @@ -226,6 +226,7 @@ https://github.com/elastic/beats/compare/v6.4.0...v6.5.0[View commits] - Add Beats Central Management {pull}8559[8559] - Report configured queue type. {pull}8091[8091] - Enable `host` and `cloud` metadata processors by default. {pull}8596[8596] +- Autodiscovery no longer requires that the `condition` field be set. If left unset all configs will be matched. {pull}9029[9029] *Filebeat* diff --git a/libbeat/autodiscover/providers/docker/docker.go b/libbeat/autodiscover/providers/docker/docker.go index 4f9478c4652..38aad087469 100644 --- a/libbeat/autodiscover/providers/docker/docker.go +++ b/libbeat/autodiscover/providers/docker/docker.go @@ -40,7 +40,7 @@ type Provider struct { builders autodiscover.Builders appenders autodiscover.Appenders watcher docker.Watcher - templates *template.Mapper + templates template.Mapper stop chan interface{} startListener bus.Listener stopListener bus.Listener diff --git a/libbeat/autodiscover/providers/jolokia/jolokia.go b/libbeat/autodiscover/providers/jolokia/jolokia.go index 57f764ae917..880ca5e0c84 100644 --- a/libbeat/autodiscover/providers/jolokia/jolokia.go +++ b/libbeat/autodiscover/providers/jolokia/jolokia.go @@ -42,7 +42,7 @@ type Provider struct { bus bus.Bus builders autodiscover.Builders appenders autodiscover.Appenders - templates *template.Mapper + templates template.Mapper discovery DiscoveryProber } diff --git a/libbeat/autodiscover/providers/kubernetes/kubernetes.go b/libbeat/autodiscover/providers/kubernetes/kubernetes.go index c2f3b133c93..2b611b25afc 100644 --- a/libbeat/autodiscover/providers/kubernetes/kubernetes.go +++ b/libbeat/autodiscover/providers/kubernetes/kubernetes.go @@ -41,7 +41,7 @@ type Provider struct { bus bus.Bus watcher kubernetes.Watcher metagen kubernetes.MetaGenerator - templates *template.Mapper + templates template.Mapper builders autodiscover.Builders appenders autodiscover.Appenders } diff --git a/libbeat/autodiscover/template/config.go b/libbeat/autodiscover/template/config.go index 5f5359b76e0..c1a2c2b6c51 100644 --- a/libbeat/autodiscover/template/config.go +++ b/libbeat/autodiscover/template/config.go @@ -42,20 +42,20 @@ type MapperSettings []*struct { } // NewConfigMapper builds a template Mapper from given settings -func NewConfigMapper(configs MapperSettings) (*Mapper, error) { - var mapper Mapper +func NewConfigMapper(configs MapperSettings) (mapper Mapper, err error) { for _, c := range configs { - condition, err := conditions.NewCondition(c.ConditionConfig) - if err != nil { - return nil, err + condMap := &ConditionMap{Configs: c.Configs} + if c.ConditionConfig != nil { + condMap.Condition, err = conditions.NewCondition(c.ConditionConfig) + if err != nil { + return nil, err + } } - mapper = append(mapper, &ConditionMap{ - Condition: condition, - Configs: c.Configs, - }) + + mapper = append(mapper, condMap) } - return &mapper, nil + return mapper, nil } // Event adapts MapStr to processors.ValuesMap interface @@ -71,11 +71,13 @@ func (e Event) GetValue(key string) (interface{}, error) { } // GetConfig returns a matching Config if any, nil otherwise -func (c *Mapper) GetConfig(event bus.Event) []*common.Config { +func (c Mapper) GetConfig(event bus.Event) []*common.Config { var result []*common.Config - for _, mapping := range *c { - if mapping.Configs != nil && !mapping.Condition.Check(Event(event)) { + for _, mapping := range c { + // An empty condition matches everything + conditionOk := mapping.Condition == nil || mapping.Condition.Check(Event(event)) + if mapping.Configs != nil && !conditionOk { continue } diff --git a/libbeat/autodiscover/template/config_test.go b/libbeat/autodiscover/template/config_test.go index 3e0342b7598..8bf55476847 100644 --- a/libbeat/autodiscover/template/config_test.go +++ b/libbeat/autodiscover/template/config_test.go @@ -60,6 +60,16 @@ func TestConfigsMapping(t *testing.T) { }, expected: []*common.Config{config}, }, + // No condition + { + mapping: ` +- config: + - correct: config`, + event: bus.Event{ + "foo": 3, + }, + expected: []*common.Config{config}, + }, } for _, test := range tests { @@ -98,5 +108,6 @@ func TestNilConditionConfig(t *testing.T) { } _, err = NewConfigMapper(mappings) - assert.Error(t, err) + assert.NoError(t, err) + assert.Nil(t, mappings[0].ConditionConfig) } diff --git a/libbeat/docs/shared-autodiscover.asciidoc b/libbeat/docs/shared-autodiscover.asciidoc index e0e63080a4e..b53d85a5a29 100644 --- a/libbeat/docs/shared-autodiscover.asciidoc +++ b/libbeat/docs/shared-autodiscover.asciidoc @@ -12,8 +12,8 @@ config file. To enable autodiscover, you specify a list of providers. === Providers Autodiscover providers work by watching for events on the system and translating those events into internal autodiscover -events with a common format. When you configure the provider, you can use fields from the autodiscover event to set -conditions that, when met, launch specific configurations. +events with a common format. When you configure the provider, you can optionally use fields from the autodiscover event +to set conditions that, when met, launch specific configurations. On start, {beatname_uc} will scan existing containers and launch the proper configs for them. Then it will watch for new start/stop events. This ensures you don't need to worry about state, but only define your desired configs.