-
Notifications
You must be signed in to change notification settings - Fork 29
/
provider.go
69 lines (56 loc) · 1.89 KB
/
provider.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
58
59
60
61
62
63
64
65
66
67
68
69
package ruby
import (
"context"
"fmt"
"github.com/choria-io/go-choria/choria"
"github.com/choria-io/go-choria/config"
"github.com/choria-io/go-choria/providers/agent/mcorpc/ddl/agent"
"github.com/choria-io/go-choria/server"
"github.com/sirupsen/logrus"
)
// agents we do not ever wish to load from ruby
var denylist = []string{"rpcutil", "choria_util", "discovery"}
// Provider is a Agent Provider capable of executing old mcollective ruby agents
type Provider struct {
fw *choria.Framework
cfg *config.Config
log *logrus.Entry
agents []*agent.DDL
}
// New creates a new provider that will find ruby agents in the configured libdirs
func New(fw *choria.Framework) *Provider {
p := &Provider{}
p.Initialize(fw, fw.Logger("agents").WithFields(logrus.Fields{"provider": "ruby"}))
return p
}
// Initialize configures the agent provider
func (p *Provider) Initialize(fw *choria.Framework, log *logrus.Entry) {
p.fw = fw
p.cfg = fw.Configuration()
p.log = log.WithFields(logrus.Fields{"provider": "ruby"})
p.loadAgents(fw.Config.Choria.RubyLibdir)
}
// RegisterAgents registers known ruby agents using a shimm agent
func (p *Provider) RegisterAgents(ctx context.Context, mgr server.AgentManager, connector choria.AgentConnector, log *logrus.Entry) error {
for _, ddl := range p.Agents() {
agent, err := NewRubyAgent(ddl, mgr)
if err != nil {
p.log.Errorf("Could not register Ruby agent %s: %s", agent.Name(), err)
continue
}
err = mgr.RegisterAgent(ctx, agent.Name(), agent, connector)
if err != nil {
p.log.Errorf("Could not register Ruby agent %s: %s", agent.Name(), err)
continue
}
}
return nil
}
// Agents provides a list of loaded agent DDLs
func (p *Provider) Agents() []*agent.DDL {
return p.agents
}
// Version reports the version for this provider
func (p *Provider) Version() string {
return fmt.Sprintf("%s version %s", p.PluginName(), p.PluginVersion())
}