master
go 49 lines 1.3 KB
Raw
1 // SPDX-License-Identifier: GPL-3.0-or-later
2
3 package secretsctl
4
5 import (
6 "github.com/netdata/netdata/go/plugins/plugin/agent/secrets/secretstore"
7 "github.com/netdata/netdata/go/plugins/plugin/framework/dyncfg"
8 )
9
10 func (c *Controller) publishInitialConfig(rawCfg secretstore.Config) {
11 cfg, prepErr := c.prepareConfigCandidate(rawCfg)
12 c.handler.RememberDiscoveredConfig(cfg)
13
14 if existing, ok := c.lookupInternal(cfg.ExposedKey()); ok {
15 if shouldKeepExisting(cfg, existing) {
16 return
17 }
18 if existing.Status == dyncfg.StatusRunning || existing.Status == dyncfg.StatusFailed {
19 c.cb.Stop(existing.Cfg)
20 c.cb.TakeCommandMessage()
21 }
22 }
23
24 entry := &dyncfg.Entry[secretstore.Config]{Cfg: cfg, Status: dyncfg.StatusFailed}
25 if prepErr == nil {
26 if err := c.cb.Start(cfg); err == nil {
27 entry.Status = dyncfg.StatusRunning
28 }
29 }
30
31 c.exposed.Add(entry)
32 c.handler.NotifyJobCreate(cfg, entry.Status)
33 }
34
35 func (c *Controller) prepareConfigCandidate(cfg secretstore.Config) (secretstore.Config, error) {
36 return cfg, c.validateConfig(cfg)
37 }
38
39 func shouldKeepExisting(cfg secretstore.Config, existing *dyncfg.Entry[secretstore.Config]) bool {
40 sp, ep := cfg.SourceTypePriority(), existing.Cfg.SourceTypePriority()
41 if ep > sp {
42 return true
43 }
44 if ep < sp {
45 return false
46 }
47
48 return existing.Status == dyncfg.StatusRunning
49 }