open-consul/test/integration/consul-container/libs/cluster/agent.go

78 lines
1.6 KiB
Go

package cluster
import (
"context"
"github.com/testcontainers/testcontainers-go"
"github.com/hashicorp/consul/api"
"github.com/hashicorp/consul/test/integration/consul-container/libs/utils"
)
// Agent represent a Consul agent abstraction
type Agent interface {
GetIP() string
GetClient() *api.Client
NewClient(string, bool) (*api.Client, error)
GetName() string
GetAgentName() string
GetPod() testcontainers.Container
ClaimAdminPort() (int, error)
GetConfig() Config
GetInfo() AgentInfo
GetDatacenter() string
IsServer() bool
RegisterTermination(func() error)
Terminate() error
TerminateAndRetainPod(bool) error
Upgrade(ctx context.Context, config Config) error
Exec(ctx context.Context, cmd []string) (string, error)
DataDir() string
}
// Config is a set of configurations required to create a Agent
//
// Constructed by (Builder).ToAgentConfig()
type Config struct {
ScratchDir string
CertVolume string
CACert string
JSON string
ConfigBuilder *ConfigBuilder
Image string
Version string
Cmd []string
LogConsumer testcontainers.LogConsumer
// service defaults
UseAPIWithTLS bool // TODO
UseGRPCWithTLS bool
ACLEnabled bool
}
func (c *Config) DockerImage() string {
return utils.DockerImage(c.Image, c.Version)
}
// Clone copies everything. It is the caller's job to replace fields that
// should be unique.
func (c Config) Clone() Config {
c2 := c
if c.Cmd != nil {
c2.Cmd = make([]string, len(c.Cmd))
for i, v := range c.Cmd {
c2.Cmd[i] = v
}
}
return c2
}
// TODO: refactor away
type AgentInfo struct {
CACertFile string
UseTLSForAPI bool
UseTLSForGRPC bool
}