Adding upstream version 1.34.4.
Signed-off-by: Daniel Baumann <daniel@debian.org>
This commit is contained in:
parent
e393c3af3f
commit
4978089aab
4963 changed files with 677545 additions and 0 deletions
101
plugins/secretstores/os/os.go
Normal file
101
plugins/secretstores/os/os.go
Normal file
|
@ -0,0 +1,101 @@
|
|||
//go:build darwin || linux || windows
|
||||
|
||||
//go:generate ../../../tools/readme_config_includer/generator
|
||||
package os
|
||||
|
||||
import (
|
||||
_ "embed"
|
||||
"errors"
|
||||
"fmt"
|
||||
|
||||
"github.com/99designs/keyring"
|
||||
|
||||
"github.com/influxdata/telegraf"
|
||||
"github.com/influxdata/telegraf/config"
|
||||
"github.com/influxdata/telegraf/plugins/secretstores"
|
||||
)
|
||||
|
||||
//go:embed sample.conf
|
||||
var sampleConfig string
|
||||
|
||||
type OS struct {
|
||||
ID string `toml:"id"`
|
||||
Keyring string `toml:"keyring"`
|
||||
Collection string `toml:"collection"`
|
||||
Dynamic bool `toml:"dynamic"`
|
||||
Password config.Secret `toml:"password"`
|
||||
|
||||
ring keyring.Keyring
|
||||
}
|
||||
|
||||
func (*OS) SampleConfig() string {
|
||||
return sampleConfig
|
||||
}
|
||||
|
||||
// Init initializes all internals of the secret-store
|
||||
func (o *OS) Init() error {
|
||||
defer o.Password.Destroy()
|
||||
|
||||
if o.ID == "" {
|
||||
return errors.New("id missing")
|
||||
}
|
||||
|
||||
// Set defaults
|
||||
if o.Keyring == "" {
|
||||
o.Keyring = "telegraf"
|
||||
}
|
||||
|
||||
// Setup the actual keyring
|
||||
cfg, err := o.createKeyringConfig()
|
||||
if err != nil {
|
||||
return fmt.Errorf("getting keyring config failed: %w", err)
|
||||
}
|
||||
kr, err := keyring.Open(cfg)
|
||||
if err != nil {
|
||||
return fmt.Errorf("opening keyring failed: %w", err)
|
||||
}
|
||||
o.ring = kr
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// Get searches for the given key and return the secret
|
||||
func (o *OS) Get(key string) ([]byte, error) {
|
||||
item, err := o.ring.Get(key)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return item.Data, nil
|
||||
}
|
||||
|
||||
// Set sets the given secret for the given key
|
||||
func (o *OS) Set(key, value string) error {
|
||||
item := keyring.Item{
|
||||
Key: key,
|
||||
Data: []byte(value),
|
||||
}
|
||||
|
||||
return o.ring.Set(item)
|
||||
}
|
||||
|
||||
// List lists all known secret keys
|
||||
func (o *OS) List() ([]string, error) {
|
||||
return o.ring.Keys()
|
||||
}
|
||||
|
||||
// GetResolver returns a function to resolve the given key.
|
||||
func (o *OS) GetResolver(key string) (telegraf.ResolveFunc, error) {
|
||||
resolver := func() ([]byte, bool, error) {
|
||||
s, err := o.Get(key)
|
||||
return s, o.Dynamic, err
|
||||
}
|
||||
return resolver, nil
|
||||
}
|
||||
|
||||
// Register the secret-store on load.
|
||||
func init() {
|
||||
secretstores.Add("os", func(id string) telegraf.SecretStore {
|
||||
return &OS{ID: id}
|
||||
})
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue