 Documentation
      ¶
      Documentation
      ¶
    
    
  
    
  
    Index ¶
- Constants
- func AddCommonFlagsToCommand(c *cobra.Command, o *Options)
- func CollectExtraTelemetryData(environ []string) map[string]string
- type AgentAPI
- func (a *AgentAPI) GetAgentKey(ctx context.Context) (api.AgentKey, error)
- func (a *AgentAPI) GetGitLabExternalURL(ctx context.Context) (url.URL, error)
- func (a *AgentAPI) HandleProcessingError(ctx context.Context, log *slog.Logger, msg string, err error, ...)
- func (a *AgentAPI) MakeGitLabRequest(ctx context.Context, path string, opts ...modagent.GitLabRequestOption) (*modagent.GitLabResponse, error)
- func (a *AgentAPI) TryGetAgentKey() (api.AgentKey, bool)
 
- type AgentSharedAPI
- type CancelRunWhenLeaderFunc
- type ConfigurationWatcher
- type FactoriesLayer
- type InMemAPIServer
- type LeaderElector
- type LeaderModule
- type LeaderRunner
- type LeaderRunnerInterface
- type ListenAPIServer
- type ModuleRunner
- type ModuleRunnerInterface
- type ModuleStartFunc
- type ModuleStopFunc
- type ModuleStopWaitFunc
- type ObsTools
- type Options
- func (o *Options) Complete(envVarAgentToken, defaultLogLevel, defaultGRPCLogLevel string) error
- func (o *Options) ConstructKASConnection(ot *ObsTools, userAgent string, agentType api.AgentType) (*grpc.ClientConn, error)
- func (o *Options) ConstructObservabilityTools() (*ObsTools, func() error, error)
- func (o *Options) NewRPCAPIFactory() modshared.RPCAPIFactory
 
- type PrivateAPIServer
- type Runner
Constants ¶
const ( AgentName = "gitlab-agent" DefaultAPIListenNetwork = "tcp" DefaultPrivateAPIListenNetwork = "tcp" DefaultPrivateAPIListenAddress = ":8081" DefaultObservabilityListenNetwork = "tcp" DefaultObservabilityListenAddress = ":8080" )
Variables ¶
This section is empty.
Functions ¶
func AddCommonFlagsToCommand ¶
Types ¶
type AgentAPI ¶
type AgentAPI struct {
	ModuleName        string
	AgentKey          *syncz.ValueHolder[api.AgentKey]
	GitLabExternalURL *syncz.ValueHolder[url.URL]
	Client            gitlab_access_rpc.GitlabAccessClient
}
    AgentAPI is an implementation of modagent.API.
func (*AgentAPI) GetAgentKey ¶
func (*AgentAPI) GetGitLabExternalURL ¶
func (*AgentAPI) HandleProcessingError ¶
func (*AgentAPI) MakeGitLabRequest ¶
func (a *AgentAPI) MakeGitLabRequest(ctx context.Context, path string, opts ...modagent.GitLabRequestOption) (*modagent.GitLabResponse, error)
type AgentSharedAPI ¶
type AgentSharedAPI struct {
}
    type CancelRunWhenLeaderFunc ¶
type CancelRunWhenLeaderFunc func()
type ConfigurationWatcher ¶
ConfigurationWatcher provides a mechanism to receive new configuration objects.
type FactoriesLayer ¶
type FactoriesLayer[CF, CM any] struct { Log *slog.Logger Config func(name string) CF LR LeaderRunnerInterface[CM] MR ModuleRunnerInterface[CM] Factories []modagent.Factory[CF, CM] }
func (*FactoriesLayer[CF, CM]) ToStageFuncs ¶
func (l *FactoriesLayer[CF, CM]) ToStageFuncs() ([]stager.StageFunc, error)
type InMemAPIServer ¶
type InMemAPIServer struct {
	Server        *grpc.Server
	InMemConn     *grpc.ClientConn
	InMemListener net.Listener
}
    InMemAPIServer represents agentk API that kas can talk to when running in agentk->kas tunnel mode.
func NewInMemAPIServer ¶
func NewInMemAPIServer(ot *ObsTools, factory modshared.RPCAPIFactory, v protovalidate.Validator) (*InMemAPIServer, error)
func (*InMemAPIServer) Close ¶
func (s *InMemAPIServer) Close() error
func (*InMemAPIServer) Start ¶
func (s *InMemAPIServer) Start(stage stager.Stage)
type LeaderElector ¶
type LeaderModule ¶
type LeaderModule struct {
	// contains filtered or unexported fields
}
    type LeaderRunner ¶
type LeaderRunner[CM any] struct { // contains filtered or unexported fields }
func NewLeaderRunner ¶
func NewLeaderRunner[CM any](leaderElector LeaderElector) *LeaderRunner[CM]
func (*LeaderRunner[CM]) Run ¶
func (r *LeaderRunner[CM]) Run(ctx context.Context)
Run starts the leader election process and starts and stops the modules depending on if it is the leader or not.
func (*LeaderRunner[CM]) RunWhenLeader ¶
func (r *LeaderRunner[CM]) RunWhenLeader(ctx context.Context, startFn ModuleStartFunc, stopFn ModuleStopFunc) (CancelRunWhenLeaderFunc, error)
RunWhenLeader registers a module start and stop function with the leader runner. The function that is returned must be used to unregister the leader module.
func (*LeaderRunner[CM]) WrapModule ¶
func (r *LeaderRunner[CM]) WrapModule(m modagent.Module[CM]) modagent.Module[CM]
type LeaderRunnerInterface ¶
type ListenAPIServer ¶
type ListenAPIServer struct {
	Log                          *slog.Logger
	ListenNetwork, ListenAddress string
	CertFile, KeyFile            string
	AuxCancel context.CancelFunc
	Server    *grpc.Server
}
    ListenAPIServer represents agentk API that kas can talk to. It can be either: - in-memory. This is the case when agentk connects to kas. - exposed on an address. This is the case when kas connects to agentk.
func NewListenAPIServer ¶
func NewListenAPIServer(log *slog.Logger, ot *ObsTools, factory modshared.RPCAPIFactory, listenNetwork, listenAddress, certFile, keyFile, jwtSecretFile, jwtIssuer, jwtAudience, mtlsClientCAFile string, mtlsEnabled bool, v protovalidate.Validator) (*ListenAPIServer, error)
func (*ListenAPIServer) Start ¶
func (s *ListenAPIServer) Start(stage stager.Stage)
type ModuleRunner ¶
type ModuleRunner[CD, CM any] struct { Log *slog.Logger Watcher ConfigurationWatcher[CD] Data2Config func(CD) (CM, []any) // second return value is extra attributes for the logger // contains filtered or unexported fields }
func (*ModuleRunner[CD, CM]) RegisterModules ¶
func (r *ModuleRunner[CD, CM]) RegisterModules(modules ...modagent.Module[CM]) []stager.StageFunc
RegisterModules registers modules with the runner. It returns staged functions to run modules.
func (*ModuleRunner[CD, CM]) RunConfigurationRefresh ¶
func (r *ModuleRunner[CD, CM]) RunConfigurationRefresh(ctx context.Context) error
type ModuleRunnerInterface ¶
type ModuleStartFunc ¶
type ModuleStartFunc func()
type ModuleStopFunc ¶
type ModuleStopFunc func() ModuleStopWaitFunc
type ModuleStopWaitFunc ¶
type ObsTools ¶
type ObsTools struct {
	Reg              *prometheus.Registry
	TP               trace.TracerProvider
	MP               otelmetric.MeterProvider
	P                propagation.TextMapPropagator
	StreamProm       grpc.StreamServerInterceptor
	UnaryProm        grpc.UnaryServerInterceptor
	StreamClientProm grpc.StreamClientInterceptor
	UnaryClientProm  grpc.UnaryClientInterceptor
}
    type Options ¶
type Options struct {
	Log               *slog.Logger
	LogLevel          *slog.LevelVar
	GRPCHandler       slog.Handler
	GRPCLogLevel      *slog.LevelVar
	Validator         protovalidate.Validator
	AgentKey          *syncz.ValueHolder[api.AgentKey]
	GitLabExternalURL *syncz.ValueHolder[url.URL]
	KASAddress       string
	KASCACertFile    string
	KASHeaders       []string
	KASSkipTLSVerify bool
	KASTLSServerName string
	ObservabilityListenNetwork string
	ObservabilityListenAddress string
	ObservabilityCertFile      string
	ObservabilityKeyFile       string
	TokenFile  string
	AgentToken api.AgentToken
}
    func (*Options) ConstructKASConnection ¶
func (*Options) ConstructObservabilityTools ¶
func (*Options) NewRPCAPIFactory ¶
func (o *Options) NewRPCAPIFactory() modshared.RPCAPIFactory
type PrivateAPIServer ¶
type PrivateAPIServer struct {
	Log            *slog.Logger
	ListenNetwork  string
	ListenAddress  string
	OwnURL         grpctool.URLTarget
	OwnURLScheme   string
	OwnURLPort     string
	Server         grpctool.GRPCServer
	ListenServer   *grpc.Server
	InMemServer    *grpc.Server
	InMemListener  net.Listener
	AgentPool      grpctool.PoolInterface[grpctool.URLTarget]
	AgentPoolClose func()
	AuxCancel      context.CancelFunc
}
    func NewPrivateAPIServer ¶
func NewPrivateAPIServer(log *slog.Logger, ot *ObsTools, errRep errz.ErrReporter, factory modshared.RPCAPIFactory, v protovalidate.Validator, userAgent, listenNetwork, listenAddress, certFile, keyFile, caCertFile, jwtAuthFile string) (*PrivateAPIServer, error)
func (*PrivateAPIServer) Close ¶
func (s *PrivateAPIServer) Close() error
func (*PrivateAPIServer) Start ¶
func (s *PrivateAPIServer) Start(stage stager.Stage)
type Runner ¶
type Runner interface {
	// RunWhenLeader registers the given start and stop functions for this module with the leader runner.
	// When the leader runner is elected as the leader it will execute the start function and
	// when the leader runner lost the leadership it will execute the stop function.
	// The start function must be able to be triggered multiple times (with intermediate stop executions)
	// without having to rely on a new agent configuration.
	// The function that is returned must be used to unregister the module
	// from the leader runner in case a shutdown is initiated or a previously registered start function
	// became invalid, for example because a new agent configuration turned out to be invalid.
	RunWhenLeader(ctx context.Context, startFn ModuleStartFunc, stopFunc ModuleStopFunc) (CancelRunWhenLeaderFunc, error)
}