summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorIlya Mashchenko <ilya@netdata.cloud>2024-03-14 13:04:25 +0200
committerGitHub <noreply@github.com>2024-03-14 13:04:25 +0200
commitd5384db76074f6344a6fa9396f22393e3b0f420a (patch)
treeb1ddcb9e6a21f717c929154bdda16dcb883aaaaa
parentb7ff918d9161de68ef37e94e9845a81beba64b9a (diff)
go.d.plugin: sd compose: allow multi config template (#17157)
-rw-r--r--src/go/collectors/go.d.plugin/agent/discovery/sd/pipeline/compose.go39
-rw-r--r--src/go/collectors/go.d.plugin/agent/discovery/sd/pipeline/compose_test.go4
-rw-r--r--src/go/collectors/go.d.plugin/config/go.d/sd/net_listeners.conf15
3 files changed, 49 insertions, 9 deletions
diff --git a/src/go/collectors/go.d.plugin/agent/discovery/sd/pipeline/compose.go b/src/go/collectors/go.d.plugin/agent/discovery/sd/pipeline/compose.go
index 68274ab182..de2ed21b8f 100644
--- a/src/go/collectors/go.d.plugin/agent/discovery/sd/pipeline/compose.go
+++ b/src/go/collectors/go.d.plugin/agent/discovery/sd/pipeline/compose.go
@@ -4,6 +4,7 @@ package pipeline
import (
"bytes"
+ "errors"
"fmt"
"text/template"
@@ -70,14 +71,13 @@ func (c *configComposer) compose(tgt model.Target) []confgroup.Config {
continue
}
- var cfg confgroup.Config
-
- if err := yaml.Unmarshal(c.buf.Bytes(), &cfg); err != nil {
- c.Warningf("failed on yaml unmarshalling: %v", err)
+ cfgs, err := c.parseTemplateData(c.buf.Bytes())
+ if err != nil {
+ c.Warningf("failed to parse template data: %v", err)
continue
}
- configs = append(configs, cfg)
+ configs = append(configs, cfgs...)
}
}
@@ -87,6 +87,35 @@ func (c *configComposer) compose(tgt model.Target) []confgroup.Config {
return configs
}
+func (c *configComposer) parseTemplateData(bs []byte) ([]confgroup.Config, error) {
+ var data any
+ if err := yaml.Unmarshal(bs, &data); err != nil {
+ return nil, err
+ }
+
+ type (
+ single = map[any]any
+ multi = []any
+ )
+
+ switch data.(type) {
+ case single:
+ var cfg confgroup.Config
+ if err := yaml.Unmarshal(bs, &cfg); err != nil {
+ return nil, err
+ }
+ return []confgroup.Config{cfg}, nil
+ case multi:
+ var cfgs []confgroup.Config
+ if err := yaml.Unmarshal(bs, &cfgs); err != nil {
+ return nil, err
+ }
+ return cfgs, nil
+ default:
+ return nil, errors.New("unknown config format")
+ }
+}
+
func newComposeRules(cfg []ComposeRuleConfig) ([]*composeRule, error) {
var rules []*composeRule
diff --git a/src/go/collectors/go.d.plugin/agent/discovery/sd/pipeline/compose_test.go b/src/go/collectors/go.d.plugin/agent/discovery/sd/pipeline/compose_test.go
index ccbb072bf7..fa758bcd32 100644
--- a/src/go/collectors/go.d.plugin/agent/discovery/sd/pipeline/compose_test.go
+++ b/src/go/collectors/go.d.plugin/agent/discovery/sd/pipeline/compose_test.go
@@ -38,7 +38,8 @@ func TestConfigComposer_compose(t *testing.T) {
name: {{ .Name }}-5
- selector: "bar6"
template: |
- name: {{ .Name }}-6
+ - name: {{ .Name }}-6
+ - name: {{ .Name }}-7
`
tests := map[string]struct {
target model.Target
@@ -70,6 +71,7 @@ func TestConfigComposer_compose(t *testing.T) {
{"name": "mock-4"},
{"name": "mock-5"},
{"name": "mock-6"},
+ {"name": "mock-7"},
},
},
}
diff --git a/src/go/collectors/go.d.plugin/config/go.d/sd/net_listeners.conf b/src/go/collectors/go.d.plugin/config/go.d/sd/net_listeners.conf
index 80a97ebde9..fdd54d72e0 100644
--- a/src/go/collectors/go.d.plugin/config/go.d/sd/net_listeners.conf
+++ b/src/go/collectors/go.d.plugin/config/go.d/sd/net_listeners.conf
@@ -278,9 +278,18 @@ compose:
dsn: netdata@tcp(127.0.0.1:{{.Port}})/
- selector: "nginx"
template: |
- module: nginx
- name: local
- url: http://localhost:{{.Port}}/stub_status
+ - module: nginx
+ name: local
+ url: http://localhost:{{.Port}}/stub_status
+ - module: nginx
+ name: local
+ url: http://localhost:{{.Port}}/basic_status
+ - module: nginx
+ name: local
+ url: http://localhost:{{.Port}}/nginx_status
+ - module: nginx
+ name: local
+ url: http://localhost:{{.Port}}/status
- selector: "ntpd"
template: |
module: ntpd