github.com/choria-io/go-choria@v0.28.1-0.20240416190746-b3bf9c7d5a45/providers/agent/mcorpc/ruby/provider.go (about)

     1  // Copyright (c) 2020-2021, R.I. Pienaar and the Choria Project contributors
     2  //
     3  // SPDX-License-Identifier: Apache-2.0
     4  
     5  package ruby
     6  
     7  import (
     8  	"context"
     9  	"fmt"
    10  
    11  	"github.com/choria-io/go-choria/config"
    12  	"github.com/choria-io/go-choria/inter"
    13  	"github.com/choria-io/go-choria/providers/agent/mcorpc/ddl/agent"
    14  	"github.com/choria-io/go-choria/server"
    15  	"github.com/sirupsen/logrus"
    16  )
    17  
    18  // agents we do not ever wish to load from ruby
    19  var denylist = []string{"rpcutil", "choria_util", "discovery"}
    20  
    21  // Provider is a Agent Provider capable of executing old mcollective ruby agents
    22  type Provider struct {
    23  	cfg    *config.Config
    24  	log    *logrus.Entry
    25  	agents []*agent.DDL
    26  }
    27  
    28  // Initialize configures the agent provider
    29  func (p *Provider) Initialize(cfg *config.Config, log *logrus.Entry) {
    30  	p.cfg = cfg
    31  	p.log = log.WithFields(logrus.Fields{"provider": "ruby"})
    32  
    33  	p.loadAgents(p.cfg.Choria.RubyLibdir)
    34  }
    35  
    36  // RegisterAgents registers known ruby agents using a shimm agent
    37  func (p *Provider) RegisterAgents(ctx context.Context, mgr server.AgentManager, connector inter.AgentConnector, log *logrus.Entry) error {
    38  	for _, ddl := range p.Agents() {
    39  		agent, err := NewRubyAgent(ddl, mgr)
    40  		if err != nil {
    41  			p.log.Errorf("Could not register Ruby agent %s: %s", agent.Name(), err)
    42  			continue
    43  		}
    44  
    45  		err = mgr.RegisterAgent(ctx, agent.Name(), agent, connector)
    46  		if err != nil {
    47  			p.log.Errorf("Could not register Ruby agent %s: %s", agent.Name(), err)
    48  			continue
    49  		}
    50  	}
    51  
    52  	return nil
    53  }
    54  
    55  // Agents provides a list of loaded agent DDLs
    56  func (p *Provider) Agents() []*agent.DDL {
    57  	return p.agents
    58  }
    59  
    60  // Version reports the version for this provider
    61  func (p *Provider) Version() string {
    62  	return fmt.Sprintf("%s version %s", p.PluginName(), p.PluginVersion())
    63  }