-
Notifications
You must be signed in to change notification settings - Fork 29
/
agent_providers.go
57 lines (45 loc) · 1.49 KB
/
agent_providers.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
package server
import (
"context"
"sync"
"github.com/sirupsen/logrus"
"github.com/choria-io/go-choria/choria"
)
// AgentProvider is capable of adding agents into a running instance
type AgentProvider interface {
Initialize(fw *choria.Framework, log *logrus.Entry)
RegisterAgents(ctx context.Context, mgr AgentManager, connector choria.InstanceConnector, log *logrus.Entry) error
Version() string
}
var additionalAgentProviders []AgentProvider
var aapmu *sync.Mutex
func init() {
additionalAgentProviders = []AgentProvider{}
aapmu = &sync.Mutex{}
}
// RegisterAdditionalAgentProvider registers an agent provider as a subsystem
// capable of delivering new types of agent like the legacy mcollective ruby compatible
// ones
//
// Custom builders can use this to extend choria with new agent capabilities
func RegisterAdditionalAgentProvider(p AgentProvider) {
aapmu.Lock()
defer aapmu.Unlock()
additionalAgentProviders = append(additionalAgentProviders, p)
choria.BuildInfo().RegisterAgentProvider(p.Version())
}
func (srv *Instance) setupAdditionalAgentProviders(ctx context.Context) error {
aapmu.Lock()
providers := make([]AgentProvider, len(additionalAgentProviders))
copy(providers, additionalAgentProviders)
aapmu.Unlock()
for _, provider := range providers {
provider.Initialize(srv.fw, srv.log)
srv.log.Infof("Activating Agent Provider: %s", provider.Version())
err := provider.RegisterAgents(ctx, srv.agents, srv.connector, srv.log)
if err != nil {
return err
}
}
return nil
}