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

79 lines
1.7 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
GetNetwork() 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
}