Documentation
¶
Index ¶
- Constants
- Variables
- func BaseDir(dataDir string) string
- func ConfigPath(dataDir string, tag names.Tag) string
- func Dir(dataDir string, tag names.Tag) string
- func LogFilename(c Config) string
- func MachineLockLogFilename(c Config) string
- func WriteSystemIdentityFile(c Config) error
- type APIHostPortsSetter
- type Agent
- type AgentConfigParams
- type Config
- type ConfigMutator
- type ConfigRenderer
- type ConfigSetter
- type ConfigSetterWriter
- func NewAgentConfig(configParams AgentConfigParams) (ConfigSetterWriter, error)
- func NewStateMachineConfig(configParams AgentConfigParams, serverInfo controller.ControllerAgentInfo) (ConfigSetterWriter, error)
- func ParseConfigData(configData []byte) (ConfigSetterWriter, error)
- func ReadConfig(configFilePath string) (ConfigSetterWriter, error)
- type ConfigWriter
- type Paths
Constants ¶
const ( // BootstrapNonce is used as a nonce for the initial controller machine. BootstrapNonce = "user-admin:bootstrap" // BootstrapControllerId is the ID of the initial controller. BootstrapControllerId = "0" )
const ( ProviderType = "PROVIDER_TYPE" ContainerType = "CONTAINER_TYPE" Namespace = "NAMESPACE" AgentServiceName = "AGENT_SERVICE_NAME" MongoOplogSize = "MONGO_OPLOG_SIZE" NUMACtlPreference = "NUMA_CTL_PREFERENCE" // LoggingOverride will set the logging for this agent to the value // specified. Model configuration will be ignored and this value takes // precidence for the agent. LoggingOverride = "LOGGING_OVERRIDE" LogSinkLoggerBufferSize = "LOGSINK_LOGGER_BUFFER_SIZE" LogSinkLoggerFlushInterval = "LOGSINK_LOGGER_FLUSH_INTERVAL" LogSinkRateLimitBurst = "LOGSINK_RATELIMIT_BURST" LogSinkRateLimitRefill = "LOGSINK_RATELIMIT_REFILL" // CharmRevisionUpdateInterval controls how often the // charm revision update worker runs. CharmRevisionUpdateInterval = "CHARM_REVISION_UPDATE_INTERVAL" )
const SystemIdentity = "system-identity"
SystemIdentity is the name of the file where the environment SSH key is kept.
Variables ¶
var ( // DefaultPaths defines the default paths for an agent. DefaultPaths = Paths{ DataDir: dataDir, TransientDataDir: transientDataDir, LogDir: path.Join(logDir, "juju"), MetricsSpoolDir: metricsSpoolDir, ConfDir: confDir, } )
var ErrNoControllerAgentInfo = errors.New("ControllerAgentInfo missing")
ErrNoControllerAgentInfo is returned when the controller agent info is not available in the configuration.
Functions ¶
func ConfigPath ¶
ConfigPath returns the full path to the agent config file. NOTE: Delete this once all agents accept --config instead of --data-dir - it won't be needed anymore.
func LogFilename ¶
LogFileName returns the filename for the Agent's log file.
func MachineLockLogFilename ¶
MachineLockLogFilename returns the filename for the machine lock log file.
func WriteSystemIdentityFile ¶
WriteSystemIdentityFile writes the system identity to the configured system identity file path. If the system identity is empty, it removes the file instead.
Types ¶
type APIHostPortsSetter ¶
type APIHostPortsSetter struct {
Agent
}
APIHostPortsSetter trivially wraps an Agent to implement worker/apiaddressupdater/APIAddressSetter.
func (APIHostPortsSetter) SetAPIHostPorts ¶
func (s APIHostPortsSetter) SetAPIHostPorts(servers []network.HostPorts) error
SetAPIHostPorts is the APIAddressSetter interface.
type Agent ¶
type Agent interface {
// CurrentConfig returns a copy of the agent's configuration. No
// guarantees regarding ongoing correctness are made.
CurrentConfig() Config
// ChangeConfig allows clients to change the agent's configuration
// by supplying a callback that applies the changes.
ChangeConfig(ConfigMutator) error
}
Agent exposes the agent's configuration to other components. This interface should probably be segregated (agent.ConfigGetter and agent.ConfigChanger?) but YAGNI *currently* advises against same.
type AgentConfigParams ¶
type AgentConfigParams struct {
Paths Paths
Jobs []model.MachineJob
UpgradedToVersion semversion.Number
Tag names.Tag
Password string
Nonce string
Controller names.ControllerTag
Model names.ModelTag
APIAddresses []string
CACert string
Values map[string]string
AgentLogfileMaxSizeMB int
AgentLogfileMaxBackups int
QueryTracingEnabled bool
QueryTracingThreshold time.Duration
DqliteBusyTimeout time.Duration
OpenTelemetryEnabled bool
OpenTelemetryEndpoint string
OpenTelemetryInsecure bool
OpenTelemetryStackTraces bool
OpenTelemetrySampleRatio float64
OpenTelemetryTailSamplingThreshold time.Duration
ObjectStoreType objectstore.BackendType
DqlitePort int
}
AgentConfigParams holds the parameters required to create a new AgentConfig.
type Config ¶
type Config interface {
// DataDir returns the data directory. Each agent has a subdirectory
// containing the configuration files.
DataDir() string
// TransientDataDir returns the directory where this agent should store
// any data that is not expected to survive a reboot.
TransientDataDir() string
// LogDir returns the log directory. All logs from all agents on
// the machine are written to this directory.
LogDir() string
// SystemIdentityPath returns the path of the file where the environment
// SSH key is kept.
SystemIdentityPath() string
// Jobs returns a list of MachineJobs that need to run.
Jobs() []model.MachineJob
// Tag returns the tag of the entity on whose behalf the state connection
// will be made.
Tag() names.Tag
// Dir returns the agent's directory.
Dir() string
// Nonce returns the nonce saved when the machine was provisioned
// TODO: make this one of the key/value pairs.
Nonce() string
// CACert returns the CA certificate that is used to validate the state or
// API server's certificate.
CACert() string
// APIAddresses returns the addresses needed to connect to the api server
APIAddresses() ([]string, error)
// WriteCommands returns shell commands to write the agent configuration.
// It returns an error if the configuration does not have all the right
// elements.
WriteCommands(renderer shell.Renderer) ([]string, error)
// ControllerAgentInfo returns the details needed to run
// a controller and reports whether those details
// are available
ControllerAgentInfo() (controller.ControllerAgentInfo, bool)
// APIInfo returns details for connecting to the API server and
// reports whether the details are available.
APIInfo() (*api.Info, bool)
// OldPassword returns the fallback password when connecting to the
// API server.
OldPassword() string
// UpgradedToVersion returns the version for which all upgrade steps have been
// successfully run, which is also the same as the initially deployed version.
UpgradedToVersion() semversion.Number
// LoggingConfig returns the logging config for this agent. Initially this
// value is empty, but as the agent gets notified of model agent config
// changes this value is saved.
LoggingConfig() string
// Value returns the value associated with the key, or an empty string if
// the key is not found.
Value(key string) string
// Model returns the tag for the model that the agent belongs to.
Model() names.ModelTag
// Controller returns the tag for the controller that the agent belongs to.
Controller() names.ControllerTag
// MetricsSpoolDir returns the spool directory where workloads store
// collected metrics.
MetricsSpoolDir() string
// AgentLogfileMaxSizeMB returns the maximum file size in MB of each
// agent/controller log file.
AgentLogfileMaxSizeMB() int
// AgentLogfileMaxBackups returns the number of old agent/controller log
// files to keep (compressed).
AgentLogfileMaxBackups() int
// QueryTracingEnabled returns whether query tracing is enabled.
QueryTracingEnabled() bool
// QueryTracingThreshold returns the threshold for query tracing. The
// lower the threshold, the more queries will be output. A value of 0
// means all queries will be output.
QueryTracingThreshold() time.Duration
// DqliteBusyTimeout returns the busy timeout for dqlite database
// operations.
DqliteBusyTimeout() time.Duration
// OpenTelemetryEnabled returns whether the open telemetry is enabled.
OpenTelemetryEnabled() bool
// OpenTelemetryEndpoint returns the endpoint to use for open telemetry
// collection.
OpenTelemetryEndpoint() string
// OpenTelemetryInsecure returns if the endpoint is insecure. This is useful
// for local/development testing
OpenTelemetryInsecure() bool
// OpenTelemetryStackTraces return if debug stack traces should be enabled
// for each span.
OpenTelemetryStackTraces() bool
// OpenTelemetrySampleRatio returns the sample ratio to use for open
// telemetry collection.
OpenTelemetrySampleRatio() float64
// OpenTelemetryTailSamplingThreshold returns the threshold for tail-based
// sampling. The lower the threshold, the more spans will be sampled.
OpenTelemetryTailSamplingThreshold() time.Duration
// ObjectStoreType returns the type of object store to use.
ObjectStoreType() objectstore.BackendType
// DqlitePort returns the port that should be used by Dqlite. This should
// only be set during testing.
DqlitePort() (int, bool)
}
The Config interface is the sole way that the agent gets access to the configuration information for the machine and unit agents. There should only be one instance of a config object for any given agent, and this interface is passed between multiple go routines. The mutable methods are protected by a mutex, and it is expected that the caller doesn't modify any slice that may be returned.
NOTE: should new mutating methods be added to this interface, consideration is needed around the synchronisation as a single instance is used in multiple go routines.
type ConfigMutator ¶
type ConfigMutator func(ConfigSetter) error
type ConfigRenderer ¶
type ConfigSetter ¶
type ConfigSetter interface {
Config
// contains filtered or unexported methods
}
type ConfigSetterWriter ¶
type ConfigSetterWriter interface {
Config
ConfigWriter
// contains filtered or unexported methods
}
func NewAgentConfig ¶
func NewAgentConfig(configParams AgentConfigParams) (ConfigSetterWriter, error)
NewAgentConfig returns a new config object suitable for use for a machine or unit agent.
func NewStateMachineConfig ¶
func NewStateMachineConfig(configParams AgentConfigParams, serverInfo controller.ControllerAgentInfo) (ConfigSetterWriter, error)
NewStateMachineConfig returns a configuration suitable for a machine running the controller.
func ParseConfigData ¶
func ParseConfigData(configData []byte) (ConfigSetterWriter, error)
ParseConfigData parses configuration data.
func ReadConfig ¶
func ReadConfig(configFilePath string) (ConfigSetterWriter, error)
ReadConfig reads configuration data from the given location.
type ConfigWriter ¶
type ConfigWriter interface {
ConfigRenderer
// Write writes the agent configuration.
Write() error
}
type Paths ¶
type Paths struct {
// DataDir is the data directory where each agent has a subdirectory
// containing the configuration files.
DataDir string
// TransientDataDir is a directory where each agent can store data that
// is not expected to survive a reboot.
TransientDataDir string
// LogDir is the log directory where all logs from all agents on
// the machine are written.
LogDir string
// MetricsSpoolDir is the spool directory where workloads store
// collected metrics.
MetricsSpoolDir string
// ConfDir is the directory where all config file for
// Juju agents are stored.
ConfDir string
}
Paths holds the directory paths used by the agent.
func NewPathsWithDefaults ¶
NewPathsWithDefaults returns a Paths struct initialized with default locations if not otherwise specified.