agent

package
v0.0.0-...-4bd6544 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 5, 2016 License: AGPL-3.0 Imports: 24 Imported by: 0

Documentation

Index

Constants

View Source
const (
	// BootstrapNonce is used as a nonce for the initial controller machine.
	BootstrapNonce = "user-admin:bootstrap"

	// BootstrapMachineId is the ID of the initial controller machine.
	BootstrapMachineId = "0"

	// MachineLockName is the name of the mutex that the agent creates to
	// ensure serialization of tasks such as uniter hook executions, juju-run,
	// and others.
	MachineLockName = "machine-lock"
)
View Source
const (
	LxcBridge         = "LXC_BRIDGE"
	LxdBridge         = "LXD_BRIDGE"
	ProviderType      = "PROVIDER_TYPE"
	ContainerType     = "CONTAINER_TYPE"
	Namespace         = "NAMESPACE"
	AgentServiceName  = "AGENT_SERVICE_NAME"
	MongoOplogSize    = "MONGO_OPLOG_SIZE"
	NUMACtlPreference = "NUMA_CTL_PREFERENCE"
)
View Source
const SystemIdentity = "system-identity"

SystemIdentity is the name of the file where the environment SSH key is kept.

View Source
const (
	// UninstallFile is the name of the file inside the data dir that,
	// if it exists, will cause the machine agent to uninstall itself
	// when it receives the termination signal or ErrTerminateAgent.
	UninstallFile = "uninstall-agent"
)

Variables

View Source
var (
	// DefaultPaths defines the default paths for an agent.
	DefaultPaths = Paths{
		DataDir:         dataDir,
		LogDir:          path.Join(logDir, "juju"),
		MetricsSpoolDir: metricsSpoolDir,
		ConfDir:         confDir,
	}
)
View Source
var ErrNoStateServingInfo = errors.New("StateServingInfo missing")

Functions

func BaseDir

func BaseDir(dataDir string) string

BaseDir returns the directory containing the data directories for all the agents.

func CanUninstall

func CanUninstall(a Agent) bool

CanUninstall returns true if the uninstall file exists in the agent's data dir. If it encounters an error, it fails safe and returns false.

func ConfigPath

func ConfigPath(dataDir string, tag names.Tag) string

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 Dir

func Dir(dataDir string, tag names.Tag) string

Dir returns the agent-specific data directory.

func LogFilename

func LogFilename(c Config) string

LogFileName returns the filename for the Agent's log file.

func SetCanUninstall

func SetCanUninstall(a Agent) error

SetCanUninstall creates the uninstall file in the data dir. It does nothing if the supplied agent doesn't have a machine tag.

func WriteSystemIdentityFile

func WriteSystemIdentityFile(c Config) error

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.HostPort) 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              []multiwatcher.MachineJob
	UpgradedToVersion version.Number
	Tag               names.Tag
	Password          string
	Nonce             string
	Controller        names.ControllerTag
	Model             names.ModelTag
	StateAddresses    []string
	APIAddresses      []string
	CACert            string
	Values            map[string]string
	MongoVersion      mongo.Version
}

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

	// 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() []multiwatcher.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)

	// StateServingInfo returns the details needed to run
	// a controller and reports whether those details
	// are available
	StateServingInfo() (params.StateServingInfo, bool)

	// APIInfo returns details for connecting to the API server and
	// reports whether the details are available.
	APIInfo() (*api.Info, bool)

	// MongoInfo returns details for connecting to the controller's mongo
	// database and reports whether those details are available
	MongoInfo() (*mongo.MongoInfo, 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() version.Number

	// 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

	// MongoVersion returns the version of mongo that the state server
	// is using.
	MongoVersion() mongo.Version
}

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 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 params.StateServingInfo) (ConfigSetterWriter, error)

NewStateMachineConfig returns a configuration suitable for a machine running the controller.

func ReadConfig

func ReadConfig(configFilePath string) (ConfigSetterWriter, error)

ReadConfig reads configuration data from the given location.

type ConfigWriter

type ConfigWriter interface {
	// 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
	// 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

func NewPathsWithDefaults(p Paths) Paths

NewPathsWithDefaults returns a Paths struct initialized with default locations if not otherwise specified.

func (*Paths) Migrate

func (p *Paths) Migrate(newPaths Paths)

Migrate assigns the directory locations specified from the new path configuration.

type StateServingInfoSetter

type StateServingInfoSetter struct {
	Agent
}

StateServingInfoSetter trivially wraps an Agent to implement worker/certupdater/SetStateServingInfo.

func (StateServingInfoSetter) SetStateServingInfo

func (s StateServingInfoSetter) SetStateServingInfo(info params.StateServingInfo) error

SetStateServingInfo is the SetStateServingInfo interface.

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL