feat(outputs.websocket): Allow specifying secrets in headers (#14836)
This commit is contained in:
parent
f005bfaa1c
commit
da56ebdc1c
|
|
@ -15,6 +15,14 @@ See the [CONFIGURATION.md][CONFIGURATION.md] for more details.
|
||||||
|
|
||||||
[CONFIGURATION.md]: ../../../docs/CONFIGURATION.md#plugins
|
[CONFIGURATION.md]: ../../../docs/CONFIGURATION.md#plugins
|
||||||
|
|
||||||
|
## Secret-store support
|
||||||
|
|
||||||
|
This plugin supports secrets from secret-stores for the `headers` option.
|
||||||
|
See the [secret-store documentation][SECRETSTORE] for more details on how
|
||||||
|
to use them.
|
||||||
|
|
||||||
|
[SECRETSTORE]: ../../../docs/CONFIGURATION.md#secret-store-secrets
|
||||||
|
|
||||||
## Configuration
|
## Configuration
|
||||||
|
|
||||||
```toml @sample.conf
|
```toml @sample.conf
|
||||||
|
|
|
||||||
|
|
@ -30,13 +30,13 @@ const (
|
||||||
|
|
||||||
// WebSocket can output to WebSocket endpoint.
|
// WebSocket can output to WebSocket endpoint.
|
||||||
type WebSocket struct {
|
type WebSocket struct {
|
||||||
URL string `toml:"url"`
|
URL string `toml:"url"`
|
||||||
ConnectTimeout config.Duration `toml:"connect_timeout"`
|
ConnectTimeout config.Duration `toml:"connect_timeout"`
|
||||||
WriteTimeout config.Duration `toml:"write_timeout"`
|
WriteTimeout config.Duration `toml:"write_timeout"`
|
||||||
ReadTimeout config.Duration `toml:"read_timeout"`
|
ReadTimeout config.Duration `toml:"read_timeout"`
|
||||||
Headers map[string]string `toml:"headers"`
|
Headers map[string]*config.Secret `toml:"headers"`
|
||||||
UseTextFrames bool `toml:"use_text_frames"`
|
UseTextFrames bool `toml:"use_text_frames"`
|
||||||
Log telegraf.Logger `toml:"-"`
|
Log telegraf.Logger `toml:"-"`
|
||||||
proxy.HTTPProxy
|
proxy.HTTPProxy
|
||||||
proxy.Socks5ProxyConfig
|
proxy.Socks5ProxyConfig
|
||||||
tls.ClientConfig
|
tls.ClientConfig
|
||||||
|
|
@ -92,7 +92,13 @@ func (w *WebSocket) Connect() error {
|
||||||
|
|
||||||
headers := http.Header{}
|
headers := http.Header{}
|
||||||
for k, v := range w.Headers {
|
for k, v := range w.Headers {
|
||||||
headers.Set(k, v)
|
secret, err := v.Get()
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("getting header secret %q failed: %w", k, err)
|
||||||
|
}
|
||||||
|
|
||||||
|
headers.Set(k, secret.String())
|
||||||
|
secret.Destroy()
|
||||||
}
|
}
|
||||||
|
|
||||||
conn, resp, err := dialer.Dial(w.URL, headers)
|
conn, resp, err := dialer.Dial(w.URL, headers)
|
||||||
|
|
|
||||||
|
|
@ -101,7 +101,8 @@ func initWebSocket(s *testServer) *WebSocket {
|
||||||
w := newWebSocket()
|
w := newWebSocket()
|
||||||
w.Log = testutil.Logger{}
|
w.Log = testutil.Logger{}
|
||||||
w.URL = s.URL
|
w.URL = s.URL
|
||||||
w.Headers = map[string]string{testHeaderName: testHeaderValue}
|
headerSecret := config.NewSecret([]byte(testHeaderValue))
|
||||||
|
w.Headers = map[string]*config.Secret{testHeaderName: &headerSecret}
|
||||||
w.SetSerializer(newTestSerializer())
|
w.SetSerializer(newTestSerializer())
|
||||||
return w
|
return w
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue