state

package
v0.0.0-...-0db00f2 Latest Latest
Warning

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

Go to latest
Published: Dec 20, 2024 License: AGPL-3.0 Imports: 93 Imported by: 976

Documentation

Overview

Package state enables reading, observing, and changing the state stored in MongoDB of a whole model managed by juju.

Index

Constants

View Source
const (
	ModelTypeIAAS = ModelType("iaas")
	ModelTypeCAAS = ModelType("caas")
)
View Source
const (
	// MigrationModeNone is the default mode for a model and reflects
	// that it isn't involved with a model migration.
	MigrationModeNone = MigrationMode("")

	// MigrationModeExporting reflects a model that is in the process of being
	// exported from one controller to another.
	MigrationModeExporting = MigrationMode("exporting")

	// MigrationModeImporting reflects a model that is being imported into a
	// controller, but is not yet fully active.
	MigrationModeImporting = MigrationMode("importing")
)
View Source
const (
	// ControllerSettingsGlobalKey is the key for the controller and its settings.
	ControllerSettingsGlobalKey = "controllerSettings"
)
View Source
const (
	ErrModelNotDying = errors.ConstError("model is not dying")
)

Variables

View Source
var (
	IsProviderIDNotUniqueError     = stateerrors.IsProviderIDNotUniqueError
	IsParentDeviceHasChildrenError = stateerrors.IsParentDeviceHasChildrenError
	IsNotAlive                     = stateerrors.IsNotAlive
)
View Source
var ErrChangeComplete = errors.New("change complete")

ErrChangeComplete can be returned from Prepare to finish an Apply attempt and report success without taking any further action.

View Source
var ErrNoBackingVolume = errors.ConstError("filesystem has no backing volume")

ErrNoBackingVolume is returned by Filesystem.Volume() for filesystems without a backing volume.

View Source
var ErrNoDefaultStoragePool = fmt.Errorf("no storage pool specified and no default available")

ErrNoDefaultStoragePool is returned when a storage pool is required but none is specified nor available as a default.

View Source
var ErrStateClosed = fmt.Errorf("state has been closed")

ErrStateClosed is returned from watchers if their underlying state connection has been closed.

View Source
var ErrSubordinateConstraints = stderrors.New("constraints do not apply to subordinate applications")

Functions

func ApplicationMachines

func ApplicationMachines(st *State, application string) ([]string, error)

ApplicationMachines returns the machine IDs of machines which have the specified application listed as a principal.

func Apply

func Apply(db Database, change Change) error

Apply runs the supplied Change against the supplied Database. If it returns no error, the change succeeded.

func DefaultEndpointBindingsForCharm

func DefaultEndpointBindingsForCharm(_ any, charmMeta *charm.Meta) (map[string]string, error)

DefaultEndpointBindingsForCharm populates a bindings map containing each endpoint of the given charm metadata (relation name or extra-binding name) bound to an empty space. TODO (manadart 2024-01-29): The alpha space ID here is scaffolding and should be replaced with the configured model default space upon migrating this logic to Dqlite.

func FilesystemMountPoint

func FilesystemMountPoint(
	meta charm.Storage,
	tag names.StorageTag,
	osname string,
) (string, error)

FilesystemMountPoint returns a mount point to use for the given charm storage. For stores with potentially multiple instances, the instance name is appended to the location.

func HostedModelCountOp

func HostedModelCountOp(amount int) txn.Op

func InitDatabase

func InitDatabase(session *mgo.Session, modelUUID string, settings *controller.Config) error

InitDatabase creates all the collections and indices in a Juju database.

func IsContainsFilesystem

func IsContainsFilesystem(err error) bool

func IsMigrationActive

func IsMigrationActive(st *State, modelUUID string) (bool, error)

IsMigrationActive returns true if a migration is in progress for the model with the given UUID. The State provided need not be for the model in question.

func ModelStatusInvalidCredential

func ModelStatusInvalidCredential(reason string) status.StatusInfo

ModelStatusInvalidCredential returns the model status for an invalid credential.

func NewApplicationOffers

func NewApplicationOffers(st *State) crossmodel.ApplicationOffers

NewApplicationOffers creates a application directory backed by a state instance.

func NewRelationEgressNetworks

func NewRelationEgressNetworks(st *State) *relationNetworksState

NewRelationEgressNetworks creates a RelationNetworks instance for egress CIDRS backed by a state.

func NewRelationIngressNetworks

func NewRelationIngressNetworks(st *State) *relationNetworksState

NewRelationIngressNetworks creates a RelationNetworks instance for ingress CIDRS backed by a state.

func NewRelationNetworks

func NewRelationNetworks(st *State) *rootRelationNetworksState

NewRelationNetworks creates a root RelationNetworks without a direction, so accessing RelationNetworks is possible agnostically.

func NewStorageBackend

func NewStorageBackend(st *State) (*storageBackend, error)

NewStorageBackend creates a backend for managing storage.

func NewStorageConfigBackend

func NewStorageConfigBackend(
	st *State,
) (*storageConfigBackend, error)

NewStorageConfigBackend creates a backend for managing storage with a model config service.

func ParseFilesystemAttachmentId

func ParseFilesystemAttachmentId(id string) (names.Tag, names.FilesystemTag, error)

ParseFilesystemAttachmentId parses a string as a filesystem attachment ID, returning the host and filesystem components.

func ParseVolumeAttachmentId

func ParseVolumeAttachmentId(id string) (names.Tag, names.VolumeTag, error)

ParseVolumeAttachmentId parses a string as a volume attachment ID, returning the host and volume components.

func ReadSequence

func ReadSequence(mb modelBackend, name string) (int, error)

ReadSequence is a stop gap to allow dqlite units to use the same ordinal as the mongo ones.

func TagFromDocID

func TagFromDocID(docID string) names.Tag

TagFromDocID tries attempts to extract an entity-identifying tag from a Mongo document ID. For example "c9741ea1-0c2a-444d-82f5-787583a48557:a#mediawiki" would yield an application tag for "mediawiki"

Types

type Action

type Action interface {
	Entity

	// Id returns the local id of the Action.
	Id() string

	// Receiver returns the Name of the ActionReceiver for which this action
	// is enqueued.  Usually this is a Unit Name().
	Receiver() string

	// Name returns the name of the action, as defined in the charm.
	Name() string

	// Parameters will contain a structure representing arguments or parameters to
	// an action, and is expected to be validated by the Unit using the Charm
	// definition of the Action.
	Parameters() map[string]interface{}

	// Parallel returns true if the action can run without
	// needed to acquire the machine lock.
	Parallel() bool

	// ExecutionGroup is the group of actions which cannot
	// execute in parallel with each other.
	ExecutionGroup() string

	// Enqueued returns the time the action was added to state as a pending
	// Action.
	Enqueued() time.Time

	// Started returns the time that the Action execution began.
	Started() time.Time

	// Completed returns the completion time of the Action.
	Completed() time.Time

	// Status returns the final state of the action.
	Status() ActionStatus

	// Results returns the structured output of the action and any error.
	Results() (map[string]interface{}, string)

	// ActionTag returns an ActionTag constructed from this action's
	// Prefix and Sequence.
	ActionTag() names.ActionTag

	// Begin marks an action as running, and logs the time it was started.
	// It asserts that the action is currently pending.
	Begin() (Action, error)

	// Finish removes action from the pending queue and captures the output
	// and end state of the action.
	Finish(results ActionResults) (Action, error)

	// Log adds message to the action's progress message array.
	Log(message string) error

	// Messages returns the action's progress messages.
	Messages() []ActionMessage

	// Cancel or Abort the action.
	Cancel() (Action, error)

	// Refresh the contents of the action.
	Refresh() error
}

Action represents an instance of an action designated for a unit or machine in the model.

type ActionMessage

type ActionMessage struct {
	MessageValue   string    `bson:"message"`
	TimestampValue time.Time `bson:"timestamp"`
}

ActionMessage represents a progress message logged by an action.

func (ActionMessage) Message

func (m ActionMessage) Message() string

Message returns the message string.

func (ActionMessage) Timestamp

func (m ActionMessage) Timestamp() time.Time

Timestamp returns the message timestamp.

type ActionReceiver

type ActionReceiver interface {
	Entity

	// PrepareActionPayload returns the payload to use in creating an action for this receiver.
	PrepareActionPayload(name string, payload map[string]interface{}, parallel *bool, executionGroup *string) (map[string]interface{}, bool, string, error)

	// CancelAction removes a pending Action from the queue for this
	// ActionReceiver and marks it as cancelled.
	CancelAction(action Action) (Action, error)

	// WatchActionNotifications returns a StringsWatcher that will notify
	// on changes to the queued actions for this ActionReceiver.
	WatchActionNotifications() StringsWatcher

	// WatchPendingActionNotifications returns a StringsWatcher that will notify
	// on pending queued actions for this ActionReceiver.
	WatchPendingActionNotifications() StringsWatcher

	// Actions returns the list of Actions queued and completed for this
	// ActionReceiver.
	Actions() ([]Action, error)

	// CompletedActions returns the list of Actions completed for this
	// ActionReceiver.
	CompletedActions() ([]Action, error)

	// PendingActions returns the list of Actions queued for this
	// ActionReceiver.
	PendingActions() ([]Action, error)

	// RunningActions returns the list of Actions currently running for
	// this ActionReceiver.
	RunningActions() ([]Action, error)
}

ActionReceiver describes Entities that can have Actions queued for them, and that can get ActionRelated information about those actions. TODO(jcw4) consider implementing separate Actor classes for this interface; for example UnitActor that implements this interface, and takes a Unit and performs all these actions.

type ActionResults

type ActionResults struct {
	Status  ActionStatus           `json:"status"`
	Results map[string]interface{} `json:"results"`
	Message string                 `json:"message"`
}

ActionResults is a data transfer object that holds the key Action output and results information.

type ActionSpecsByName

type ActionSpecsByName map[string]charm.ActionSpec

ActionSpecsByName is a map of action names to their respective ActionSpec.

type ActionStatus

type ActionStatus string

ActionStatus represents the possible end states for an action.

const (
	// ActionError signifies that the action did not get run due to an error.
	ActionError ActionStatus = "error"

	// ActionFailed signifies that the action did not complete successfully.
	ActionFailed ActionStatus = "failed"

	// ActionCompleted indicates that the action ran to completion as intended.
	ActionCompleted ActionStatus = "completed"

	// ActionCancelled means that the Action was cancelled before being run.
	ActionCancelled ActionStatus = "cancelled"

	// ActionPending is the default status when an Action is first queued.
	ActionPending ActionStatus = "pending"

	// ActionRunning indicates that the Action is currently running.
	ActionRunning ActionStatus = "running"

	// ActionAborting indicates that the Action is running but should be
	// aborted.
	ActionAborting ActionStatus = "aborting"

	// ActionAborted indicates the Action was aborted.
	ActionAborted ActionStatus = "aborted"
)

type ActionsWatcher

type ActionsWatcher interface {
	Entity
	WatchActionNotifications() StringsWatcher
	WatchPendingActionNotifications() StringsWatcher
}

ActionsWatcher defines the methods an entity exposes to watch Actions queued up for itself

type AddApplicationArgs

type AddApplicationArgs struct {
	Name              string
	Charm             CharmRef
	CharmURL          string
	CharmOrigin       *CharmOrigin
	Storage           map[string]StorageConstraints
	Devices           map[string]DeviceConstraints
	AttachStorage     []names.StorageTag
	EndpointBindings  map[string]string
	ApplicationConfig *config.Config
	CharmConfig       charm.Settings
	NumUnits          int
	Placement         []*instance.Placement
	Constraints       constraints.Value
	Resources         map[string]string
}

AddApplicationArgs defines the arguments for AddApplication method.

type AddOfferConnectionParams

type AddOfferConnectionParams struct {
	// SourceModelUUID is the UUID of the consuming model.
	SourceModelUUID string

	// OfferUUID is the UUID of the offer.
	OfferUUID string

	// Username is the name of the user who created this connection.
	Username string

	// RelationId is the id of the relation to which this offer pertains.
	RelationId int

	// RelationKey is the key of the relation to which this offer pertains.
	RelationKey string
}

AddOfferConnectionParams contains the parameters for adding an offer connection to the model.

type AddRemoteApplicationParams

type AddRemoteApplicationParams struct {
	// Name is the name to give the remote application. This does not have to
	// match the application name in the URL, or the name in the remote model.
	Name string

	// OfferUUID is the UUID of the offer.
	OfferUUID string

	// URL is either empty, or the URL that the remote application was offered
	// with on the hosting model.
	URL string

	// ExternalControllerUUID, if set, is the UUID of the controller other
	// than this one, which is hosting the offer.
	ExternalControllerUUID string

	// SourceModel is the tag of the model to which the remote application belongs.
	SourceModel names.ModelTag

	// Token is an opaque string that identifies the remote application in the
	// source model.
	Token string

	// Endpoints describes the endpoints that the remote application implements.
	Endpoints []charm.Relation

	// IsConsumerProxy is true when a remote application is created as a result
	// of a registration operation from a remote model.
	IsConsumerProxy bool

	// ConsumeVersion is incremented each time a new consumer proxy
	// is created for an offer.
	ConsumeVersion int

	// Macaroon is used for authentication on the offering side.
	Macaroon *macaroon.Macaroon
}

AddRemoteApplicationParams contains the parameters for adding a remote application to the model.

func (AddRemoteApplicationParams) Validate

func (p AddRemoteApplicationParams) Validate() error

Validate returns an error if there's a problem with the parameters being used to create a remote application.

type AddUnitOperation

type AddUnitOperation struct {
	// contains filtered or unexported fields
}

AddUnitOperation is a model operation that will add a unit.

func (*AddUnitOperation) Build

func (op *AddUnitOperation) Build(attempt int) ([]txn.Op, error)

Build is part of the ModelOperation interface.

func (*AddUnitOperation) Done

func (op *AddUnitOperation) Done(err error) error

Done is part of the ModelOperation interface.

type AddUnitParams

type AddUnitParams struct {
	// AttachStorage identifies storage instances to attach to the unit.
	AttachStorage []names.StorageTag

	// ProviderId identifies the unit for a given provider.
	ProviderId *string

	// Address is the container address.
	Address *string

	// Ports are the open ports on the container.
	Ports *[]string

	// UnitName is for CAAS models when creating stateful units.
	UnitName *string

	// PasswordHash is only passed for CAAS sidecar units on creation.
	PasswordHash *string

	// We need charm Meta to add the unit storage and we can't retrieve it
	// from the legacy state so we must pass it here.
	CharmMeta *charm.Meta
	// contains filtered or unexported fields
}

AddUnitParams contains parameters for the Application.AddUnit method.

type Address

type Address struct {
	// contains filtered or unexported fields
}

Address represents the state of an IP address assigned to a link-layer network device on a machine.

func (*Address) ConfigMethod

func (addr *Address) ConfigMethod() network.AddressConfigType

ConfigMethod returns the AddressConfigMethod used for this IP address.

func (*Address) DNSSearchDomains

func (addr *Address) DNSSearchDomains() []string

DNSSearchDomains returns the list of DNS domains to use for qualifying hostnames. Can be empty.

func (*Address) DNSServers

func (addr *Address) DNSServers() []string

DNSServers returns the list of DNS nameservers to use, which can be empty.

func (*Address) Device

func (addr *Address) Device() (*LinkLayerDevice, error)

Device returns the LinkLayerDevice this IP address is assigned to.

func (*Address) DeviceName

func (addr *Address) DeviceName() string

DeviceName returns the name of the link-layer device this IP address is assigned to.

func (*Address) DocID

func (addr *Address) DocID() string

DocID returns the globally unique ID of the IP address, including the model UUID as prefix.

func (*Address) GatewayAddress

func (addr *Address) GatewayAddress() string

GatewayAddress returns the gateway address to use, which can be empty.

func (*Address) IsDefaultGateway

func (addr *Address) IsDefaultGateway() bool

IsDefaultGateway returns true if this address is used for the default gateway on the machine.

func (*Address) IsSecondary

func (addr *Address) IsSecondary() bool

IsSecondary if true, indicates that this address is not the primary address associated with the NIC.

func (*Address) IsShadow

func (addr *Address) IsShadow() bool

IsShadow indicates whether this address is virtual/floating/shadow address. In cross-model relations, we may want to return this address for a device if its non-shadow address is bound to a cloud-local subnet.

func (*Address) LoopbackConfigMethod

func (addr *Address) LoopbackConfigMethod() bool

LoopbackConfigMethod returns whether AddressConfigMethod used for this IP address was loopback.

func (*Address) Machine

func (addr *Address) Machine() (*Machine, error)

Machine returns the Machine this IP address belongs to.

func (*Address) MachineID

func (addr *Address) MachineID() string

MachineID returns the ID of the machine this IP address belongs to.

func (*Address) Origin

func (addr *Address) Origin() network.Origin

Origin represents the authoritative source of the ipAddress. it is set using precedence, with "provider" overriding "machine". It is used to determine whether the address is no longer recognised and is safe to remove.

func (*Address) ProviderID

func (addr *Address) ProviderID() network.Id

ProviderID returns the provider-specific IP address ID, if set.

func (*Address) ProviderNetworkID

func (addr *Address) ProviderNetworkID() network.Id

ProviderNetworkID returns the provider-specific network ID, if set.

func (*Address) ProviderSubnetID

func (addr *Address) ProviderSubnetID() network.Id

ProviderSubnetID returns the provider-specific subnet ID, if set.

func (*Address) Remove

func (addr *Address) Remove() error

Remove removes the IP address if it exists. No error is returned if the address was already removed.

func (*Address) RemoveOps

func (addr *Address) RemoveOps() []txn.Op

RemoveOps returns transaction operations that will ensure that the address is not present in the collection and that if set, its provider ID is removed from the global register.

func (*Address) SetOriginOps

func (addr *Address) SetOriginOps(origin network.Origin) []txn.Op

SetOriginOps returns the transaction operations required to set the input origin for the the address. If the address has a provider ID and origin is changing from provider to machine, remove the ID from the address document and the global collection.

func (*Address) SetProviderIDOps

func (addr *Address) SetProviderIDOps(id network.Id) ([]txn.Op, error)

SetProviderIDOps returns the transaction operations required to update the address with the input provider ID. Setting the provider ID updates the address origin to provider.

func (*Address) SetProviderNetIDsOps

func (addr *Address) SetProviderNetIDsOps(networkID, subnetID network.Id) []txn.Op

SetProviderNetIDsOps returns the transaction operations required to ensure that the input provider IDs are set against the address. This is distinct from SetProviderIDOps above, because we assume that the uniqueness of the IDs has already been established and that they are recorded in the global collection.

func (*Address) String

func (addr *Address) String() string

String returns a human-readable representation of the IP address.

func (*Address) SubnetCIDR

func (addr *Address) SubnetCIDR() string

SubnetCIDR returns the CIDR of the subnet this IP address comes from.

func (*Address) UpdateOps

func (addr *Address) UpdateOps(args LinkLayerDeviceAddress) ([]txn.Op, error)

func (*Address) Value

func (addr *Address) Value() string

Value returns the value of this IP address.

type AgentLiving

type AgentLiving interface {
	Living
	EnsureDead() error
}

AgentLiving describes state entities with a lifecycle and an agent that manages it.

type AgentTooler

type AgentTooler interface {
	AgentTools() (*tools.Tools, error)
	SetAgentVersion(version.Binary) error
}

AgentTooler is implemented by entities that have associated agent tools.

type Application

type Application struct {
	// contains filtered or unexported fields
}

Application represents the state of an application.

func (*Application) AddOperation

func (a *Application) AddOperation(
	props UnitUpdateProperties,
) *AddUnitOperation

AddOperation returns a model operation that will add a unit.

func (*Application) AddUnit

func (a *Application) AddUnit(
	args AddUnitParams,
) (unit *Unit, err error)

AddUnit adds a new principal unit to the application.

func (*Application) AgentTools

func (a *Application) AgentTools() (*tools.Tools, error)

AgentTools returns the tools that the operator is currently running. It an error that satisfies errors.IsNotFound if the tools have not yet been set.

func (*Application) AllUnits

func (a *Application) AllUnits() (units []*Unit, err error)

AllUnits returns all units of the application.

func (*Application) ApplicationConfig

func (a *Application) ApplicationConfig() (config.ConfigAttributes, error)

ApplicationConfig returns the configuration for the application itself.

func (*Application) ApplicationTag

func (a *Application) ApplicationTag() names.ApplicationTag

ApplicationTag returns the more specific ApplicationTag rather than the generic Tag.

func (*Application) Base

func (a *Application) Base() Base

Base returns the specified base for this charm.

func (*Application) ChangeScale

func (a *Application) ChangeScale(scaleChange int) (int, error)

ChangeScale alters the existing scale by the provided change amount, returning the new amount. This is used on CAAS models.

func (*Application) Charm

func (a *Application) Charm() (CharmRefFull, bool, error)

Charm returns the application's charm and whether units should upgrade to that charm even if they are in an error state.

func (*Application) CharmConfig

func (a *Application) CharmConfig() (charm.Settings, error)

CharmConfig returns the raw user configuration for the application's charm.

func (*Application) CharmModifiedVersion

func (a *Application) CharmModifiedVersion() int

CharmModifiedVersion increases whenever the application's charm is changed in any way.

func (*Application) CharmOrigin

func (a *Application) CharmOrigin() *CharmOrigin

CharmOrigin returns the origin of a charm associated with a application.

func (*Application) CharmURL

func (a *Application) CharmURL() (*string, bool)

CharmURL returns a string version of the application's charm URL, and whether units should upgrade to the charm with that URL even if they are in an error state.

func (*Application) ClearExposed

func (a *Application) ClearExposed() error

ClearExposed removes the exposed flag from the application. See MergeExposeSettings and IsExposed.

func (*Application) Constraints

func (a *Application) Constraints() (constraints.Value, error)

Constraints returns the current application constraints.

func (*Application) DeployedMachines

func (a *Application) DeployedMachines() ([]*Machine, error)

Deployed machines returns the collection of machines that this application has units deployed to.

func (*Application) Destroy

func (a *Application) Destroy(store objectstore.ObjectStore) (err error)

Destroy ensures that the application and all its relations will be removed at some point; if the application has no units, and no relation involving the application has any units in scope, they are all removed immediately.

func (*Application) DestroyOperation

func (a *Application) DestroyOperation(store objectstore.ObjectStore) *DestroyApplicationOperation

DestroyOperation returns a model operation that will destroy the application.

func (*Application) DeviceConstraints

func (a *Application) DeviceConstraints() (map[string]DeviceConstraints, error)

DeviceConstraints returns the device constraints for the application.

func (*Application) Endpoint

func (a *Application) Endpoint(relationName string) (Endpoint, error)

Endpoint returns the relation endpoint with the supplied name, if it exists.

func (*Application) EndpointBindings

func (a *Application) EndpointBindings() (*Bindings, error)

EndpointBindings returns the mapping for each endpoint name and the space ID it is bound to (or empty if unspecified). When no bindings are stored for the application, defaults are returned.

func (*Application) Endpoints

func (a *Application) Endpoints() (eps []Endpoint, err error)

Endpoints returns the application's currently available relation endpoints.

func (*Application) EnsureMinUnits

func (a *Application) EnsureMinUnits() (err error)

EnsureMinUnits adds new units if the application's MinUnits value is greater than the number of alive units.

func (*Application) ExposedEndpoints

func (a *Application) ExposedEndpoints() map[string]ExposedEndpoint

ExposedEndpoints returns a map where keys are endpoint names (or the "" value which represents all endpoints) and values are ExposedEndpoint instances that specify which sources (spaces or CIDRs) can access the opened ports for each endpoint once the application is exposed.

func (*Application) GetPlacement

func (a *Application) GetPlacement() string

GetPlacement returns the application's placement directive. This is used on CAAS models.

func (*Application) GetScale

func (a *Application) GetScale() int

GetScale returns the application's desired scale value. This is used on CAAS models.

func (*Application) IsExposed

func (a *Application) IsExposed() bool

IsExposed returns whether this application is exposed. The explicitly open ports (with open-port) for exposed applications may be accessed from machines outside of the local deployment network. See MergeExposeSettings and ClearExposed.

func (*Application) IsPrincipal

func (a *Application) IsPrincipal() bool

IsPrincipal returns whether units of the application can have subordinate units.

func (*Application) IsRemote

func (a *Application) IsRemote() bool

IsRemote returns false for a local application.

func (*Application) Kind

func (a *Application) Kind() string

Kind returns a human readable name identifying the application kind.

func (*Application) LeaderSettings

func (a *Application) LeaderSettings() (map[string]string, error)

LeaderSettings returns a application's leader settings. If nothing has been set yet, it will return an empty map; this is not an error.

func (*Application) Life

func (a *Application) Life() Life

Life returns whether the application is Alive, Dying or Dead.

func (*Application) MergeBindings

func (a *Application) MergeBindings(operatorBindings *Bindings, force bool) error

MergeBindings merges the provided bindings map with the existing application bindings.

func (*Application) MergeExposeSettings

func (a *Application) MergeExposeSettings(exposedEndpoints map[string]ExposedEndpoint) error

MergeExposeSettings marks the application as exposed and merges the provided ExposedEndpoint details into the current set of expose settings. The merge operation will overwrites expose settings for each existing endpoint name.

See ClearExposed and IsExposed.

func (*Application) MinUnits

func (a *Application) MinUnits() int

MinUnits returns the minimum units count for the application.

func (*Application) Name

func (a *Application) Name() string

Name returns the application name.

func (*Application) OperatorStatus

func (a *Application) OperatorStatus() (status.StatusInfo, error)

OperatorStatus returns the operator status for an application.

func (*Application) PasswordValid

func (a *Application) PasswordValid(password string) bool

PasswordValid returns whether the given password is valid for the given application.

func (*Application) ProvisioningState

func (a *Application) ProvisioningState() *ApplicationProvisioningState

ProvisioningState returns the provisioning state for the application.

func (*Application) Refresh

func (a *Application) Refresh() error

Refresh refreshes the contents of the Application from the underlying state. It returns an error that satisfies errors.IsNotFound if the application has been removed.

func (*Application) RelationCount

func (a *Application) RelationCount() int

RelationCount returns the of number of active relations for this application.

func (*Application) Relations

func (a *Application) Relations() (relations []*Relation, err error)

Relations returns a Relation for every relation the application is in.

func (*Application) ServiceInfo

func (a *Application) ServiceInfo() (CloudServicer, error)

ServiceInfo returns information about this application's cloud service. This is only used for CAAS models.

func (*Application) SetAgentVersion

func (a *Application) SetAgentVersion(v version.Binary) (err error)

SetAgentVersion sets the Tools value in applicationDoc.

func (*Application) SetCharm

func (a *Application) SetCharm(
	cfg SetCharmConfig,
	store objectstore.ObjectStore,
) (err error)

SetCharm changes the charm for the application.

func (*Application) SetConstraints

func (a *Application) SetConstraints(cons constraints.Value) (err error)

SetConstraints replaces the current application constraints.

func (*Application) SetDownloadedIDAndHash

func (a *Application) SetDownloadedIDAndHash(id, hash string) error

SetDownloadedIDAndHash updates the applications charm origin with ID and hash values. This should ONLY be done from the async downloader. The hash cannot be updated if the charm origin has no ID, nor was one provided as an argument. The ID cannot be changed.

func (*Application) SetMinUnits

func (a *Application) SetMinUnits(minUnits int) (err error)

SetMinUnits changes the number of minimum units required by the application.

func (*Application) SetOperatorStatus

func (a *Application) SetOperatorStatus(sInfo status.StatusInfo) error

SetOperatorStatus sets the operator status for an application. This is used on CAAS models.

func (*Application) SetPassword

func (a *Application) SetPassword(password string) error

SetPassword sets the password for the application's agent. TODO(caas) - consider a separate CAAS application entity

func (*Application) SetProvisioningState

func (a *Application) SetProvisioningState(ps ApplicationProvisioningState) error

SetProvisioningState sets the provisioning state for the application.

func (*Application) SetScale

func (a *Application) SetScale(scale int, generation int64, force bool) error

SetScale sets the application's desired scale value. This is used on CAAS models.

func (*Application) SetStatus

func (a *Application) SetStatus(statusInfo status.StatusInfo) error

SetStatus sets the status for the application.

func (*Application) Status

func (a *Application) Status() (status.StatusInfo, error)

Status returns the status of the application. Only unit leaders are allowed to set the status of the application. If no status is recorded, then there are no unit leaders and the status is derived from the unit status values.

func (*Application) StatusHistory

func (a *Application) StatusHistory(filter status.StatusHistoryFilter) ([]status.StatusInfo, error)

StatusHistory returns a slice of at most filter.Size StatusInfo items or items as old as filter.Date or items newer than now - filter.Delta time representing past statuses for this application.

func (*Application) StorageConstraints

func (a *Application) StorageConstraints() (map[string]StorageConstraints, error)

StorageConstraints returns the storage constraints for the application.

func (*Application) String

func (a *Application) String() string

String returns the application name.

func (*Application) Tag

func (a *Application) Tag() names.Tag

Tag returns a name identifying the application. The returned name will be different from other Tag values returned by any other entities from the same state.

func (*Application) UnitCount

func (a *Application) UnitCount() int

UnitCount returns the of number of units for this application.

func (*Application) UnitNames

func (a *Application) UnitNames() ([]string, error)

UnitNames returns the of this application's units.

func (*Application) UnitStatuses

func (a *Application) UnitStatuses() (map[string]status.StatusInfo, error)

UnitStatuses returns a map of unit names to their Status results (workload status).

func (*Application) UnsetExposeSettings

func (a *Application) UnsetExposeSettings(exposedEndpoints []string) error

UnsetExposeSettings removes the expose settings for the provided list of endpoint names. If the resulting exposed endpoints map for the application becomes empty after the settings are removed, the application will be automatically unexposed.

An error will be returned if an unknown endpoint name is specified or there is no existing expose settings entry for any of the provided endpoint names.

See ClearExposed and IsExposed.

func (*Application) UpdateApplicationConfig

func (a *Application) UpdateApplicationConfig(
	changes config.ConfigAttributes,
	reset []string,
	schema environschema.Fields,
	defaults schema.Defaults,
) error

UpdateApplicationConfig changes an application's config settings. Unknown and invalid values will return an error.

func (*Application) UpdateCharmConfig

func (a *Application) UpdateCharmConfig(changes charm.Settings) error

UpdateCharmConfig changes a application's charm config settings. Values set to nil will be deleted; unknown and invalid values will return an error.

func (*Application) UpdateCloudService

func (a *Application) UpdateCloudService(providerId string, addresses []network.SpaceAddress) error

UpdateCloudService updates the cloud service details for the application.

func (*Application) UpdateLeaderSettings

func (a *Application) UpdateLeaderSettings(token leadership.Token, updates map[string]string) error

UpdateLeaderSettings updates the application's leader settings with the supplied values, but will fail (with a suitable error) if the supplied Token loses validity. Empty values in the supplied map will be cleared in the database.

func (*Application) UpdateUnits

func (a *Application) UpdateUnits(unitsOp *UpdateUnitsOperation) error

UpdateUnits applies the given application unit update operations.

func (*Application) UpsertCAASUnit

func (a *Application) UpsertCAASUnit(args UpsertCAASUnitParams) (*Unit, error)

func (*Application) Watch

func (a *Application) Watch() NotifyWatcher

Watch returns a watcher for observing changes to an application.

func (*Application) WatchConfigSettingsHash

func (a *Application) WatchConfigSettingsHash() StringsWatcher

WatchConfigSettingsHash returns a watcher that yields a hash of the application's config settings whenever they are changed.

func (*Application) WatchLeaderSettings

func (a *Application) WatchLeaderSettings() NotifyWatcher

WatchLeaderSettings returns a watcher for observing changed to an application's leader settings.

func (*Application) WatchRelations

func (a *Application) WatchRelations() StringsWatcher

WatchRelations returns a StringsWatcher that notifies of changes to the lifecycles of relations involving a.

func (*Application) WatchScale

func (a *Application) WatchScale() NotifyWatcher

WatchScale returns a new NotifyWatcher watching for changes to the specified application's scale value.

func (*Application) WatchServiceAddressesHash

func (a *Application) WatchServiceAddressesHash() StringsWatcher

WatchServiceAddressesHash returns a StringsWatcher that emits a hash of the unit's container address whenever it changes.

func (*Application) WatchUnits

func (a *Application) WatchUnits() StringsWatcher

WatchUnits returns a StringsWatcher that notifies of changes to the lifecycles of units of a.

type ApplicationAndUnitRemover

type ApplicationAndUnitRemover interface {
	DestroyApplication(context.Context, string) error
	DeleteApplication(context.Context, string) error
	EnsureApplicationDead(ctx context.Context, appName string) error
	EnsureUnitDead(context.Context, coreunit.Name, leadership.Revoker) error
	DestroyUnit(context.Context, coreunit.Name) error
	DeleteUnit(context.Context, coreunit.Name) error
}

ApplicationAndUnitRemover deletes an application or unit from the dqlite database. This allows us to initially weave some dqlite support into the cleanup workflow.

type ApplicationDescription

type ApplicationDescription interface {
	Offers() []description.ApplicationOffer
}

ApplicationDescription is an in-place description of an application

type ApplicationEntity

type ApplicationEntity interface {
	status.StatusGetter

	// Life returns the life status of the application.
	Life() Life

	// IsRemote returns true if the application is remote (hosted in a different model).
	IsRemote() bool

	// Endpoints returns the application's currently available relation endpoints.
	Endpoints() ([]Endpoint, error)

	// Endpoint returns the relation endpoint with the supplied name, if it exists.
	Endpoint(relationName string) (Endpoint, error)

	// Relations returns a Relation for every relation the application is in.
	Relations() (relations []*Relation, err error)
}

ApplicationEntity represents a local or remote application.

type ApplicationOfferDescription

type ApplicationOfferDescription interface {
	Offers() []description.ApplicationOffer
}

ApplicationOfferDescription defines an in-place usage for reading application offers.

type ApplicationOfferInput

ApplicationOfferInput describes the input used for migrating application offers.

type ApplicationOfferStateDocumentFactory

type ApplicationOfferStateDocumentFactory interface {
	MakeApplicationOfferDoc(description.ApplicationOffer) (applicationOfferDoc, error)
	MakeApplicationOffersRefOp(string, int) (txn.Op, error)
}

ApplicationOfferStateDocumentFactory creates documents that are useful with in the state package. In essence this just allows us to model our dependencies correctly without having to construct dependencies everywhere. Note: we need public methods here because gomock doesn't mock private methods

type ApplicationOffersState

type ApplicationOffersState interface {
	OfferUUIDForApp(appName string) (string, error)
}

ApplicationOffersState is used to look up all application offers.

type ApplicationProvisioningState

type ApplicationProvisioningState struct {
	Scaling     bool `bson:"scaling"`
	ScaleTarget int  `bson:"scale-target"`
}

ApplicationProvisioningState is the CAAS application provisioning state for an application.

type AssignmentPolicy

type AssignmentPolicy string

AssignmentPolicy controls what machine a unit will be assigned to.

const (
	// AssignLocal indicates that all application units should be assigned
	// to machine 0.
	AssignLocal AssignmentPolicy = "local"

	// AssignNew indicates that every application unit should be assigned to a new
	// dedicated machine.  A new machine will be launched for each new unit.
	AssignNew AssignmentPolicy = "new"
)

type Authenticator

type Authenticator interface {
	Refresh() error
	SetPassword(pass string) error
	PasswordValid(pass string) bool
}

Authenticator represents entites capable of handling password authentication.

type Base

type Base struct {
	OS      string `bson:"os"`
	Channel string `bson:"channel"`
}

Base identifies the base os the charm was installed on.

func DefaultLTSBase

func DefaultLTSBase() Base

DefaultLTSBase is used in tests.

func UbuntuBase

func UbuntuBase(channel string) Base

UbuntuBase is used in tests.

func (Base) DisplayString

func (b Base) DisplayString() string

DisplayString prints the base without the rask component.

func (Base) Normalise

func (b Base) Normalise() Base

Normalise ensures the channel always has a risk.

func (Base) String

func (b Base) String() string

type Bindings

type Bindings struct {
	// contains filtered or unexported fields
}

Bindings are EndpointBindings.

func NewBindings

func NewBindings(st any, givenMap map[string]string) (*Bindings, error)

NewBindings returns a bindings guaranteed to be in space id format.

func (Bindings) GetBSON

func (b Bindings) GetBSON() (interface{}, error)

GetBSON ensures any special characters ($ or .) are escaped in keys before marshalling the map into BSON and storing in mongo.

func (*Bindings) Map

func (b *Bindings) Map() map[string]string

Map returns the current bindingMap with space ids.

func (*Bindings) MapWithSpaceNames

func (b *Bindings) MapWithSpaceNames(lookup network.SpaceInfos) (map[string]string, error)

MapWithSpaceNames returns the current bindingMap with space names rather than ids.

func (*Bindings) Merge

func (b *Bindings) Merge(mergeWith map[string]string, meta *charm.Meta) (bool, error)

Merge the default bindings based on the given charm metadata with the current bindings, overriding with mergeWith values (for the same keys). Current values and mergeWith are both optional and will ignored when empty. The current object contains the combined finalized bindings. Returns true/false if there are any actual differences.

func (*Bindings) SetBSON

func (b *Bindings) SetBSON(raw bson.Raw) error

SetBSON ensures any special characters ($ or .) are unescaped in keys after unmarshalling the raw BSON coming from the stored document.

type BlockDeviceInfo

type BlockDeviceInfo struct {
	DeviceName     string   `bson:"devicename"`
	DeviceLinks    []string `bson:"devicelinks,omitempty"`
	Label          string   `bson:"label,omitempty"`
	UUID           string   `bson:"uuid,omitempty"`
	HardwareId     string   `bson:"hardwareid,omitempty"`
	WWN            string   `bson:"wwn,omitempty"`
	BusAddress     string   `bson:"busaddress,omitempty"`
	Size           uint64   `bson:"size"`
	FilesystemType string   `bson:"fstype,omitempty"`
	InUse          bool     `bson:"inuse"`
	MountPoint     string   `bson:"mountpoint,omitempty"`
	SerialId       string   `bson:"serialid,omitempty"`
}

BlockDeviceInfo describes information about a block device.

type CAASModel

type CAASModel struct {
	// TODO(caas) - this is all still messy until things shake out.
	*Model
	// contains filtered or unexported fields
}

CAASModel contains functionality that is specific to an Containers-As-A-Service (CAAS) model. It embeds a Model so that all generic Model functionality is also available.

func (*CAASModel) Containers

func (m *CAASModel) Containers(providerIds ...string) ([]CloudContainer, error)

Containers returns the containers for the specified provider ids.

type Change

type Change interface {

	// Prepare ensures that db is in a valid base state for applying
	// the change, and returns mgo/txn operations that will fail any
	// enclosing transaction if the state has materially changed; or
	// returns an error.
	Prepare(db Database) ([]txn.Op, error)
}

Change represents any mgo/txn-representable change to a Database.

type Channel

type Channel struct {
	Track  string `bson:"track,omitempty"`
	Risk   string `bson:"risk"`
	Branch string `bson:"branch,omitempty"`
}

Channel identifies and describes completely a store channel.

type Charm

type Charm struct {
	// contains filtered or unexported fields
}

Charm represents the state of a charm in the model.

func (*Charm) Actions

func (c *Charm) Actions() *charm.Actions

Actions returns the actions definition of the charm.

func (*Charm) BundleSha256

func (c *Charm) BundleSha256() string

BundleSha256 returns the SHA256 digest of the charm bundle bytes.

func (*Charm) Config

func (c *Charm) Config() *charm.Config

Config returns the configuration of the charm.

func (*Charm) IsPlaceholder

func (c *Charm) IsPlaceholder() bool

IsPlaceholder returns whether the charm record is just a placeholder rather than representing a deployed charm.

func (*Charm) IsUploaded

func (c *Charm) IsUploaded() bool

IsUploaded returns whether the charm has been uploaded to the model storage. Response is only valid when the charm is not a placeholder. TODO - hml - 29-Mar-2023 Find a better answer than not pendingupload. Currently this method returns true for placeholder charm docs as well, thus the result cannot be evaluated independently.

func (*Charm) LXDProfile

func (c *Charm) LXDProfile() *charm.LXDProfile

LXDProfile returns the lxd profile definition of the charm.

func (*Charm) Life

func (c *Charm) Life() Life

Life returns the charm's life state.

func (*Charm) Manifest

func (c *Charm) Manifest() *charm.Manifest

Manifest returns information resulting from the charm build process such as the bases on which it can run.

func (*Charm) Meta

func (c *Charm) Meta() *charm.Meta

Meta returns the metadata of the charm.

func (*Charm) Refresh

func (c *Charm) Refresh() error

Refresh loads fresh charm data from the database. In practice, the only observable change should be to its Life value.

func (*Charm) Revision

func (c *Charm) Revision() int

Revision returns the monotonically increasing charm revision number. Parse the charm's URL on demand, if required.

func (*Charm) StoragePath

func (c *Charm) StoragePath() string

StoragePath returns the storage path of the charm bundle.

func (*Charm) Tag

func (c *Charm) Tag() names.Tag

Tag returns a tag identifying the charm. Implementing state.GlobalEntity interface.

func (*Charm) URL

func (c *Charm) URL() string

URL returns a string which identifies the charm The string will parse into a charm.URL if required

func (*Charm) Version

func (c *Charm) Version() string

Version returns the charm version.

type CharmInfo

type CharmInfo struct {
	Charm       charm.Charm
	ID          string
	StoragePath string
	SHA256      string
	Version     string
}

CharmInfo contains all the data necessary to store a charm's metadata.

type CharmOrigin

type CharmOrigin struct {
	Source   string    `bson:"source"`
	Type     string    `bson:"type,omitempty"`
	ID       string    `bson:"id"`
	Hash     string    `bson:"hash"`
	Revision *int      `bson:"revision,omitempty"`
	Channel  *Channel  `bson:"channel,omitempty"`
	Platform *Platform `bson:"platform"`
}

CharmOrigin holds the original source of a charm. Information about where the charm was installed from (charm-hub, local) and any additional information we can utilise when making modelling decisions for upgrading or changing. Note: InstanceKey should never be added here. See core charm origin definition.

func (CharmOrigin) AsCoreCharmOrigin

func (o CharmOrigin) AsCoreCharmOrigin() corecharm.Origin

AsCoreCharmOrigin converts a state Origin type into a core/charm.Origin.

type CharmRef

type CharmRef interface {
	Meta() *charm.Meta
	Manifest() *charm.Manifest
}

CharmRef is an indirection to a charm, this allows us to pass in a charm, without having a full concrete charm.

type CharmRefFull

type CharmRefFull interface {
	CharmRef

	Actions() *charm.Actions
	Config() *charm.Config
	Revision() int
	URL() string
	Version() string
}

CharmRefFull is actually almost a full charm with addition information. This is purely here as a hack to push a charm from the dqlite layer to the state layer. Deprecated: This is an abomination and should be removed.

type CharmService

type CharmService interface {
	// GetCharm returns the charm using the charm ID.
	// Calling this method will return all the data associated with the charm.
	// It is not expected to call this method for all calls, instead use the move
	// focused and specific methods. That's because this method is very expensive
	// to call. This is implemented for the cases where all the charm data is
	// needed; model migration, charm export, etc.
	GetCharm(ctx context.Context, id corecharm.ID) (charm.Charm, applicationcharm.CharmLocator, bool, error)
	// GetCharmID returns a charm ID by name, source and revision. It returns an
	// error if the charm can not be found.
	// This can also be used as a cheap way to see if a charm exists without
	// needing to load the charm metadata.
	GetCharmID(ctx context.Context, args applicationcharm.GetCharmArgs) (corecharm.ID, error)
}

CharmService represents a service for retrieving charms.

type CloudContainer

type CloudContainer interface {
	// Unit returns the name of the unit for this container.
	Unit() string

	// ProviderId returns the id assigned to the container/pod
	// by the cloud.
	ProviderId() string

	// Address returns the container address.
	Address() *network.SpaceAddress

	// Ports returns the open container ports.
	Ports() []string
}

CloudContainer represents the state of a CAAS container, eg pod.

type CloudService

type CloudService struct {
	// contains filtered or unexported fields
}

CloudService is an implementation of CloudService.

func (*CloudService) Addresses

func (c *CloudService) Addresses() network.SpaceAddresses

Addresses implements CloudServicer.

func (*CloudService) CloudService

func (c *CloudService) CloudService() (*CloudService, error)

CloudService return the content of cloud service from the underlying state. It returns an error that satisfies errors.IsNotFound if the cloud service has been removed.

func (*CloudService) DesiredScaleProtected

func (c *CloudService) DesiredScaleProtected() bool

DesiredScaleProtected implements CloudServicer.

func (*CloudService) Generation

func (c *CloudService) Generation() int64

Generation implements CloudServicer.

func (*CloudService) Id

func (c *CloudService) Id() string

Id implements CloudServicer.

func (*CloudService) ProviderId

func (c *CloudService) ProviderId() string

ProviderId implements CloudServicer.

func (*CloudService) Refresh

func (c *CloudService) Refresh() error

Refresh refreshes the content of cloud service from the underlying state. It returns an error that satisfies errors.IsNotFound if the cloud service has been removed.

func (*CloudService) Watch

func (c *CloudService) Watch() NotifyWatcher

Watch returns a watcher for observing changes to a controller service.

type CloudServicer

type CloudServicer interface {
	// ProviderId returns the id assigned to the service
	// by the cloud.
	ProviderId() string

	// Addresses returns the service addresses.
	Addresses() network.SpaceAddresses

	// Generation returns the service config generation.
	Generation() int64

	// DesiredScaleProtected indicates if current desired scale in application has been applied to the cluster.
	DesiredScaleProtected() bool
}

CloudServicer represents the state of a CAAS service.

type CollectionInfo

type CollectionInfo struct {
	// contains filtered or unexported fields
}

CollectionInfo describes important features of a collection.

type CollectionSchema

type CollectionSchema map[string]CollectionInfo

CollectionSchema defines the set of collections used in juju.

func (CollectionSchema) Create

func (schema CollectionSchema) Create(
	db *mgo.Database,
	settings *controller.Config,
) error

Create causes all recorded collections to be created and indexed as specified

type Constraints

type Constraints struct {
	// contains filtered or unexported fields
}

Constraints represents the state of a constraints with an ID.

func (*Constraints) ChangeSpaceNameOps

func (c *Constraints) ChangeSpaceNameOps(from, to string) []txn.Op

ChangeSpaceNameOps returns the transaction operations required to rename a space used in these constraints.

func (*Constraints) ID

func (c *Constraints) ID() string

ID returns the Mongo document ID for the constraints instance.

func (*Constraints) Value

func (c *Constraints) Value() constraints.Value

Value returns the constraints.Value represented by the Constraints' Mongo document.

type Controller

type Controller struct {
	// contains filtered or unexported fields
}

Controller encapsulates state for the Juju controller as a whole, as opposed to model specific functionality.

This type is primarily used in the state.Initialize function, and in the yet to be hooked up controller worker.

func Initialize

func Initialize(args InitializeParams) (_ *Controller, err error)

Initialize sets up the database with all the collections and indices it needs. It also creates the initial model for the controller. This needs to be performed only once for the initial controller model. It returns unauthorizedError if access is unauthorized.

func NewController

func NewController(pool *StatePool) *Controller

NewController returns a controller object that doesn't own the state pool it has been given. This is for convenience at this time to get access to controller methods.

func OpenController

func OpenController(args OpenParams) (*Controller, error)

OpenController connects to the server with the given parameters, waits for it to be initialized, and returns a new Controller instance.

OpenController returns unauthorizedError if access is unauthorized.

func (*Controller) Close

func (ctlr *Controller) Close() error

Close the connection to the database.

func (*Controller) GetState

func (ctlr *Controller) GetState(modelTag names.ModelTag) (*PooledState, error)

GetState returns a new State instance for the specified model. The connection uses the same credentials and policy as the Controller.

func (*Controller) Import

func (ctrl *Controller) Import(
	model description.Model, controllerConfig controller.Config,
) (_ *Model, _ *State, err error)

Import the database agnostic model representation into the database.

func (*Controller) NewModel

func (ctlr *Controller) NewModel(args ModelArgs) (_ *Model, _ *State, err error)

NewModel creates a new model with its own UUID and prepares it for use. Model and State instances for the new model are returned.

The controller model's UUID is attached to the new model's document. Having the server UUIDs stored with each model document means that we have a way to represent external models, perhaps for future use around cross model relations.

func (*Controller) Ping

func (ctlr *Controller) Ping() error

Ping probes the Controller's database connection to ensure that it is still alive.

func (*Controller) StatePool

func (ctlr *Controller) StatePool() *StatePool

StatePool provides access to the state pool of the controller.

func (*Controller) SystemState

func (ctlr *Controller) SystemState() (*State, error)

SystemState returns the State object for the controller model.

type ControllerInfo

type ControllerInfo struct {
	// CloudName is the name of the cloud to which this controller is deployed.
	CloudName string

	// ModelTag identifies the initial model. Only the initial
	// model is able to have machines that manage state. The initial
	// model is the model that is created when bootstrapping.
	ModelTag names.ModelTag

	// ControllerIds holds the ids of all the controller nodes.
	// It's main purpose is to allow assertions tha the set of
	// controllers hasn't changed when adding/removing controller nodes.
	ControllerIds []string
}

ControllerInfo holds information about currently configured controller machines.

type ControllerNode

type ControllerNode interface {
	Id() string
	Tag() names.Tag
	Refresh() error
	WantsVote() bool
	HasVote() bool
	SetHasVote(hasVote bool) error
	Watch() NotifyWatcher
	SetMongoPassword(password string) error
}

ControllerNode represents an instance of a HA controller.

type ControllersChanges

type ControllersChanges struct {
	Added      []string
	Removed    []string
	Maintained []string
	Converted  []string
}

ControllersChanges in controllers after the ensure availability txn has committed.

type Database

type Database interface {

	// Copy returns a matching Database with its own session, and a
	// func that must be called when the Database is no longer needed.
	//
	// GetCollection and TransactionRunner results from the resulting Database
	// will all share a session; this does not absolve you of responsibility
	// for calling those collections' closers.
	Copy() (Database, SessionCloser)

	// CopyForModel returns a matching Database with its own session and
	// its own modelUUID and a func that must be called when the Database is no
	// longer needed.
	//
	// Same warnings apply for CopyForModel than for Copy.
	CopyForModel(modelUUID string) (Database, SessionCloser)

	// GetCollection returns the named Collection, and a func that must be
	// called when the Collection is no longer needed. The returned Collection
	// might or might not have its own session, depending on the Database; the
	// closer must always be called regardless.
	//
	// If the schema specifies model-filtering for the named collection,
	// the returned collection will automatically filter queries; for details,
	// see modelStateCollection.
	GetCollection(name string) (mongo.Collection, SessionCloser)

	// GetCollectionFor returns the named collection, scoped for the
	// model specified. As for GetCollection, a closer is also returned.
	GetCollectionFor(modelUUID, name string) (mongo.Collection, SessionCloser)

	// GetRawCollection returns the named mgo Collection. As no
	// automatic model filtering is performed by the returned
	// collection it should be rarely used. GetCollection() should be
	// used in almost all cases.
	GetRawCollection(name string) (*mgo.Collection, SessionCloser)

	// TransactionRunner returns a runner responsible for making changes to
	// the database, and a func that must be called when the runner is no longer
	// needed. The returned Runner might or might not have its own session,
	// depending on the Database; the closer must always be called regardless.
	//
	// It will reject transactions that reference raw-access (or unknown)
	// collections; it will automatically rewrite operations that reference
	// non-global collections; and it will ensure that non-global documents can
	// only be inserted while the corresponding model is still Alive.
	TransactionRunner() (jujutxn.Runner, SessionCloser)

	// RunTransaction is a convenience method for running a single
	// transaction.
	RunTransaction(ops []txn.Op) error

	// RunTransactionFor is a convenience method for running a single
	// transaction for the model specified.
	RunTransactionFor(modelUUID string, ops []txn.Op) error

	// RunRawTransaction is a convenience method that will run a
	// single transaction using a "raw" transaction runner that won't
	// perform model filtering.
	RunRawTransaction(ops []txn.Op) error

	// Run is a convenience method running a transaction using a
	// transaction building function.
	Run(transactions jujutxn.TransactionSource) error

	// Run is a convenience method running a transaction using a
	// transaction building function using a "raw" transaction runner
	// that won't perform model filtering.
	RunRaw(transactions jujutxn.TransactionSource) error

	// Schema returns the schema used to load the database. The returned schema
	// is not a copy and must not be modified.
	Schema() CollectionSchema
}

Database exposes the mongodb capabilities that most of state should see.

type DestroyApplicationOperation

type DestroyApplicationOperation struct {

	// DestroyStorage controls whether or not storage attached
	// to units of the application are destroyed. If this is false,
	// then detachable storage will be detached and left in the model.
	DestroyStorage bool

	// RemoveOffers controls whether or not application offers
	// are removed. If this is false, then the operation will
	// fail if there are any offers remaining.
	RemoveOffers bool

	// CleanupIgnoringResources is true if this operation has been
	// scheduled by a forced cleanup task.
	CleanupIgnoringResources bool

	// Removed is true if the application is removed during destroy.
	Removed bool

	// PostDestroyAppLife is the life of the app if destroy completes without error.
	PostDestroyAppLife Life

	// ForcedOperation stores needed information to force this operation.
	ForcedOperation
	// contains filtered or unexported fields
}

DestroyApplicationOperation is a model operation for destroying an application.

func (*DestroyApplicationOperation) Build

func (op *DestroyApplicationOperation) Build(attempt int) ([]txn.Op, error)

Build is part of the ModelOperation interface.

func (*DestroyApplicationOperation) Done

func (op *DestroyApplicationOperation) Done(err error) error

Done is part of the ModelOperation interface.

type DestroyModelParams

type DestroyModelParams struct {
	// DestroyHostedModels controls whether or not hosted models
	// are destroyed also. This only applies to the controller
	// model.
	//
	// If this is false when destroying the controller model,
	// there must be no hosted models, or an error satisfying
	// HasHostedModelsError will be returned.
	//
	// TODO(axw) this should be moved to the Controller type.
	DestroyHostedModels bool

	// DestroyStorage controls whether or not storage in the
	// model (and hosted models, if DestroyHostedModels is true)
	// should be destroyed.
	//
	// This is ternary: nil, false, or true. If nil and
	// there is persistent storage in the model (or hosted
	// models), an error satisfying PersistentStorageError
	// will be returned.
	DestroyStorage *bool

	// Force specifies whether model destruction will be forced, i.e.
	// keep going despite operational errors.
	Force *bool

	// MaxWait specifies the amount of time that each step in model destroy process
	// will wait before forcing the next step to kick-off. This parameter
	// only makes sense in combination with 'force' set to 'true'.
	MaxWait time.Duration

	Timeout *time.Duration
}

DestroyModelParams contains parameters for destroy a model.

type DestroyRelationOperation

type DestroyRelationOperation struct {
	// ForcedOperation stores needed information to force this operation.
	ForcedOperation
	// contains filtered or unexported fields
}

DestroyRelationOperation is a model operation destroy relation.

func (*DestroyRelationOperation) Build

func (op *DestroyRelationOperation) Build(attempt int) ([]txn.Op, error)

Build is part of the ModelOperation interface.

func (*DestroyRelationOperation) Done

func (op *DestroyRelationOperation) Done(err error) error

Done is part of the ModelOperation interface.

type DestroyRemoteApplicationOperation

type DestroyRemoteApplicationOperation struct {
	// ForcedOperation stores needed information to force this operation.
	ForcedOperation
	// contains filtered or unexported fields
}

DestroyRemoteApplicationOperation is a model operation to destroy a remote application.

func (*DestroyRemoteApplicationOperation) Build

func (op *DestroyRemoteApplicationOperation) Build(attempt int) ([]txn.Op, error)

Build is part of the ModelOperation interface.

func (*DestroyRemoteApplicationOperation) Done

Done is part of the ModelOperation interface.

type DestroyUnitOperation

type DestroyUnitOperation struct {
	// ForcedOperation stores needed information to force this operation.
	ForcedOperation

	// DestroyStorage controls whether or not storage attached
	// to the unit is destroyed. If this is false, then detachable
	// storage will be detached and left in the model.
	DestroyStorage bool

	// Removed is true if the application is removed during destroy.
	Removed bool

	// Store is the object store to use for blob access.
	Store objectstore.ObjectStore
	// contains filtered or unexported fields
}

DestroyUnitOperation is a model operation for destroying a unit.

func (*DestroyUnitOperation) Build

func (op *DestroyUnitOperation) Build(attempt int) ([]txn.Op, error)

Build is part of the ModelOperation interface.

func (*DestroyUnitOperation) Done

func (op *DestroyUnitOperation) Done(err error) error

Done is part of the ModelOperation interface.

type DeviceConstraints

type DeviceConstraints struct {

	// Type is the device type or device-class.
	// currently supported types are
	// - gpu
	// - nvidia.com/gpu
	// - amd.com/gpu
	Type DeviceType `bson:"type"`

	// Count is the number of devices that the user has asked for - count min and max are the
	// number of devices the charm requires.
	Count int64 `bson:"count"`

	// Attributes is a collection of key value pairs device related (node affinity labels/tags etc.).
	Attributes map[string]string `bson:"attributes"`
}

DeviceConstraints describes a set of device constraints.

type DeviceType

type DeviceType string

type DocModelNamespace

type DocModelNamespace interface {
	DocID(string) string
}

DocModelNamespace takes a document model ID and ensures it has a model id associated with the model.

type Endpoint

type Endpoint struct {
	ApplicationName string
	// TODO: thumper 2016-06-27
	// This is pure evil and we should not be storing structures from
	// external packages directly in mongo.
	charm.Relation
}

Endpoint represents one endpoint of a relation.

func ApplicationOfferEndpoint

func ApplicationOfferEndpoint(offer crossmodel.ApplicationOffer, relationName string) (Endpoint, error)

ApplicationOfferEndpoint returns from the specified offer, the relation endpoint with the supplied name, if it exists.

func (Endpoint) CanRelateTo

func (ep Endpoint) CanRelateTo(other Endpoint) bool

CanRelateTo returns whether a relation may be established between e and other.

func (Endpoint) String

func (ep Endpoint) String() string

String returns the unique identifier of the relation endpoint.

type EnsureDeader

type EnsureDeader interface {
	EnsureDead() error
}

EnsureDeader with an EnsureDead method.

type Entity

type Entity interface {
	Tag() names.Tag
}

Entity represents any entity that can be returned by State.FindEntity. All entities have a tag.

type EntityFinder

type EntityFinder interface {
	FindEntity(names.Tag) (Entity, error)
}

EntityFinder is implemented by *State. See State.FindEntity for documentation on the method.

type EntityWithApplication

type EntityWithApplication interface {
	Application() (*Application, error)
}

EntityWithApplication is implemented by Units it is intended for anything that can return its Application.

type ExportConfig

type ExportConfig struct {
	IgnoreIncompleteModel    bool
	SkipActions              bool
	SkipAnnotations          bool
	SkipCloudImageMetadata   bool
	SkipCredentials          bool
	SkipIPAddresses          bool
	SkipSettings             bool
	SkipSSHHostKeys          bool
	SkipStatusHistory        bool
	SkipLinkLayerDevices     bool
	SkipUnitAgentBinaries    bool
	SkipMachineAgentBinaries bool
	SkipRelationData         bool
	SkipInstanceData         bool
	SkipApplicationOffers    bool
	SkipOfferConnections     bool
	SkipSecrets              bool
}

ExportConfig allows certain aspects of the model to be skipped during the export. The intent of this is to be able to get a partial export to support other API calls, like status.

type ExportStateMigration

type ExportStateMigration struct {
	// contains filtered or unexported fields
}

ExportStateMigration defines a migration for exporting various entities into a destination description model from the source state. It accumulates a series of migrations to run at a later time. Running the state migration visits all the migrations and exits upon seeing the first error from the migration.

func (*ExportStateMigration) Add

func (m *ExportStateMigration) Add(f func() error)

Add adds a migration to execute at a later time Return error from the addition will cause the Run to terminate early.

func (*ExportStateMigration) Run

func (m *ExportStateMigration) Run() error

Run executes all the migrations required to be run.

type ExposedEndpoint

type ExposedEndpoint struct {
	// A list of spaces that should be able to reach the opened ports
	// for an exposed application's endpoint.
	ExposeToSpaceIDs []string `bson:"to-space-ids,omitempty"`

	// A list of CIDRs that should be able to reach the opened ports
	// for an exposed application's endpoint.
	ExposeToCIDRs []string `bson:"to-cidrs,omitempty"`
}

ExposedEndpoint encapsulates the expose-related details of a particular application endpoint with respect to the sources (CIDRs or space IDs) that should be able to access the ports opened by the application charm for an endpoint.

func (ExposedEndpoint) AllowTrafficFromAnyNetwork

func (exp ExposedEndpoint) AllowTrafficFromAnyNetwork() bool

AllowTrafficFromAnyNetwork returns true if the exposed endpoint parameters include the 0.0.0.0/0 CIDR.

type Filesystem

type Filesystem interface {
	GlobalEntity
	Lifer
	status.StatusGetter
	status.StatusSetter

	// FilesystemTag returns the tag for the filesystem.
	FilesystemTag() names.FilesystemTag

	// Storage returns the tag of the storage instance that this
	// filesystem is assigned to, if any. If the filesystem is not
	// assigned to a storage instance, an error satisfying
	// errors.IsNotAssigned will be returned.
	//
	// A filesystem can be assigned to at most one storage instance, and
	// a storage instance can have at most one associated filesystem.
	Storage() (names.StorageTag, error)

	// Volume returns the tag of the volume backing this filesystem,
	// or ErrNoBackingVolume if the filesystem is not backed by a volume
	// managed by Juju.
	Volume() (names.VolumeTag, error)

	// Info returns the filesystem's FilesystemInfo, or a NotProvisioned
	// error if the filesystem has not yet been provisioned.
	Info() (FilesystemInfo, error)

	// Params returns the parameters for provisioning the filesystem,
	// if it needs to be provisioned. Params returns true if the returned
	// parameters are usable for provisioning, otherwise false.
	Params() (FilesystemParams, bool)

	// Detachable reports whether or not the filesystem is detachable.
	Detachable() bool

	// Releasing reports whether or not the filesystem is to be released
	// from the model when it is Dying/Dead.
	Releasing() bool
}

Filesystem describes a filesystem in the model. Filesystems may be backed by a volume, and managed by Juju; otherwise they are first-class entities managed by a filesystem provider.

type FilesystemAttachment

type FilesystemAttachment interface {
	Lifer

	// Filesystem returns the tag of the related Filesystem.
	Filesystem() names.FilesystemTag

	// Host returns the tag of the entity to which this attachment belongs.
	Host() names.Tag

	// Info returns the filesystem attachment's FilesystemAttachmentInfo, or a
	// NotProvisioned error if the attachment has not yet been made.
	//
	// Note that the presence of FilesystemAttachmentInfo does not necessarily
	// imply that the filesystem is mounted; model storage providers may
	// need to prepare a filesystem for attachment to a machine before it can
	// be mounted.
	Info() (FilesystemAttachmentInfo, error)

	// Params returns the parameters for creating the filesystem attachment,
	// if it has not already been made. Params returns true if the returned
	// parameters are usable for creating an attachment, otherwise false.
	Params() (FilesystemAttachmentParams, bool)
}

FilesystemAttachment describes an attachment of a filesystem to a machine.

type FilesystemAttachmentInfo

type FilesystemAttachmentInfo struct {
	// MountPoint is the path at which the filesystem is mounted on the
	// machine. MountPoint may be empty, meaning that the filesystem is
	// not mounted yet.
	MountPoint string `bson:"mountpoint"`
	ReadOnly   bool   `bson:"read-only"`
}

FilesystemAttachmentInfo describes information about a filesystem attachment.

type FilesystemAttachmentParams

type FilesystemAttachmentParams struct {
	Location string `bson:"location"`
	ReadOnly bool   `bson:"read-only"`
	// contains filtered or unexported fields
}

FilesystemAttachmentParams records parameters for attaching a filesystem to a machine.

type FilesystemInfo

type FilesystemInfo struct {
	Size uint64 `bson:"size"`
	Pool string `bson:"pool"`

	// FilesystemId is the provider-allocated unique ID of the
	// filesystem. This will be the string representation of
	// the filesystem tag for filesystems backed by volumes.
	FilesystemId string `bson:"filesystemid"`
}

FilesystemInfo describes information about a filesystem.

type FilesystemParams

type FilesystemParams struct {
	Pool string `bson:"pool"`
	Size uint64 `bson:"size"`
	// contains filtered or unexported fields
}

FilesystemParams records parameters for provisioning a new filesystem.

type ForcedOperation

type ForcedOperation struct {
	// Force controls whether or not the removal of a unit
	// will be forced, i.e. ignore operational errors.
	Force bool

	// Errors contains errors encountered while applying this operation.
	// Generally, these are non-fatal errors that have been encountered
	// during, say, force. They may not have prevented the operation from being
	// aborted but the user might still want to know about them.
	Errors []error

	// MaxWait specifies the amount of time that each step in relation destroy process
	// will wait before forcing the next step to kick-off. This parameter
	// only makes sense in combination with 'force' set to 'true'.
	MaxWait time.Duration
}

ForcedOperation that allows accumulation of operational errors and can be forced.

func (*ForcedOperation) AddError

func (op *ForcedOperation) AddError(one ...error)

AddError adds an error to the collection of errors for this operation.

func (*ForcedOperation) FatalError

func (op *ForcedOperation) FatalError(err error) bool

FatalError returns true if the err is not nil and Force is false. If the error is not nil, it's added to the slice of errors for the operation.

func (*ForcedOperation) LastError

func (op *ForcedOperation) LastError() error

LastError returns last added error for this operation.

type GlobalEntity

type GlobalEntity interface {
	Tag() names.Tag
	// contains filtered or unexported methods
}

GlobalEntity specifies entity.

type HistoryGetter

type HistoryGetter struct {
	// contains filtered or unexported fields
}

HistoryGetter allows getting the status history based on some identifying key.

func (*HistoryGetter) StatusHistory

func (g *HistoryGetter) StatusHistory(filter status.StatusHistoryFilter) ([]status.StatusInfo, error)

StatusHistory implements status.StatusHistoryGetter.

type HostFilesystemParams

type HostFilesystemParams struct {
	Filesystem FilesystemParams
	Attachment FilesystemAttachmentParams
}

HostFilesystemParams holds the parameters for creating a filesystem and attaching it to a new host.

type HostVolumeParams

type HostVolumeParams struct {
	Volume     VolumeParams
	Attachment VolumeAttachmentParams
}

HostVolumeParams holds the parameters for creating a volume and attaching it to a new host.

type ImportApplicationOffer

type ImportApplicationOffer struct {
}

ImportApplicationOffer describes a way to import application offers from a description.

func (ImportApplicationOffer) Execute

Execute the import on the application offer description, carefully modelling the dependencies we have.

type ImportRelationNetworks

type ImportRelationNetworks struct{}

ImportRelationNetworks describes a way to import relation networks from a description.

func (ImportRelationNetworks) Execute

Execute the import on the relation networks description, carefully modelling the dependencies we have.

type ImportRemoteApplications

type ImportRemoteApplications struct{}

ImportRemoteApplications describes a way to import remote applications from a description.

func (ImportRemoteApplications) Execute

Execute the import on the remote entities description, carefully modelling the dependencies we have.

type ImportRemoteEntities

type ImportRemoteEntities struct{}

ImportRemoteEntities describes a way to import remote entities from a description.

func (*ImportRemoteEntities) Execute

Execute the import on the remote entities description, carefully modelling the dependencies we have.

type ImportStateMigration

type ImportStateMigration struct {
	// contains filtered or unexported fields
}

ImportStateMigration defines a migration for importing various entities from a source description model to the destination state. It accumulates a series of migrations to Run at a later time. Running the state migration visits all the migrations and exits upon seeing the first error from the migration.

func (*ImportStateMigration) Add

func (m *ImportStateMigration) Add(f func() error)

Add adds a migration to execute at a later time Return error from the addition will cause the Run to terminate early.

func (*ImportStateMigration) Run

func (m *ImportStateMigration) Run() error

Run executes all the migrations required to be run.

type InitDatabaseFunc

type InitDatabaseFunc func(*mgo.Session, string, *controller.Config) error

InitDatabaseFunc defines a function used to create the collections and indices in a Juju database.

type InitializeParams

type InitializeParams struct {
	// Clock wraps all calls time. Real uses use clock.WallClock,
	// tests may override with a testing clock.
	Clock clock.Clock

	// ControllerModelArgs contains the arguments for creating
	// the controller model.
	ControllerModelArgs ModelArgs

	// StoragePools is one or more named storage pools to create
	// in the controller model.
	StoragePools map[string]storage.Attrs

	// CloudName contains the name of the cloud that the
	// controller runs in.
	CloudName string

	// ControllerConfig contains config attributes for
	// the controller.
	ControllerConfig controller.Config

	// ControllerInheritedConfig contains default config attributes for
	// models on the specified cloud.
	ControllerInheritedConfig map[string]interface{}

	// RegionInheritedConfig contains region specific configuration for
	// models running on specific cloud regions.
	RegionInheritedConfig cloud.RegionConfig

	// NewPolicy is a function that returns the set of state policies
	// to apply.
	NewPolicy NewPolicyFunc

	// MongoSession is the mgo.Session to use for storing and
	// accessing state data. The caller remains responsible
	// for closing this session; Initialize will copy it.
	MongoSession *mgo.Session

	// MaxTxnAttempts is the number of attempts when running transactions
	// against mongo. OpenStatePool defaults this if 0.
	MaxTxnAttempts int

	// WatcherPollInterval is the duration of TxnWatcher long-polls. TxnWatcher
	// defaults this if 0.
	WatcherPollInterval time.Duration

	// AdminPassword holds the password for the initial user.
	AdminPassword string

	// Note(nvinuesa): Having a dqlite domain service here is an awful hack
	// and should disapear as soon as we migrate units and applications.
	CharmServiceGetter func(modelUUID coremodel.UUID) CharmService
}

InitializeParams contains the parameters for initializing the state database.

func (InitializeParams) Validate

func (p InitializeParams) Validate() error

Validate checks that the state initialization parameters are valid.

type InstanceIdGetter

type InstanceIdGetter interface {
	InstanceId() (instance.Id, error)
}

InstanceIdGetter defines a single method - InstanceId.

type LXDProfile

type LXDProfile struct {
	Config      map[string]string            `bson:"config"`
	Description string                       `bson:"description"`
	Devices     map[string]map[string]string `bson:"devices"`
}

LXDProfile is the same as ProfilePut defined in github.com/canonical/lxd/shared/api/profile.go

func (*LXDProfile) Empty

func (profile *LXDProfile) Empty() bool

Empty returns true if neither devices nor config have been defined in the profile.

func (*LXDProfile) ValidateConfigDevices

func (profile *LXDProfile) ValidateConfigDevices() error

ValidateConfigDevices validates the Config and Devices properties of the LXDProfile. WhiteList devices: unix-char, unix-block, gpu, usb. BlackList config: boot*, limits* and migration*. An empty profile will not return an error. TODO (stickupkid): Remove this by moving this up into the API server layer.

type LeaveScopeOperation

type LeaveScopeOperation struct {
	// ForcedOperation stores needed information to force this operation.
	ForcedOperation
	// contains filtered or unexported fields
}

LeaveScopeOperation is a model operation for relation to leave scope.

func (*LeaveScopeOperation) Build

func (op *LeaveScopeOperation) Build(attempt int) ([]txn.Op, error)

Build is part of the ModelOperation interface.

func (*LeaveScopeOperation) Description

func (op *LeaveScopeOperation) Description() string

func (*LeaveScopeOperation) Done

func (op *LeaveScopeOperation) Done(err error) error

Done is part of the ModelOperation interface.

type Life

type Life int8

Life represents the lifecycle state of the entities Relation, Unit, Application and Machine.

const (
	Alive Life = iota
	Dying
	Dead
)

func LifeFromValue

func LifeFromValue(value life.Value) Life

LifeFromValue converts a life.Value into it's corresponding state.Life

func (Life) String

func (l Life) String() string

String is deprecated, use Value.

func (Life) Value

func (l Life) Value() life.Value

Value returns the core.life.Value type.

type LifeRefresher

type LifeRefresher interface {
	Life() Life
	Refresh() error
}

type Lifer

type Lifer interface {
	Life() Life
}

Lifer represents an entity with a life.

type LinkLayerDevice

type LinkLayerDevice struct {
	// contains filtered or unexported fields
}

LinkLayerDevice represents the state of a link-layer network device for a machine.

func (*LinkLayerDevice) AddAddressOps

func (dev *LinkLayerDevice) AddAddressOps(args LinkLayerDeviceAddress) ([]txn.Op, error)

AddAddressOps returns transaction operations required to add the input address to the device. TODO (manadart 2020-07-22): This method is currently used only for adding machine sourced addresses. If it is used in future to set provider addresses, the provider ID args must be included and the global ID collection must be maintained and verified.

func (*LinkLayerDevice) Addresses

func (dev *LinkLayerDevice) Addresses() ([]*Address, error)

Addresses returns all IP addresses assigned to the device.

func (*LinkLayerDevice) DocID

func (dev *LinkLayerDevice) DocID() string

DocID returns the globally unique ID of the link-layer device, including the model UUID as prefix.

func (*LinkLayerDevice) EthernetDeviceForBridge

func (dev *LinkLayerDevice) EthernetDeviceForBridge(
	name string, askProviderForAddress bool,
	allSubnets network.SubnetInfos,
) (network.InterfaceInfo, error)

EthernetDeviceForBridge returns an InterfaceInfo representing an ethernet device with the input name and this device as its parent. The detail supplied reflects whether the provider is expected to supply the interface's eventual address. If the device is not a bridge, an error is returned.

func (*LinkLayerDevice) ID

func (dev *LinkLayerDevice) ID() string

ID returns the unique ID of this device within the model.

func (*LinkLayerDevice) IsAutoStart

func (dev *LinkLayerDevice) IsAutoStart() bool

IsAutoStart returns whether the device is set to automatically start on boot.

func (*LinkLayerDevice) IsLoopbackDevice

func (dev *LinkLayerDevice) IsLoopbackDevice() bool

IsLoopbackDevice returns whether this is a loopback device.

func (*LinkLayerDevice) IsUp

func (dev *LinkLayerDevice) IsUp() bool

IsUp returns whether the device is currently up.

func (*LinkLayerDevice) MACAddress

func (dev *LinkLayerDevice) MACAddress() string

MACAddress returns the media access control (MAC) address of the device.

func (*LinkLayerDevice) MTU

func (dev *LinkLayerDevice) MTU() uint

MTU returns the maximum transmission unit the device can handle.

func (*LinkLayerDevice) Machine

func (dev *LinkLayerDevice) Machine() (*Machine, error)

Machine returns the Machine this device belongs to.

func (*LinkLayerDevice) MachineID

func (dev *LinkLayerDevice) MachineID() string

MachineID returns the ID of the machine this device belongs to.

func (*LinkLayerDevice) Name

func (dev *LinkLayerDevice) Name() string

Name returns the name of the device, as it appears on the machine.

func (*LinkLayerDevice) ParentDevice

func (dev *LinkLayerDevice) ParentDevice() (*LinkLayerDevice, error)

ParentDevice returns the LinkLayerDevice corresponding to the parent device of this device, if set. When no parent device name is set, it returns nil and no error.

func (*LinkLayerDevice) ParentID

func (dev *LinkLayerDevice) ParentID() string

ParentID uses the rules for ParentName (above) to return the ID of this device's parent if it has one.

func (*LinkLayerDevice) ParentName

func (dev *LinkLayerDevice) ParentName() string

ParentName returns the name of this device's parent device if set. The parent device is almost always on the same machine as the child device, but as a special case a child device on a container machine can have a parent bridge device on the container's host machine. In this case the global key of the parent device is returned.

func (*LinkLayerDevice) ProviderID

func (dev *LinkLayerDevice) ProviderID() network.Id

ProviderID returns the provider-specific device ID, if set.

func (*LinkLayerDevice) Remove

func (dev *LinkLayerDevice) Remove() (err error)

Remove removes the device, if it exists. No error is returned when the device was already removed. ErrParentDeviceHasChildren is returned if this device is a parent to one or more existing devices and therefore cannot be removed.

func (*LinkLayerDevice) RemoveAddresses

func (dev *LinkLayerDevice) RemoveAddresses() error

RemoveAddresses removes all IP addresses assigned to the device.

func (*LinkLayerDevice) RemoveOps

func (dev *LinkLayerDevice) RemoveOps() []txn.Op

RemoveOps returns transaction operations that will ensure that the device is not present in the collection and that if set, its provider ID is removed from the global register. Note that this method eschews responsibility for removing device addresses and for ensuring that this device has no children. That responsibility lies with the caller.

func (*LinkLayerDevice) SetProviderIDOps

func (dev *LinkLayerDevice) SetProviderIDOps(id network.Id) ([]txn.Op, error)

SetProviderIDOps returns the operations required to set the input provider ID for the link-layer device.

func (*LinkLayerDevice) String

func (dev *LinkLayerDevice) String() string

String returns a human-readable representation of the device.

func (*LinkLayerDevice) Type

Type returns this device's underlying type.

func (*LinkLayerDevice) UpdateOps

func (dev *LinkLayerDevice) UpdateOps(args LinkLayerDeviceArgs) []txn.Op

UpdateOps returns the transaction operations required to update the device so that it reflects the incoming arguments. This method is intended for updating a device based on args gleaned from the host/container directly. As such it does not update provider IDs. There are separate methods for generating those operations.

func (*LinkLayerDevice) VirtualPortType

func (dev *LinkLayerDevice) VirtualPortType() network.VirtualPortType

VirtualPortType returns the type of virtual port for the device if managed by a virtual switch.

type LinkLayerDeviceAddress

type LinkLayerDeviceAddress struct {
	// DeviceName is the name of the link-layer device that has this address.
	DeviceName string

	// ConfigMethod is the method used to configure this address.
	ConfigMethod corenetwork.AddressConfigType

	// ProviderID is the provider-specific ID of the address. Empty when not
	// supported. Cannot be changed once set to non-empty.
	ProviderID corenetwork.Id

	// ProviderNetworkID is the provider-specific network ID of the address.
	// It can be left empty if not supported or known.
	ProviderNetworkID corenetwork.Id

	// ProviderSubnetID is the provider-specific subnet ID to which the
	// device is attached.
	ProviderSubnetID corenetwork.Id

	// CIDRAddress is the IP address assigned to the device, in CIDR format
	// (e.g. 10.20.30.5/24 or fc00:1234::/64).
	CIDRAddress string

	// DNSServers contains a list of DNS nameservers to use, which can be empty.
	DNSServers []string

	// DNSSearchDomains contains a list of DNS domain names to qualify
	// hostnames, and can be empty.
	DNSSearchDomains []string

	// GatewayAddress is the address of the gateway to use, which can be empty.
	GatewayAddress string

	// IsDefaultGateway is set to true if this address on this device is the
	// default gw on a machine.
	IsDefaultGateway bool

	// Origin represents the authoritative source of the address.
	// it is set using precedence, with "provider" overriding "machine".
	// It is used to determine whether the address is no longer recognised
	// and is safe to remove.
	Origin corenetwork.Origin

	// IsSecondary if true, indicates that this address is
	// not the primary address associated with the NIC.
	IsSecondary bool
}

LinkLayerDeviceAddress contains an IP address assigned to a link-layer device.

type LinkLayerDeviceArgs

type LinkLayerDeviceArgs struct {
	// Name is the name of the device as it appears on the machine.
	Name string

	// MTU is the maximum transmission unit the device can handle.
	MTU uint

	// ProviderID is a provider-specific ID of the device. Empty when not
	// supported by the provider. Cannot be cleared once set.
	ProviderID corenetwork.Id

	// Type is the type of the underlying link-layer device.
	Type corenetwork.LinkLayerDeviceType

	// MACAddress is the media access control address for the device.
	MACAddress string

	// IsAutoStart is true if the device should be activated on boot.
	IsAutoStart bool

	// IsUp is true when the device is up (enabled).
	IsUp bool

	// ParentName is the name of the parent device, which may be empty. If set,
	// it needs to be an existing device on the same machine, unless the current
	// device is inside a container, in which case ParentName can be a global
	// key of a BridgeDevice on the host machine of the container. Traffic
	// originating from a device egresses from its parent device.
	ParentName string

	// If this is device is part of a virtual switch, this field indicates
	// the type of switch (e.g. an OVS bridge ) this port belongs to.
	VirtualPortType corenetwork.VirtualPortType
}

LinkLayerDeviceArgs contains the arguments accepted by Machine.SetLinkLayerDevices().

type Living

type Living interface {
	LifeRefresher
	Destroy(objectstore.ObjectStore) error
}

Living describes state entities with a lifecycle.

type Machine

type Machine struct {
	// contains filtered or unexported fields
}

Machine represents the state of a machine.

func (*Machine) Actions

func (m *Machine) Actions() ([]Action, error)

Actions is part of the ActionReceiver interface.

func (*Machine) AddLinkLayerDeviceOps

func (m *Machine) AddLinkLayerDeviceOps(
	devArgs LinkLayerDeviceArgs, addrArgs ...LinkLayerDeviceAddress,
) ([]txn.Op, error)

AddLinkLayerDeviceOps returns transaction operations for adding the input link-layer device and the supplied addresses to the machine. TODO (manadart 2020-07-22): This method is currently used only for adding machine sourced devices and addresses. If it is used in future to set provider devices, the provider ID args must be included and the global ID collection must be maintained and verified.

func (*Machine) AddPrincipal

func (m *Machine) AddPrincipal(name string)

AddPrincipal adds a principal to the machine.

func (*Machine) Addresses

func (m *Machine) Addresses() (addresses network.SpaceAddresses)

Addresses returns any hostnames and ips associated with a machine, determined both by the machine itself, and by asking the provider.

The addresses returned by the provider shadow any of the addresses that the machine reported with the same address value. Provider-reported addresses always come before machine-reported addresses. Duplicates are removed.

func (*Machine) AgentStartTime

func (m *Machine) AgentStartTime() time.Time

AgentStartTime returns the last recorded timestamp when the machine agent was started.

func (*Machine) AgentTools

func (m *Machine) AgentTools() (*tools.Tools, error)

AgentTools returns the tools that the agent is currently running. It returns an error that satisfies errors.IsNotFound if the tools have not yet been set.

func (*Machine) AllDeviceAddresses

func (m *Machine) AllDeviceAddresses() ([]*Address, error)

AllDeviceAddresses returns all known addresses assigned to link-layer devices on the machine.

func (*Machine) AllLinkLayerDevices

func (m *Machine) AllLinkLayerDevices() ([]*LinkLayerDevice, error)

AllLinkLayerDevices returns all exiting link-layer devices of the machine.

func (*Machine) AllProviderInterfaceInfos

func (m *Machine) AllProviderInterfaceInfos() ([]corenetwork.ProviderInterfaceInfo, error)

AllProviderInterfaceInfos returns the provider details for all of the link layer devices belonging to this machine. These can be used to identify the devices when interacting with the provider directly (for example, releasing container addresses).

func (*Machine) AllSpaces

func (m *Machine) AllSpaces(allSubnets network.SubnetInfos) (set.Strings, error)

AllSpaces returns the set of spaceIDs that this machine is actively connected to. TODO(jam): 2016-12-18 This should evolve to look at the LinkLayerDevices directly, instead of using the Addresses the devices are in to link back to spaces.

func (*Machine) ApplicationNames

func (m *Machine) ApplicationNames() ([]string, error)

ApplicationNames returns the names of applications represented by units running on the machine.

func (*Machine) AssertAliveOp

func (m *Machine) AssertAliveOp() txn.Op

AssertAliveOp returns an assert-only transaction operation that ensures the machine is alive.

func (*Machine) Base

func (m *Machine) Base() Base

Base returns the os base running on the machine.

func (*Machine) CancelAction

func (m *Machine) CancelAction(action Action) (Action, error)

CancelAction is part of the ActionReceiver interface.

func (*Machine) CheckProvisioned

func (m *Machine) CheckProvisioned(nonce string) bool

CheckProvisioned returns true if the machine was provisioned with the given nonce.

func (*Machine) Clean

func (m *Machine) Clean() bool

Clean returns true if the machine does not have any deployed units or containers.

func (*Machine) CompletedActions

func (m *Machine) CompletedActions() ([]Action, error)

CompletedActions is part of the ActionReceiver interface.

func (*Machine) Constraints

func (m *Machine) Constraints() (constraints.Value, error)

Constraints returns the exact constraints that should apply when provisioning an instance for the machine.

func (*Machine) ContainerType

func (m *Machine) ContainerType() instance.ContainerType

ContainerType returns the type of container hosting this machine.

func (*Machine) Containers

func (m *Machine) Containers() ([]string, error)

Containers returns the container ids belonging to a parent machine. TODO(wallyworld): move this method to a service

func (*Machine) Destroy

func (m *Machine) Destroy(_ objectstore.ObjectStore) error

Destroy sets the machine lifecycle to Dying if it is Alive. It does nothing otherwise. Destroy will fail if the machine has principal units assigned, or if the machine has JobManageModel. If the machine has assigned units, Destroy will return a HasAssignedUnitsError. If the machine has containers, Destroy will return HasContainersError.

func (*Machine) DestroyWithContainers

func (m *Machine) DestroyWithContainers() error

DestroyWithContainers sets the machine lifecycle to Dying if it is Alive. It does nothing otherwise. DestroyWithContainers will fail if the machine has principal units assigned, or if the machine has JobManageModel. If the machine has assigned units, DestroyWithContainers will return a HasAssignedUnitsError. The machine is allowed to have containers. Use with caution. Intended for model tear down.

func (*Machine) DocID

func (m *Machine) DocID() string

DocID returns the machine doc id. Deprecated: this is only used for migration to the domain model.

func (*Machine) EnsureDead

func (m *Machine) EnsureDead() error

EnsureDead sets the machine lifecycle to Dead if it is Alive or Dying. It does nothing otherwise. EnsureDead will fail if the machine has principal units assigned, or if the machine has JobManageModel. If the machine has assigned units, EnsureDead will return a HasAssignedUnitsError.

func (*Machine) FileSystems

func (m *Machine) FileSystems() []string

FileSystems returns the names of the filesystems attached to the machine.

func (*Machine) ForceDestroy

func (m *Machine) ForceDestroy(maxWait time.Duration) error

ForceDestroy queues the machine for complete removal, including the destruction of all units and containers on the machine.

func (*Machine) ForceDestroyed

func (m *Machine) ForceDestroyed() bool

ForceDestroyed returns whether the destruction of a dying/dead machine was forced. It's always false for a machine that's alive.

func (*Machine) Hostname

func (m *Machine) Hostname() string

Hostname returns the hostname reported by the machine agent.

func (*Machine) Id

func (m *Machine) Id() string

Id returns the machine id.

func (*Machine) InstanceKind

func (m *Machine) InstanceKind() string

InstanceKind returns a human readable name identifying the machine instance kind.

func (*Machine) InstanceStatus

func (m *Machine) InstanceStatus() (status.StatusInfo, error)

InstanceStatus returns the provider specific instance status for this machine, or a NotProvisionedError if instance is not yet provisioned.

func (*Machine) InstanceStatusHistory

func (m *Machine) InstanceStatusHistory(filter status.StatusHistoryFilter) ([]status.StatusInfo, error)

InstanceStatusHistory returns a slice of at most filter.Size StatusInfo items or items as old as filter.Date or items newer than now - filter.Delta time representing past statuses for this machine instance. Instance represents the provider underlying [v]hardware or container where this juju machine is deployed.

func (*Machine) IsContainer

func (m *Machine) IsContainer() bool

IsContainer returns true if the machine is a container.

func (*Machine) IsManager

func (m *Machine) IsManager() bool

IsManager returns true if the machine has JobManageModel.

func (*Machine) IsManual

func (m *Machine) IsManual() (bool, error)

IsManual returns true if the machine was manually provisioned.

func (*Machine) Jobs

func (m *Machine) Jobs() []MachineJob

Jobs returns the responsibilities that must be fulfilled by m's agent.

func (*Machine) Kind

func (m *Machine) Kind() string

Kind returns a human readable name identifying the machine kind.

func (*Machine) Life

func (m *Machine) Life() Life

Life returns whether the machine is Alive, Dying or Dead.

func (*Machine) LinkLayerDevice

func (m *Machine) LinkLayerDevice(name string) (*LinkLayerDevice, error)

LinkLayerDevice returns the link-layer device matching the given name. An error satisfying errors.IsNotFound() is returned when no such device exists on the machine.

func (*Machine) MachineAddresses

func (m *Machine) MachineAddresses() (addresses network.SpaceAddresses)

MachineAddresses returns any hostnames and ips associated with a machine, determined by asking the machine itself.

func (*Machine) MachineTag

func (m *Machine) MachineTag() names.MachineTag

MachineTag returns the more specific MachineTag type as opposed to the more generic Tag type.

func (*Machine) MarkForRemoval

func (m *Machine) MarkForRemoval() (err error)

MarkForRemoval requests that this machine be removed after any needed provider-level cleanup is done.

func (*Machine) ModelUUID

func (m *Machine) ModelUUID() string

ModelUUID returns the unique identifier for the model that this machine is in.

func (*Machine) ModificationKind

func (m *Machine) ModificationKind() string

ModificationKind returns the human readable kind string we use for when an lxd profile is applied on a machine..

func (*Machine) ModificationStatus

func (m *Machine) ModificationStatus() (status.StatusInfo, error)

ModificationStatus returns the provider specific modification status for this machine or NotProvisionedError if instance is not yet provisioned.

func (*Machine) ParentId

func (m *Machine) ParentId() (string, bool)

ParentId returns the Id of the host machine if this machine is a container.

func (*Machine) PasswordValid

func (m *Machine) PasswordValid(password string) bool

PasswordValid returns whether the given password is valid for the given machine.

func (*Machine) PendingActions

func (m *Machine) PendingActions() ([]Action, error)

PendingActions is part of the ActionReceiver interface.

func (*Machine) Placement

func (m *Machine) Placement() string

Placement returns the machine's Placement structure that should be used when provisioning an instance for the machine.

func (*Machine) PrepareActionPayload

func (m *Machine) PrepareActionPayload(name string, payload map[string]interface{}, parallel *bool, executionGroup *string) (map[string]interface{}, bool, string, error)

PrepareActionPayload returns the payload to use in creating an action for this machine. Note that the use of spec.InsertDefaults mutates payload.

func (*Machine) Principals

func (m *Machine) Principals() []string

Principals returns the principals for the machine.

func (*Machine) PrivateAddress

func (m *Machine) PrivateAddress() (network.SpaceAddress, error)

PrivateAddress returns a private address for the machine. If no address is available it returns an error that satisfies network.IsNoAddressError().

func (*Machine) ProviderAddresses

func (m *Machine) ProviderAddresses() (addresses network.SpaceAddresses)

ProviderAddresses returns any hostnames and ips associated with a machine, as determined by asking the provider.

func (*Machine) PublicAddress

func (m *Machine) PublicAddress() (network.SpaceAddress, error)

PublicAddress returns a public address for the machine. If no address is available it returns an error that satisfies network.IsNoAddressError().

func (*Machine) RecordAgentStartInformation

func (m *Machine) RecordAgentStartInformation(hostname string) error

RecordAgentStartInformation updates the host name (if non-empty) reported by the machine agent and sets the agent start time to the current time.

func (*Machine) Refresh

func (m *Machine) Refresh() error

Refresh refreshes the contents of the machine from the underlying state. It returns an error that satisfies errors.IsNotFound if the machine has been removed.

func (*Machine) Remove

func (m *Machine) Remove() (err error)

Remove removes the machine from state. It will fail if the machine is not Dead.

func (*Machine) RemoveAllAddresses

func (m *Machine) RemoveAllAddresses() error

RemoveAllAddresses removes all assigned addresses to all devices of the machine, in a single transaction. No error is returned when some or all of the addresses were already removed.

func (*Machine) RemoveAllLinkLayerDevices

func (m *Machine) RemoveAllLinkLayerDevices() error

RemoveAllLinkLayerDevices removes all existing link-layer devices of the machine in a single transaction. No error is returned when some or all of the devices were already removed.

func (*Machine) RunningActions

func (m *Machine) RunningActions() ([]Action, error)

RunningActions is part of the ActionReceiver interface.

func (*Machine) SetAgentVersion

func (m *Machine) SetAgentVersion(v version.Binary) (err error)

SetAgentVersion sets the version of juju that the agent is currently running.

func (*Machine) SetConstraints

func (m *Machine) SetConstraints(cons constraints.Value) (err error)

SetConstraints sets the exact constraints to apply when provisioning an instance for the machine. It will fail if the machine is Dead.

func (*Machine) SetDevicesAddresses deprecated

func (m *Machine) SetDevicesAddresses(devicesAddresses ...LinkLayerDeviceAddress) (err error)

SetDevicesAddresses sets the addresses of all devices in devicesAddresses, adding new or updating existing assignments as needed, in a single transaction. ProviderID field can be empty if not supported by the provider, but when set must be unique within the model. Errors are returned in the following cases:

  • Machine is no longer alive or is missing;
  • Subnet inferred from any CIDRAddress field in args is known but no longer alive (no error reported if the CIDRAddress does not match a known subnet);
  • Model no longer alive;
  • errors.NotValidError, when any of the fields in args contain invalid values;
  • errors.NotFoundError, when any DeviceName in args refers to unknown device;
  • ErrProviderIDNotUnique, when one or more specified ProviderIDs are not unique.

Deprecated: (manadart 2021-05-04) This method is only used by tests and is in the process of removal. Do not add new usages of it.

func (*Machine) SetInstanceInfo

func (m *Machine) SetInstanceInfo(
	id instance.Id, displayName string, nonce string, characteristics *instance.HardwareCharacteristics,
	devicesArgs []LinkLayerDeviceArgs, devicesAddrs []LinkLayerDeviceAddress,
	volumes map[names.VolumeTag]VolumeInfo,
	volumeAttachments map[names.VolumeTag]VolumeAttachmentInfo,
	charmProfiles []string,
) error

SetInstanceInfo is used to provision a machine and in one step sets its instance ID, nonce, hardware characteristics, add link-layer devices and set their addresses as needed. After, set charm profiles if needed.

func (*Machine) SetInstanceStatus

func (m *Machine) SetInstanceStatus(sInfo status.StatusInfo) (err error)

SetInstanceStatus sets the provider specific instance status for a machine.

func (*Machine) SetLinkLayerDevices deprecated

func (m *Machine) SetLinkLayerDevices(devicesArgs ...LinkLayerDeviceArgs) (err error)

SetLinkLayerDevices sets link-layer devices on the machine, adding or updating existing devices as needed, in a single transaction. ProviderID field can be empty if not supported by the provider, but when set must be unique within the model, and cannot be unset once set. Errors are returned in the following cases: - Machine is no longer alive or is missing; - Model no longer alive; - errors.NotValidError, when any of the fields in args contain invalid values;

Deprecated: (manadart 2020-10-12) This method is only used by tests and is in the process of removal. Do not add new usages of it.

func (*Machine) SetMachineAddresses

func (m *Machine) SetMachineAddresses(controllerConfig controller.Config, addresses ...network.SpaceAddress) error

SetMachineAddresses records any addresses related to the machine, sourced by asking the machine.

func (*Machine) SetModificationStatus

func (m *Machine) SetModificationStatus(sInfo status.StatusInfo) (err error)

SetModificationStatus sets the provider specific modification status for a machine. Allowing the propagation of status messages to the operator.

func (*Machine) SetMongoPassword

func (m *Machine) SetMongoPassword(password string) error

SetMongoPassword sets the password the agent responsible for the machine should use to communicate with the controllers. Previous passwords are invalidated.

func (*Machine) SetPassword

func (m *Machine) SetPassword(password string) error

SetPassword sets the password for the machine's agent.

func (*Machine) SetProviderAddresses

func (m *Machine) SetProviderAddresses(controllerConfig controller.Config, addresses ...network.SpaceAddress) error

SetProviderAddresses records any addresses related to the machine, sourced by asking the provider.

func (*Machine) SetProvisioned

func (m *Machine) SetProvisioned(
	id instance.Id,
	displayName string,
	nonce string,
	characteristics *instance.HardwareCharacteristics,
) (err error)

SetProvisioned stores the machine's provider-specific details in the database. These details are used to infer that the machine has been provisioned.

When provisioning an instance, a nonce should be created and passed when starting it, before adding the machine to the state. This means that if the provisioner crashes (or its connection to the state is lost) after starting the instance, we can be sure that only a single instance will be able to act for that machine.

Once set, the instance id cannot be changed. A non-empty instance id will be detected as a provisioned machine.

func (*Machine) SetStatus

func (m *Machine) SetStatus(statusInfo status.StatusInfo) error

SetStatus sets the status of the machine.

func (*Machine) SetSupportedContainers

func (m *Machine) SetSupportedContainers(containers []instance.ContainerType) (err error)

SetSupportedContainers sets the list of containers supported by this machine.

func (*Machine) Status

func (m *Machine) Status() (status.StatusInfo, error)

Status returns the status of the machine.

func (*Machine) StatusHistory

func (m *Machine) StatusHistory(filter status.StatusHistoryFilter) ([]status.StatusInfo, error)

StatusHistory returns a slice of at most filter.Size StatusInfo items or items as old as filter.Date or items newer than now - filter.Delta time representing past statuses for this machine.

func (*Machine) String

func (m *Machine) String() string

String returns a unique description of this machine.

func (*Machine) SupportedContainers

func (m *Machine) SupportedContainers() ([]instance.ContainerType, bool)

SupportedContainers returns any containers this machine is capable of hosting, and a bool indicating if the supported containers have been determined or not.

func (*Machine) SupportsNoContainers

func (m *Machine) SupportsNoContainers() (err error)

SupportsNoContainers records the fact that this machine doesn't support any containers.

func (*Machine) Tag

func (m *Machine) Tag() names.Tag

Tag returns a tag identifying the machine. The String method provides a string representation that is safe to use as a file name. The returned name will be different from other Tag values returned by any other entities from the same state.

func (*Machine) Units

func (m *Machine) Units() (units []*Unit, err error)

Units returns all the units that have been assigned to the machine.

func (*Machine) UpdateOperation

func (m *Machine) UpdateOperation() *UpdateMachineOperation

UpdateOperation returns a model operation that will update the machine.

func (*Machine) VolumeAttachments

func (m *Machine) VolumeAttachments() ([]VolumeAttachment, error)

VolumeAttachments returns the machine's volume attachments.

func (*Machine) Watch

func (m *Machine) Watch() NotifyWatcher

Watch returns a watcher for observing changes to a machine.

func (*Machine) WatchActionNotifications

func (m *Machine) WatchActionNotifications() StringsWatcher

WatchActionNotifications is part of the ActionReceiver interface.

func (*Machine) WatchAddresses

func (m *Machine) WatchAddresses() NotifyWatcher

WatchAddresses returns a new NotifyWatcher watching m's addresses.

func (*Machine) WatchAllContainers

func (m *Machine) WatchAllContainers() StringsWatcher

WatchAllContainers returns a StringsWatcher that notifies of changes to the lifecycles of all containers on a machine.

func (*Machine) WatchContainers

func (m *Machine) WatchContainers(ctype instance.ContainerType) StringsWatcher

WatchContainers returns a StringsWatcher that notifies of changes to the lifecycles of containers of the specified type on a machine.

func (*Machine) WatchLXDProfileUpgradeNotifications

func (m *Machine) WatchLXDProfileUpgradeNotifications(applicationName string) (StringsWatcher, error)

WatchLXDProfileUpgradeNotifications returns a watcher that observes the status of a lxd profile upgrade by monitoring changes on the unit machine's lxd profile upgrade completed field that is specific to an application name. Used by UniterAPI v9.

func (*Machine) WatchPendingActionNotifications

func (m *Machine) WatchPendingActionNotifications() StringsWatcher

WatchPendingActionNotifications is part of the ActionReceiver interface.

func (*Machine) WatchPrincipalUnits

func (m *Machine) WatchPrincipalUnits() StringsWatcher

WatchPrincipalUnits returns a StringsWatcher tracking the machine's principal units.

func (*Machine) WatchUnits

func (m *Machine) WatchUnits() StringsWatcher

WatchUnits returns a new StringsWatcher watching m's units.

type MachineJob

type MachineJob int

MachineJob values define responsibilities that machines may be expected to fulfil.

const (
	JobHostUnits MachineJob
	JobManageModel
)

func (MachineJob) MigrationValue

func (job MachineJob) MigrationValue() string

MigrationValue converts the state job into a useful human readable string for model migration.

func (MachineJob) String

func (job MachineJob) String() string

func (MachineJob) ToParams

func (job MachineJob) ToParams() model.MachineJob

ToParams returns the job as model.MachineJob.

type MachineRef

type MachineRef interface {
	DocID() string
	Id() string
	MachineTag() names.MachineTag
	Life() Life
	Clean() bool
	ContainerType() instance.ContainerType
	Base() Base
	Jobs() []MachineJob
	AddPrincipal(string)
	FileSystems() []string
}

MachineRef is a reference to a machine, without being a full machine. This exists to allow us to use state functions without requiring a state.Machine, without having to require a real machine.

type MachineRemover

type MachineRemover interface {
	DeleteMachine(context.Context, machine.Name) error
}

MachineRemover deletes a machine from the dqlite database. This allows us to initially weave some dqlite support into the cleanup workflow.

type MachineTemplate

type MachineTemplate struct {
	// Base is the base to be associated with the new machine.
	Base Base

	// Constraints are the constraints to be used when finding
	// an instance for the machine.
	Constraints constraints.Value

	// Jobs holds the jobs to run on the machine's instance.
	// A machine must have at least one job to do.
	// JobManageModel can only be part of the jobs
	// when the first (bootstrap) machine is added.
	Jobs []MachineJob

	// Addresses holds the addresses to be associated with the
	// new machine.
	//
	// TODO(dimitern): This should be removed once all addresses
	// come from link-layer device addresses.
	Addresses network.SpaceAddresses

	// InstanceId holds the instance id to associate with the machine.
	// If this is empty, the provisioner will try to provision the machine.
	// If this is non-empty, the HardwareCharacteristics and Nonce
	// fields must be set appropriately.
	InstanceId instance.Id

	// DisplayName holds the human readable name for the instance
	// associated with the machine.
	DisplayName string

	// HardwareCharacteristics holds the h/w characteristics to
	// be associated with the machine.
	HardwareCharacteristics instance.HardwareCharacteristics

	// LinkLayerDevices holds a list of arguments for setting link-layer devices
	// on the machine.
	LinkLayerDevices []LinkLayerDeviceArgs

	// Volumes holds the parameters for volumes that are to be created
	// and attached to the machine.
	Volumes []HostVolumeParams

	// VolumeAttachments holds the parameters for attaching existing
	// volumes to the machine.
	VolumeAttachments map[names.VolumeTag]VolumeAttachmentParams

	// Filesystems holds the parameters for filesystems that are to be
	// created and attached to the machine.
	Filesystems []HostFilesystemParams

	// FilesystemAttachments holds the parameters for attaching existing
	// filesystems to the machine.
	FilesystemAttachments map[names.FilesystemTag]FilesystemAttachmentParams

	// Nonce holds a unique value that can be used to check
	// if a new instance was really started for this machine.
	// See Machine.SetProvisioned. This must be set if InstanceId is set.
	Nonce string

	// Dirty signifies whether the new machine will be treated
	// as unclean for unit-assignment purposes.
	Dirty bool

	// Placement holds the placement directive that will be associated
	// with the machine.
	Placement string
	// contains filtered or unexported fields
}

MachineTemplate holds attributes that are to be associated with a newly created machine.

type MigrationMode

type MigrationMode string

MigrationMode specifies where the Model is with respect to migration.

type MigrationSpec

type MigrationSpec struct {
	InitiatedBy names.UserTag
	TargetInfo  migration.TargetInfo
}

MigrationSpec holds the information required to create a ModelMigration instance.

func (*MigrationSpec) Validate

func (spec *MigrationSpec) Validate() error

Validate returns an error if the MigrationSpec contains bad data. Nil is returned otherwise.

type MinionReports

type MinionReports struct {
	Succeeded []names.Tag
	Failed    []names.Tag
	Unknown   []names.Tag
}

MinionReports indicates the sets of agents whose migration minion workers have completed the current migration phase, have failed to complete the current migration phase, or are yet to report regarding the current migration phase.

type Model

type Model struct {
	// contains filtered or unexported fields
}

Model represents the state of a model.

func (*Model) Action

func (m *Model) Action(id string) (Action, error)

Action returns an Action by Id.

func (*Model) ActionByTag

func (m *Model) ActionByTag(tag names.ActionTag) (Action, error)

ActionByTag returns an Action given an ActionTag.

func (*Model) AddAction

func (m *Model) AddAction(receiver ActionReceiver, operationID, name string, payload map[string]interface{}, parallel *bool, executionGroup *string) (Action, error)

AddAction adds a new Action of type name and using arguments payload to the receiver, and returns its ID.

func (*Model) AllActions

func (m *Model) AllActions() ([]Action, error)

AllActions returns all Actions.

func (*Model) AllConstraints

func (m *Model) AllConstraints() (*ModelConstraints, error)

AllConstraints retrieves all the constraints in the model and provides a way to query based on machine or application.

func (*Model) AllEndpointBindings

func (m *Model) AllEndpointBindings() (map[string]*Bindings, error)

AllEndpointBindings returns all endpoint->space bindings keyed by application name.

func (*Model) AllOperations

func (m *Model) AllOperations() ([]Operation, error)

AllOperations returns all Operations.

func (*Model) AllUnits

func (m *Model) AllUnits() ([]*Unit, error)

AllUnits returns all units for a model, for all applications.

func (*Model) CAASModel

func (m *Model) CAASModel() (*CAASModel, error)

CAASModel returns an Containers-As-A-Service (CAAS) model.

func (*Model) CloudCredentialTag

func (m *Model) CloudCredentialTag() (names.CloudCredentialTag, bool)

CloudCredentialTag returns the tag of the cloud credential used for managing the model's cloud resources, and a boolean indicating whether a credential is set.

func (*Model) CloudName

func (m *Model) CloudName() string

CloudName returns the name of the cloud to which the model is deployed.

func (*Model) CloudRegion

func (m *Model) CloudRegion() string

CloudRegion returns the name of the cloud region to which the model is deployed.

func (*Model) ControllerTag

func (m *Model) ControllerTag() names.ControllerTag

ControllerTag is the tag for the controller that the model is running within.

func (*Model) ControllerUUID

func (m *Model) ControllerUUID() string

ControllerUUID returns the universally unique identifier of the controller in which the model is running.

func (*Model) Destroy

func (m *Model) Destroy(args DestroyModelParams) (err error)

Destroy sets the models's lifecycle to Dying, preventing addition of applications or machines to state. If called on an empty hosted model, the lifecycle will be advanced straight to Dead.

func (*Model) DestroyTimeout

func (m *Model) DestroyTimeout() *time.Duration

DestroyTimeout returns the timeout passed in when the model was destroyed.

func (*Model) EnqueueAction

func (m *Model) EnqueueAction(operationID string, receiver names.Tag,
	actionName string, payload map[string]interface{}, parallel bool, executionGroup string, actionError error) (Action, error)

EnqueueAction caches the action doc to the database.

func (*Model) EnqueueOperation

func (m *Model) EnqueueOperation(summary string, count int) (string, error)

EnqueueOperation records the start of an operation.

func (*Model) EnvironVersion

func (m *Model) EnvironVersion() int

EnvironVersion is the version of the model's environ -- the related cloud provider resources. The environ version is used by the controller to identify environ/provider upgrade steps to run for a model's environ after the controller is upgraded, or the model is migrated to another controller.

func (*Model) FailOperationEnqueuing

func (m *Model) FailOperationEnqueuing(operationID, failMessage string, count int) error

FailOperationEnqueuing sets the operation fail message and updates the spawned task count. The spawned task count must be accurate to finalize the operation.

func (*Model) FindActionsByName

func (m *Model) FindActionsByName(name string) ([]Action, error)

FindActionsByName finds Actions with the given name.

func (*Model) ForceDestroyed

func (m *Model) ForceDestroyed() bool

ForceDestroyed returns whether the destruction of a dying/dead model was forced. It's always false for a model that's alive.

func (*Model) IsControllerModel

func (m *Model) IsControllerModel() bool

IsControllerModel returns a boolean indicating whether this model is responsible for running a controller.

func (*Model) Kind

func (m *Model) Kind() string

Kind returns a human readable name identifying the model kind.

func (*Model) LatestToolsVersion

func (m *Model) LatestToolsVersion() version.Number

LatestToolsVersion returns the newest version found in the last check in the streams. Bear in mind that the check was performed filtering only new patches for the current major.minor. (major.minor.patch)

func (*Model) Life

func (m *Model) Life() Life

Life returns whether the model is Alive, Dying or Dead.

func (*Model) ListOperations

func (m *Model) ListOperations(
	actionNames []string, actionReceivers []names.Tag, operationStatus []ActionStatus,
	offset, limit int,
) ([]OperationInfo, bool, error)

ListOperations returns operations that match the specified criteria.

func (*Model) LoadModelStatus

func (m *Model) LoadModelStatus() (*ModelStatus, error)

LoadModelStatus retrieves all the status documents for the model at once. Used to primarily speed up status.

func (*Model) Metrics

func (m *Model) Metrics() (ModelMetrics, error)

Metrics returns model level metrics to be collected and sent to Charmhub via the charm revision updater.

func (*Model) MigrationMode

func (m *Model) MigrationMode() MigrationMode

MigrationMode returns whether the model is active or being migrated.

func (*Model) ModelTag

func (m *Model) ModelTag() names.ModelTag

ModelTag is the concrete model tag for this model.

func (*Model) Name

func (m *Model) Name() string

Name returns the human friendly name of the model.

func (*Model) Operation

func (m *Model) Operation(id string) (Operation, error)

Operation returns an Operation by Id.

func (*Model) OperationWithActions

func (m *Model) OperationWithActions(id string) (*OperationInfo, error)

OperationWithActions returns an OperationInfo by Id.

func (*Model) Owner

func (m *Model) Owner() names.UserTag

Owner returns tag representing the owner of the model. The owner is the user that created the model.

func (*Model) PasswordHash

func (m *Model) PasswordHash() string

PasswordHash returns the password hash set on the model document

func (*Model) PasswordValid

func (m *Model) PasswordValid(password string) bool

PasswordValid returns whether the given password is valid for the given application.

func (*Model) Refresh

func (m *Model) Refresh() error

func (*Model) SetCloudCredential

func (m *Model) SetCloudCredential(tag names.CloudCredentialTag) (bool, error)

SetCloudCredential sets new cloud credential for this model. Returned bool indicates if model credential was set.

func (*Model) SetEnvironVersion

func (m *Model) SetEnvironVersion(v int) error

SetEnvironVersion sets the model's current environ version. The value must be monotonically increasing.

func (*Model) SetMigrationMode

func (m *Model) SetMigrationMode(mode MigrationMode) error

SetMigrationMode updates the migration mode of the model.

func (*Model) SetPassword

func (m *Model) SetPassword(password string) error

SetPassword sets the password for the model's agent.

func (*Model) SetStatus

func (m *Model) SetStatus(sInfo status.StatusInfo) error

SetStatus sets the status of the model.

func (*Model) State

func (model *Model) State() *State

(TODO) externalreality: Temporary method to access state from model while factoring Model concerns out from state.

func (*Model) Status

func (m *Model) Status() (status.StatusInfo, error)

Status returns the status of the model.

func (*Model) StatusHistory

func (m *Model) StatusHistory(filter status.StatusHistoryFilter) ([]status.StatusInfo, error)

StatusHistory returns a slice of at most filter.Size StatusInfo items or items as old as filter.Date or items newer than now - filter.Delta time representing past statuses for this application.

func (*Model) String

func (m *Model) String() string

String returns the model name.

func (*Model) Tag

func (m *Model) Tag() names.Tag

Tag returns a name identifying the model. The returned name will be different from other Tag values returned by any other entities from the same state.

func (*Model) Type

func (m *Model) Type() ModelType

Type returns the type of the model.

func (*Model) UUID

func (m *Model) UUID() string

UUID returns the universally unique identifier of the model.

func (*Model) UpdateLatestToolsVersion

func (m *Model) UpdateLatestToolsVersion(ver version.Number) error

UpdateLatestToolsVersion looks up for the latest available version of juju tools and updates modelDoc with it.

func (*Model) Watch

func (m *Model) Watch() NotifyWatcher

Watch returns a watcher for observing changes to a model.

func (*Model) WatchForModelConfigChanges

func (model *Model) WatchForModelConfigChanges() NotifyWatcher

WatchForModelConfigChanges returns a NotifyWatcher waiting for the Model Config to change.

func (*Model) WatchModelCredential

func (m *Model) WatchModelCredential() NotifyWatcher

WatchModelCredential returns a new NotifyWatcher that watches a model reference to a cloud credential.

type ModelArgs

type ModelArgs struct {
	// Type specifies the general type of the model (IAAS or CAAS).
	Type ModelType

	// CloudName is the name of the cloud to which the model is deployed.
	CloudName string

	// CloudRegion is the name of the cloud region to which the model is
	// deployed. This will be empty for clouds that do not support regions.
	CloudRegion string

	// CloudCredential is the tag of the cloud credential that will be
	// used for managing cloud resources for this model. This will be
	// empty for clouds that do not require credentials.
	CloudCredential names.CloudCredentialTag

	// Config is the model config.
	//
	// Deprecated. ModelConfig is now handled by the model config domain.
	// Has values necessary for creating a model, e.g. name and uuid,
	// however will not be used to set model config in settingsC.
	Config *config.Config

	// Constraints contains the initial constraints for the model.
	Constraints constraints.Value

	// StorageProviderRegistry is used to determine and store the
	// details of the default storage pools.
	StorageProviderRegistry storage.ProviderRegistry

	// Owner is the user that owns the model.
	Owner names.UserTag

	// MigrationMode is the initial migration mode of the model.
	MigrationMode MigrationMode

	// EnvironVersion is the initial version of the Environ for the model.
	EnvironVersion int

	// PasswordHash is used by the caas model operator.
	PasswordHash string
}

ModelArgs is a params struct for creating a new model.

func (ModelArgs) Validate

func (m ModelArgs) Validate() error

Validate validates the ModelArgs.

type ModelConstraints

type ModelConstraints struct {
	// contains filtered or unexported fields
}

ModelConstraints represents all the constraints in a model keyed on global key.

func (*ModelConstraints) Machine

func (c *ModelConstraints) Machine(machineID string) constraints.Value

Machine returns the constraints for the specified machine.

type ModelMachinesWatcher

type ModelMachinesWatcher interface {
	WatchModelMachines() StringsWatcher
	WatchModelMachineStartTimes(quiesceInterval time.Duration) StringsWatcher
}

ModelMachinesWatcher defines the methods required for listening to machine lifecycle events or a combination of lifecycle events and changes to the agent start time field. WatchModelMachines.

type ModelMetrics

type ModelMetrics struct {
	ApplicationCount string
	MachineCount     string
	UnitCount        string
	CloudName        string
	CloudRegion      string
	Provider         string
	UUID             string
	ControllerUUID   string
}

ModelMetrics contains metrics to be collected and sent to Charmhub via the charm revision updater for a model.

type ModelMigration

type ModelMigration interface {
	// Id returns a unique identifier for the model migration.
	Id() string

	// ModelUUID returns the UUID for the model being migrated.
	ModelUUID() string

	// Attempt returns the migration attempt identifier. This
	// increments for each migration attempt for the model.
	Attempt() int

	// StartTime returns the time when the migration was started.
	StartTime() time.Time

	// SuccessTime returns the time when the migration reached
	// SUCCESS.
	SuccessTime() time.Time

	// EndTime returns the time when the migration reached DONE or
	// REAPFAILED.
	EndTime() time.Time

	// Phase returns the migration's phase.
	Phase() (migration.Phase, error)

	// PhaseChangedTime returns the time when the migration's phase
	// last changed.
	PhaseChangedTime() time.Time

	// StatusMessage returns human readable text about the current
	// progress of the migration.
	StatusMessage() string

	// InitiatedBy returns username the initiated the migration.
	InitiatedBy() string

	// TargetInfo returns the details required to connect to the
	// migration's target controller.
	TargetInfo() (*migration.TargetInfo, error)

	// SetPhase sets the phase of the migration. An error will be
	// returned if the new phase does not follow the current phase or
	// if the migration is no longer active.
	SetPhase(nextPhase migration.Phase) error

	// SetStatusMessage sets some human readable text about the
	// current progress of the migration.
	SetStatusMessage(text string) error

	// SubmitMinionReport records a report from a migration minion
	// worker about the success or failure to complete its actions for
	// a given migration phase.
	SubmitMinionReport(tag names.Tag, phase migration.Phase, success bool) error

	// MinionReports returns details of the minions that have reported
	// success or failure for the current migration phase, as well as
	// those which are yet to report.
	MinionReports() (*MinionReports, error)

	// WatchMinionReports returns a notify watcher which triggers when
	// a migration minion has reported back about the success or failure
	// of its actions for the current migration phase.
	WatchMinionReports() (NotifyWatcher, error)

	// Refresh updates the contents of the ModelMigration from the
	// underlying state.
	Refresh() error
}

ModelMigration represents the state of an migration attempt for a model.

type ModelOperation

type ModelOperation interface {
	// Build builds the low-level database transaction operations required
	// to apply the change. If the transaction operations fail (e.g. due
	// to concurrent changes), then Build may be called again. The attempt
	// number, starting at zero, is passed in.
	//
	// Build is treated as a jujutxn.TransactionSource, so the errors
	// in the jujutxn package may be returned by Build to influence
	// transaction execution.
	Build(attempt int) ([]txn.Op, error)

	// Done is called after the operation is run, whether it succeeds or
	// not. The result of running the operation is passed in, and the Done
	// method may annotate the error; or run additional, non-transactional
	// logic depending on the outcome.
	Done(error) error
}

ModelOperation is a high-level model operation, encapsulating the logic required to apply a change to a model.

func ComposeModelOperations

func ComposeModelOperations(modelOps ...ModelOperation) ModelOperation

ComposeModelOperations returns a ModelOperation which composes multiple ModelOperations and executes them in a single transaction. If any of the provided ModelOperations are nil, they will be automatically ignored.

type ModelPayloads

type ModelPayloads struct {
	// contains filtered or unexported fields
}

ModelPayloads lets you read all unit payloads in a model.

func (ModelPayloads) ListAll

func (mp ModelPayloads) ListAll() ([]payloads.FullPayloadInfo, error)

ListAll builds the list of payload information that is registered in state.

type ModelStatus

type ModelStatus struct {
	// contains filtered or unexported fields
}

ModelStatus holds all the current status values for a given model and offers accessors for the various parts of a model.

func (*ModelStatus) FullUnitWorkloadVersion

func (m *ModelStatus) FullUnitWorkloadVersion(unitName string) (status.StatusInfo, error)

FullUnitWorkloadVersion returns the full status info for the workload version of a unit. This is used for selecting the workload version for an application.

func (*ModelStatus) MachineAgent

func (m *ModelStatus) MachineAgent(machineID string) (status.StatusInfo, error)

MachineAgent returns the status of the machine agent.

func (*ModelStatus) MachineInstance

func (m *ModelStatus) MachineInstance(machineID string) (status.StatusInfo, error)

MachineInstance returns the status of the machine instance.

func (*ModelStatus) MachineModification

func (m *ModelStatus) MachineModification(machineID string) (status.StatusInfo, error)

MachineModification returns the status of the machine modification

func (*ModelStatus) Model

func (m *ModelStatus) Model() (status.StatusInfo, error)

Model returns the status of the model.

func (*ModelStatus) UnitAgent

func (m *ModelStatus) UnitAgent(unitName string) (status.StatusInfo, error)

UnitAgent returns the status of the Unit's agent.

func (*ModelStatus) UnitWorkload

func (m *ModelStatus) UnitWorkload(unitName string) (status.StatusInfo, error)

UnitWorkload returns the status of the unit's workload.

func (*ModelStatus) UnitWorkloadVersion

func (m *ModelStatus) UnitWorkloadVersion(unitName string) (string, error)

UnitWorkloadVersion returns workload version for the unit

type ModelType

type ModelType string

ModelType signals the type of a model - IAAS or CAAS

func ParseModelType

func ParseModelType(raw string) (ModelType, error)

ParseModelType turns a valid model type string into a ModelType constant.

type NewPolicyFunc

type NewPolicyFunc func(*State) Policy

NewPolicyFunc is the type of a function that, given a *State, returns a Policy for that State.

type NotifyWatcher

type NotifyWatcher interface {
	Watcher
	Changes() <-chan struct{}
}

NotifyWatcher generates signals when something changes, but it does not return any content for those changes

type NotifyWatcherFactory

type NotifyWatcherFactory interface {
	Watch() NotifyWatcher
}

NotifyWatcherFactory represents an entity that can be watched.

type OfferConnection

type OfferConnection struct {
	// contains filtered or unexported fields
}

OfferConnection represents the state of a relation to an offer hosted in this model.

func (*OfferConnection) OfferUUID

func (oc *OfferConnection) OfferUUID() string

OfferUUID returns the offer UUID.

func (*OfferConnection) RelationId

func (oc *OfferConnection) RelationId() int

RelationId is the id of the relation to which this connection pertains.

func (*OfferConnection) RelationKey

func (oc *OfferConnection) RelationKey() string

RelationKey is the key of the relation to which this connection pertains.

func (*OfferConnection) SourceModelUUID

func (oc *OfferConnection) SourceModelUUID() string

SourceModelUUID is the uuid of the consuming model.

func (*OfferConnection) String

func (oc *OfferConnection) String() string

String returns the details of the connection.

func (*OfferConnection) UserName

func (oc *OfferConnection) UserName() string

UserName returns the name of the user who created this connection.

type OpenParams

type OpenParams struct {
	// Clock is the clock used for time-related operations.
	Clock clock.Clock

	// ControllerTag is the tag of the controller.
	ControllerTag names.ControllerTag

	// ControllerModelTag is the tag of the controller model.
	ControllerModelTag names.ModelTag

	// MongoSession is the mgo.Session to use for storing and
	// accessing state data. The caller remains responsible
	// for closing this session; Open will copy it.
	MongoSession *mgo.Session

	// NewPolicy, if non-nil, returns a policy which will be used to
	// validate and modify behaviour of certain operations in state.
	NewPolicy NewPolicyFunc

	// RunTransactionObserver, if non-nil, is a function that will
	// be called after mgo/txn transactions are run, successfully
	// or not.
	RunTransactionObserver RunTransactionObserverFunc

	// InitDatabaseFunc, if non-nil, is a function that will be called
	// just after the state database is opened.
	InitDatabaseFunc InitDatabaseFunc

	// MaxTxnAttempts is defaulted by OpenStatePool if otherwise not set.
	MaxTxnAttempts int

	// Note(nvinuesa): Having a dqlite domain service here is an awful hack
	// and should disapear as soon as we migrate units and applications.
	CharmServiceGetter func(modelUUID coremodel.UUID) CharmService

	// WatcherPollInterval is defaulted by the TxnWatcher if otherwise not set.
	WatcherPollInterval time.Duration
}

OpenParams contains the parameters for opening the state database.

func (OpenParams) Validate

func (p OpenParams) Validate() error

Validate validates the OpenParams.

type Operation

type Operation interface {
	Entity

	// Id returns the local id of the Operation.
	Id() string

	// Enqueued returns the time the operation was added to state.
	Enqueued() time.Time

	// Started returns the time that the first Action execution began.
	Started() time.Time

	// Completed returns the completion time of the last Action.
	Completed() time.Time

	// Summary is the reason for running the operation.
	Summary() string

	// Fail is why the operation failed.
	Fail() string

	// Status returns the final state of the operation.
	Status() ActionStatus

	// OperationTag returns the operation's tag.
	OperationTag() names.OperationTag

	// Refresh refreshes the contents of the operation.
	Refresh() error

	// SpawnedTaskCount returns the number of spawned actions.
	SpawnedTaskCount() int
}

Operation represents a number of tasks resulting from running an action. The Operation provides both the justification for individual tasks to be performed and the grouping of them.

As an example, if an action is run targeted to several units, the operation would reflect the request to run the actions, while the individual tasks would track the running of the individual actions on each unit.

type OperationInfo

type OperationInfo struct {
	Operation Operation
	Actions   []Action
}

OperationInfo encapsulates an operation and summary information about some of its actions.

type Platform

type Platform struct {
	Architecture string `bson:"architecture,omitempty"`
	OS           string `bson:"os"`
	Channel      string `bson:"channel"`
}

Platform identifies the platform the charm was installed on.

type Policy

type Policy interface {
	// ConstraintsValidator returns a constraints.Validator or an error.
	ConstraintsValidator(envcontext.ProviderCallContext) (constraints.Validator, error)

	// StorageServices returns a StoragePoolGetter, storage.ProviderRegistry or an error.
	StorageServices() (StoragePoolGetter, error)
}

Policy is an interface provided to State that may be consulted by State to validate or modify the behaviour of certain operations.

If a Policy implementation does not implement one of the methods, it must return an error that satisfies errors.IsNotImplemented, and will thus be ignored. Any other error will cause an error in the use of the policy.

type PoolHelper

type PoolHelper interface {
	Release() bool
	Annotate(string)
}

PoolHelper describes methods for working with a pool-supplied state.

type PoolItem

type PoolItem struct {
	// contains filtered or unexported fields
}

PoolItem tracks the usage of a State instance unique to a model. It associates context information about state usage for each reference holder by associating it with a unique key. It tracks whether the state has been marked for removal from the pool.

type PooledState

type PooledState struct {
	*State
	// contains filtered or unexported fields
}

PooledState is a wrapper for a State reference, indicating that it is managed by a pool.

func (*PooledState) Annotate

func (ps *PooledState) Annotate(context string)

Annotate writes the supplied context information back to the pool item. The information is stored against the unique ID for the referer, indicated by the itemKey member.

func (*PooledState) Release

func (ps *PooledState) Release() bool

Release indicates that the pooled state is no longer required and can be removed from the pool if there are no other references to it. The return indicates whether the released state was actually removed from the pool - items marked for removal are only removed when released by all other reference holders.

func (*PooledState) Removing

func (ps *PooledState) Removing() <-chan struct{}

Removing returns a channel that is closed when the PooledState should be released by the consumer.

type QueryDetails

type QueryDetails struct {
	Type           string // read or write
	CollectionName string
	Query          interface{}
	Traceback      string
}

QueryDetails is a POD type recording the database query and who made it.

type QueryTracker

type QueryTracker interface {
	Reset()
	ListQueries() []QueryDetails
	ReadCount() int
}

QueryTracker provides a way for tests to determine how many database queries have been made, and who made them.

type Relation

type Relation struct {
	// contains filtered or unexported fields
}

Relation represents a relation between one or two application endpoints.

func (*Relation) AllRemoteUnits

func (r *Relation) AllRemoteUnits(appName string) ([]*RelationUnit, error)

AllRemoteUnits returns all the RelationUnits for the remote application units for a given application.

func (*Relation) ApplicationSettings

func (r *Relation) ApplicationSettings(appName string) (map[string]interface{}, error)

ApplicationSettings returns the application-level settings for the specified application in this relation.

func (*Relation) Destroy

func (r *Relation) Destroy(_ objectstore.ObjectStore) error

Destroy ensures that the relation will be removed at some point; if no units are currently in scope, it will be removed immediately.

func (*Relation) DestroyOperation

func (r *Relation) DestroyOperation(force bool) *DestroyRelationOperation

DestroyOperation returns a model operation that will allow relation to leave scope.

func (*Relation) DestroyWithForce

func (r *Relation) DestroyWithForce(force bool, maxWait time.Duration) ([]error, error)

DestroyWithForce may force the destruction of the relation. In addition, this function also returns all non-fatal operational errors encountered.

func (*Relation) Endpoint

func (r *Relation) Endpoint(applicationname string) (Endpoint, error)

Endpoint returns the endpoint of the relation for the named application. If the application is not part of the relation, an error will be returned.

func (*Relation) Endpoints

func (r *Relation) Endpoints() []Endpoint

Endpoints returns the endpoints for the relation.

func (*Relation) Id

func (r *Relation) Id() int

Id returns the integer internal relation key. This is exposed because the unit agent needs to expose a value derived from this (as JUJU_RELATION_ID) to allow relation hooks to differentiate between relations with different applications.

func (*Relation) Kind

func (r *Relation) Kind() string

Kind returns a human readable name identifying the relation kind.

func (*Relation) Life

func (r *Relation) Life() Life

Life returns the relation's current life state.

func (*Relation) ModelUUID

func (r *Relation) ModelUUID() string

ModelUUID returns the model UUID for the relation.

func (*Relation) Refresh

func (r *Relation) Refresh() error

Refresh refreshes the contents of the relation from the underlying state. It returns an error that satisfies errors.IsNotFound if the relation has been removed.

func (*Relation) RelatedEndpoints

func (r *Relation) RelatedEndpoints(applicationname string) ([]Endpoint, error)

RelatedEndpoints returns the endpoints of the relation r with which units of the named application will establish relations. If the application is not part of the relation r, an error will be returned.

func (*Relation) RemoteApplication

func (r *Relation) RemoteApplication() (*RemoteApplication, bool, error)

RemoteApplication returns the remote application if this relation is a cross-model relation, and a bool indicating if it cross-model or not.

func (*Relation) RemoteUnit

func (r *Relation) RemoteUnit(unitName string) (*RelationUnit, error)

RemoteUnit returns a RelationUnit for the supplied unit of a remote application.

func (*Relation) SetStatus

func (r *Relation) SetStatus(statusInfo status.StatusInfo) error

SetStatus sets the status of the relation.

func (*Relation) SetSuspended

func (r *Relation) SetSuspended(suspended bool, suspendedReason string) error

SetSuspended sets whether the relation is suspended.

func (*Relation) Status

func (r *Relation) Status() (status.StatusInfo, error)

Status returns the relation's current status data.

func (*Relation) String

func (r *Relation) String() string

func (*Relation) Suspended

func (r *Relation) Suspended() bool

Suspended returns true if the relation is suspended.

func (*Relation) SuspendedReason

func (r *Relation) SuspendedReason() string

SuspendedReason returns the reason why the relation is suspended.

func (*Relation) Tag

func (r *Relation) Tag() names.Tag

Tag returns a name identifying the relation.

func (*Relation) Unit

func (r *Relation) Unit(u *Unit) (*RelationUnit, error)

Unit returns a RelationUnit for the supplied unit.

func (*Relation) UnitCount

func (r *Relation) UnitCount() int

UnitCount is the number of units still in relation scope.

func (*Relation) UpdateApplicationSettings

func (r *Relation) UpdateApplicationSettings(appName string, token leadership.Token, updates map[string]interface{}) error

UpdateApplicationSettings updates the given application's settings in this relation. It requires a current leadership token.

func (*Relation) UpdateApplicationSettingsOperation

func (r *Relation) UpdateApplicationSettingsOperation(appName string, token leadership.Token, updates map[string]interface{}) (ModelOperation, error)

UpdateApplicationSettingsOperation returns a ModelOperation for updating the given application's settings in this relation. It requires a current leadership token.

func (*Relation) WatchApplicationSettings

func (r *Relation) WatchApplicationSettings(app *Application) (NotifyWatcher, error)

WatchApplicationSettings returns a notify watcher that will signal whenever the specified application's relation settings are changed.

func (*Relation) WatchLifeSuspendedStatus

func (r *Relation) WatchLifeSuspendedStatus() StringsWatcher

WatchLifeSuspendedStatus returns a watcher that notifies of changes to the life or suspended status of the relation.

func (*Relation) WatchRelationEgressNetworks

func (r *Relation) WatchRelationEgressNetworks() StringsWatcher

WatchRelationEgressNetworks starts and returns a StringsWatcher notifying of egress changes to the relationNetworks collection for the relation.

func (*Relation) WatchRelationIngressNetworks

func (r *Relation) WatchRelationIngressNetworks() StringsWatcher

WatchRelationIngressNetworks starts and returns a StringsWatcher notifying of ingress changes to the relationNetworks collection for the relation.

func (*Relation) WatchUnits

func (r *Relation) WatchUnits(appName string) (RelationUnitsWatcher, error)

WatchUnits returns a watcher that notifies of changes to the units of the specified application endpoint in the relation. This method will return an error if the endpoint is not globally scoped.

type RelationNetworkDirection

type RelationNetworkDirection string

RelationNetworkDirection represents a type that describes the direction of the network, either ingress or egress.

const (
	// IngressDirection for a ingress relation network direction
	IngressDirection RelationNetworkDirection = "ingress"
	// EgressDirection for a egress relation network direction
	EgressDirection RelationNetworkDirection = "egress"
)

func (RelationNetworkDirection) String

func (r RelationNetworkDirection) String() string

type RelationNetworker

type RelationNetworker interface {
	Save(relationKey string, adminOverride bool, cidrs []string) (RelationNetworks, error)
	Networks(relationKey string) (RelationNetworks, error)
}

RelationNetworker instances provide access to relation networks in state.

type RelationNetworks

type RelationNetworks interface {
	Id() string
	RelationKey() string
	CIDRS() []string
}

RelationNetworks instances describe the ingress or egress networks required for a cross model relation.

type RelationNetworksDescription

type RelationNetworksDescription interface {
	RelationNetworks() []description.RelationNetwork
}

RelationNetworksDescription defines an in-place usage for reading relation networks.

type RelationNetworksInput

type RelationNetworksInput interface {
	DocModelNamespace
	RelationNetworksDescription
}

RelationNetworksInput describes the input used for migrating relation networks.

type RelationScopeChange

type RelationScopeChange struct {
	Entered []string
	Left    []string
}

RelationScopeChange contains information about units that have entered or left a particular scope.

type RelationScopeWatcher

type RelationScopeWatcher struct {
	// contains filtered or unexported fields
}

RelationScopeWatcher observes changes to the set of units in a particular relation scope.

func (*RelationScopeWatcher) Changes

func (w *RelationScopeWatcher) Changes() <-chan *RelationScopeChange

Changes returns a channel that will receive changes when units enter and leave a relation scope. The Entered field in the first event on the channel holds the initial state.

func (*RelationScopeWatcher) Err

func (w *RelationScopeWatcher) Err() error

Err returns any error encountered while running or shutting down, or tomb.ErrStillAlive if the watcher is still running.

func (*RelationScopeWatcher) Kill

func (w *RelationScopeWatcher) Kill()

Kill kills the watcher without waiting for it to shut down.

func (*RelationScopeWatcher) Stop

func (w *RelationScopeWatcher) Stop() error

Stop stops the watcher, and returns any error encountered while running or shutting down.

func (*RelationScopeWatcher) Wait

func (w *RelationScopeWatcher) Wait() error

Wait waits for the watcher to die and returns any error encountered when it was running.

type RelationUnit

type RelationUnit struct {
	// contains filtered or unexported fields
}

RelationUnit holds information about a single unit in a relation, and allows clients to conveniently access unit-specific functionality.

func (*RelationUnit) CounterpartApplications

func (ru *RelationUnit) CounterpartApplications() []string

CounterpartApplications returns the slice of application names that are the counterpart of this unit. (So for Peer relations, app is returned, for a Provider the apps on Requirer side is returned

func (*RelationUnit) Endpoint

func (ru *RelationUnit) Endpoint() Endpoint

Endpoint returns the relation endpoint that defines the unit's participation in the relation.

func (*RelationUnit) EnterScope

func (ru *RelationUnit) EnterScope(
	settings map[string]interface{},
) error

EnterScope ensures that the unit has entered its scope in the relation. When the unit has already entered its relation scope, EnterScope will report success but make no changes to state.

Otherwise, assuming both the relation and the unit are alive, it will enter scope and create or overwrite the unit's settings in the relation according to the supplied map.

If the unit is a principal and the relation has container scope, EnterScope will also create the required subordinate unit, if it does not already exist; this is because there's no point having a principal in scope if there is no corresponding subordinate to join it.

Once a unit has entered a scope, it stays in scope without further intervention; the relation will not be able to become Dead until all units have departed its scopes.

func (*RelationUnit) InScope

func (ru *RelationUnit) InScope() (bool, error)

InScope returns whether the relation unit has entered scope and not left it.

func (*RelationUnit) Joined

func (ru *RelationUnit) Joined() (bool, error)

Joined returns whether the relation unit has entered scope and neither left it nor prepared to leave it.

func (*RelationUnit) LeaveScope

func (ru *RelationUnit) LeaveScope() error

LeaveScope signals that the unit has left its scope in the relation. After the unit has left its relation scope, it is no longer a member of the relation; if the relation is dying when its last member unit leaves, it is removed immediately. It is not an error to leave a scope that the unit is not, or never was, a member of.

func (*RelationUnit) LeaveScopeOperation

func (ru *RelationUnit) LeaveScopeOperation(force bool) *LeaveScopeOperation

LeaveScopeOperation returns a model operation that will allow relation to leave scope.

func (*RelationUnit) LeaveScopeWithForce

func (ru *RelationUnit) LeaveScopeWithForce(force bool, maxWait time.Duration) ([]error, error)

LeaveScopeWithForce in addition to doing what LeaveScope() does, when force is passed in as 'true', forces relation unit to leave scope, ignoring errors.

func (*RelationUnit) PrepareLeaveScope

func (ru *RelationUnit) PrepareLeaveScope() error

PrepareLeaveScope causes the unit to be reported as departed by watchers, but does not *actually* leave the scope, to avoid triggering relation cleanup.

func (*RelationUnit) ReadSettings

func (ru *RelationUnit) ReadSettings(uname string) (m map[string]interface{}, err error)

ReadSettings returns a map holding the settings of the unit with the supplied name within this relation. An error will be returned if the relation no longer exists, or if the unit's application is not part of the relation, or the settings are invalid; but mere non-existence of the unit is not grounds for an error, because the unit settings are guaranteed to persist for the lifetime of the relation, regardless of the lifetime of the unit.

func (*RelationUnit) Relation

func (ru *RelationUnit) Relation() *Relation

Relation returns the relation associated with the unit.

func (*RelationUnit) Settings

func (ru *RelationUnit) Settings() (*Settings, error)

Settings returns a Settings which allows access to the unit's settings within the relation.

func (*RelationUnit) UnitName

func (ru *RelationUnit) UnitName() string

UnitName returns the name of the unit in the relation.

func (*RelationUnit) Valid

func (ru *RelationUnit) Valid() (bool, error)

Valid returns whether this RelationUnit is one that can actually exist in the relation. For container-scoped relations, RUs can be created for subordinate units whose principal unit isn't a member of the relation. There are too many places that rely on being able to construct a nonsensical RU to query InScope or Joined, so we allow them to be constructed but they will always return false for Valid. TODO(babbageclunk): unpick the reliance on creating invalid RUs.

func (*RelationUnit) Watch

func (ru *RelationUnit) Watch() RelationUnitsWatcher

Watch returns a watcher that notifies of changes to counterpart units in the relation.

func (*RelationUnit) WatchScope

func (ru *RelationUnit) WatchScope() *RelationScopeWatcher

WatchScope returns a watcher which notifies of counterpart units entering and leaving the unit's scope.

type RelationUnitsWatcher

type RelationUnitsWatcher interface {
	Watcher

	Changes() corewatcher.RelationUnitsChannel
}

RelationUnitsWatcher generates signals when units enter or leave the scope of a RelationUnit, and changes to the settings of those units known to have entered.

type RemoteApplication

type RemoteApplication struct {
	// contains filtered or unexported fields
}

RemoteApplication represents the state of an application hosted in an external (remote) model.

func (*RemoteApplication) AddEndpoints

func (a *RemoteApplication) AddEndpoints(eps []charm.Relation) error

AddEndpoints adds the specified endpoints to the remote application. If an endpoint with the same name already exists, an error is returned. If the endpoints change during the update, the operation is retried.

func (*RemoteApplication) ConsumeVersion

func (a *RemoteApplication) ConsumeVersion() int

ConsumeVersion is incremented each time a new consumer proxy is created for an offer.

func (*RemoteApplication) Destroy

func (a *RemoteApplication) Destroy() error

Destroy ensures that this remote application reference and all its relations will be removed at some point; if no relation involving the application has any units in scope, they are all removed immediately.

func (*RemoteApplication) DestroyOperation

func (a *RemoteApplication) DestroyOperation(force bool) *DestroyRemoteApplicationOperation

DestroyOperation returns a model operation to destroy remote application.

func (*RemoteApplication) DestroyWithForce

func (a *RemoteApplication) DestroyWithForce(force bool, maxWait time.Duration) (opErrs []error, err error)

DestroyWithForce in addition to doing what Destroy() does, when force is passed in as 'true', forces th destruction of remote application, ignoring errors.

func (*RemoteApplication) Endpoint

func (a *RemoteApplication) Endpoint(relationName string) (Endpoint, error)

Endpoint returns the relation endpoint with the supplied name, if it exists.

func (*RemoteApplication) Endpoints

func (a *RemoteApplication) Endpoints() ([]Endpoint, error)

Endpoints returns the application's currently available relation endpoints.

func (*RemoteApplication) IsConsumerProxy

func (a *RemoteApplication) IsConsumerProxy() bool

IsConsumerProxy returns the application is created from a registration operation by a consuming model.

func (*RemoteApplication) IsRemote

func (a *RemoteApplication) IsRemote() bool

IsRemote returns true for a remote application.

func (*RemoteApplication) Kind

func (a *RemoteApplication) Kind() string

Kind returns a human readable name identifying the remote application kind.

func (*RemoteApplication) Life

func (a *RemoteApplication) Life() Life

Life returns whether the application is Alive, Dying or Dead.

func (*RemoteApplication) Macaroon

func (a *RemoteApplication) Macaroon() (*macaroon.Macaroon, error)

func (*RemoteApplication) Name

func (a *RemoteApplication) Name() string

Name returns the application name.

func (*RemoteApplication) OfferUUID

func (a *RemoteApplication) OfferUUID() string

OfferUUID returns the offer UUID.

func (*RemoteApplication) Refresh

func (a *RemoteApplication) Refresh() error

Refresh refreshes the contents of the RemoteApplication from the underlying state. It returns an error that satisfies errors.IsNotFound if the application has been removed.

func (*RemoteApplication) Relations

func (a *RemoteApplication) Relations() (relations []*Relation, err error)

Relations returns a Relation for every relation the application is in.

func (*RemoteApplication) SetSourceController

func (a *RemoteApplication) SetSourceController(sourceControllerUUID string) error

SetSourceController updates the source controller attribute.

func (*RemoteApplication) SetStatus

func (a *RemoteApplication) SetStatus(info status.StatusInfo) error

SetStatus sets the status for the application.

func (*RemoteApplication) SourceController

func (a *RemoteApplication) SourceController() string

SourceController returns the UUID of the controller hosting the application.

func (*RemoteApplication) SourceModel

func (a *RemoteApplication) SourceModel() names.ModelTag

SourceModel returns the tag of the model to which the application belongs.

func (*RemoteApplication) Status

func (a *RemoteApplication) Status() (status.StatusInfo, error)

Status returns the status of the remote application.

func (*RemoteApplication) StatusHistory

func (a *RemoteApplication) StatusHistory(filter status.StatusHistoryFilter) ([]status.StatusInfo, error)

StatusHistory returns a slice of at most filter.Size StatusInfo items or items as old as filter.Date or items newer than now - filter.Delta time representing past statuses for this remote application.

func (*RemoteApplication) String

func (a *RemoteApplication) String() string

String returns the application name.

func (*RemoteApplication) Tag

func (a *RemoteApplication) Tag() names.Tag

Tag returns a name identifying the application.

func (*RemoteApplication) TerminateOperation

func (a *RemoteApplication) TerminateOperation(message string) ModelOperation

TerminateOperation returns a ModelOperation that will terminate this remote application when applied, ensuring that all units have left scope as well.

func (*RemoteApplication) Token

func (a *RemoteApplication) Token() (string, error)

Token returns the token for the remote application, provided by the remote model to identify the application in future communications.

func (*RemoteApplication) URL

func (a *RemoteApplication) URL() (string, bool)

URL returns the remote application URL, and a boolean indicating whether or not a URL is known for the remote application. A URL will only be available for the consumer of an offered application.

func (*RemoteApplication) WatchRelations

func (a *RemoteApplication) WatchRelations() StringsWatcher

WatchRelations returns a StringsWatcher that notifies of changes to the lifecycles of relations involving a.

type RemoteApplicationsDescription

type RemoteApplicationsDescription interface {
	RemoteApplications() []description.RemoteApplication
}

RemoteApplicationsDescription defines an in-place usage for reading remote applications.

type RemoteApplicationsInput

type RemoteApplicationsInput interface {
	DocModelNamespace
	StateDocumentFactory
	RemoteApplicationsDescription
}

RemoteApplicationsInput describes the input used for migrating remote applications.

type RemoteConnectionStatus

type RemoteConnectionStatus struct {
	// contains filtered or unexported fields
}

RemoteConnectionStatus holds summary information about connections to an application offer.

func (*RemoteConnectionStatus) ActiveConnectionCount

func (r *RemoteConnectionStatus) ActiveConnectionCount() int

ActiveConnectionCount returns the number of active remote applications related to an offer.

func (*RemoteConnectionStatus) TotalConnectionCount

func (r *RemoteConnectionStatus) TotalConnectionCount() int

TotalConnectionCount returns the number of remote applications related to an offer.

type RemoteEntities

type RemoteEntities struct {
	// contains filtered or unexported fields
}

RemoteEntities wraps State to provide access to the remote entities collection.

func (*RemoteEntities) ExportLocalEntity

func (r *RemoteEntities) ExportLocalEntity(entity names.Tag) (string, error)

ExportLocalEntity adds an entity to the remote entities collection, returning an opaque token that uniquely identifies the entity within the model.

If an entity is exported twice, we return an error satisfying errors.IsAlreadyExists(); we also still return the token so that a second api call is not required by the caller to get the token.

func (*RemoteEntities) GetMacaroon

func (r *RemoteEntities) GetMacaroon(entity names.Tag) (*macaroon.Macaroon, error)

GetMacaroon returns the macaroon associated with the entity with the given tag and model.

func (*RemoteEntities) GetRemoteEntity

func (r *RemoteEntities) GetRemoteEntity(token string) (names.Tag, error)

GetRemoteEntity returns the tag of the entity associated with the given token.

func (*RemoteEntities) GetToken

func (r *RemoteEntities) GetToken(entity names.Tag) (string, error)

GetToken returns the token associated with the entity with the given tag and model.

func (*RemoteEntities) ImportRemoteEntity

func (r *RemoteEntities) ImportRemoteEntity(entity names.Tag, token string) error

ImportRemoteEntity adds an entity to the remote entities collection with the specified opaque token. If the entity already exists, its token will be overwritten. This method assumes that the provided token is unique within the source model, and does not perform any uniqueness checks on it.

func (*RemoteEntities) RemoveRemoteEntity

func (r *RemoteEntities) RemoveRemoteEntity(entity names.Tag) error

RemoveRemoteEntity removes the entity from the remote entities collection, and releases the token if the entity belongs to the local model.

func (*RemoteEntities) SaveMacaroon

func (r *RemoteEntities) SaveMacaroon(entity names.Tag, mac *macaroon.Macaroon) error

SaveMacaroon saves the given macaroon for the specified entity.

type RemoteEntitiesDescription

type RemoteEntitiesDescription interface {
	RemoteEntities() []description.RemoteEntity
}

RemoteEntitiesDescription defines an in-place usage for reading remote entities.

type RemoteEntitiesInput

type RemoteEntitiesInput interface {
	DocModelNamespace
	RemoteEntitiesDescription
	ApplicationOffersState

	// OfferUUID returns the uuid for a given offer name.
	OfferUUID(offerName string) (string, bool)
}

RemoteEntitiesInput describes the input used for migrating remote entities.

type RemoteEntity

type RemoteEntity struct {
	// contains filtered or unexported fields
}

RemoteEntity defines a remote entity that has a unique opaque token that identifies the entity within the model.

func (RemoteEntity) ID

func (e RemoteEntity) ID() string

ID returns the RemoteEntity ID.

func (RemoteEntity) Macaroon

func (e RemoteEntity) Macaroon() string

Macaroon returns the RemoteEntity Macaroon associated with the Token.

func (RemoteEntity) Token

func (e RemoteEntity) Token() string

Token returns the RemoteEntity Token.

type RemoveOfferOperation

type RemoveOfferOperation struct {

	// ForcedOperation stores needed information to force this operation.
	ForcedOperation
	// contains filtered or unexported fields
}

RemoveOfferOperation is a model operation to remove application offer.

func (*RemoveOfferOperation) Build

func (op *RemoveOfferOperation) Build(attempt int) (ops []txn.Op, err error)

Build is part of the ModelOperation interface.

func (*RemoveOfferOperation) Done

func (op *RemoveOfferOperation) Done(err error) error

Done is part of the ModelOperation interface.

type RemoveUnitOperation

type RemoveUnitOperation struct {
	// ForcedOperation stores needed information to force this operation.
	ForcedOperation

	// Store is the object store to use for blob access.
	Store objectstore.ObjectStore
	// contains filtered or unexported fields
}

RemoveUnitOperation is a model operation for removing a unit.

func (*RemoveUnitOperation) Build

func (op *RemoveUnitOperation) Build(attempt int) ([]txn.Op, error)

Build is part of the ModelOperation interface.

func (*RemoveUnitOperation) Done

func (op *RemoveUnitOperation) Done(err error) error

Done is part of the ModelOperation interface.

type Remover

type Remover interface {
	Remove(objectstore.ObjectStore) error
}

Remover represents entities with a Remove method.

type ResolvedMode

type ResolvedMode string

ResolvedMode describes the way state transition errors are resolved.

const (
	ResolvedNone       ResolvedMode = ""
	ResolvedRetryHooks ResolvedMode = "retry-hooks"
	ResolvedNoHooks    ResolvedMode = "no-hooks"
)

These are available ResolvedMode values.

type RunTransactionObserverFunc

type RunTransactionObserverFunc func(dbName, modelUUID string, attempt int, duration time.Duration, ops []txn.Op, err error)

RunTransactionObserverFunc is the type of a function to be called after an mgo/txn transaction is run.

type SSHHostKeys

type SSHHostKeys []string

SSHHostKeys holds the public SSH host keys for an entity (almost certainly a machine).

The host keys are one line each and are stored in the same format as the SSH authorized_keys and ssh_host_key*.pub files.

type SaveCloudServiceArgs

type SaveCloudServiceArgs struct {
	// Id will be the application Name if it's a part of application,
	// and will be controller UUID for k8s a controller(controller does not have an application),
	// then is wrapped with applicationGlobalKey.
	Id         string
	ProviderId string
	Addresses  corenetwork.SpaceAddresses

	Generation            int64
	DesiredScaleProtected bool
}

SaveCloudServiceArgs defines the arguments for SaveCloudService method.

type SessionCloser

type SessionCloser func()

type SetCharmConfig

type SetCharmConfig struct {
	// Charm is the new charm to use for the application. New units
	// will be started with this charm, and existing units will be
	// upgraded to use it.
	Charm CharmRefFull

	// CharmOrigin is the data for where the charm comes from.  Eventually
	// Channel should be move there.
	CharmOrigin *CharmOrigin

	// ConfigSettings is the charm config settings to apply when upgrading
	// the charm.
	ConfigSettings charm.Settings

	// ForceUnits forces the upgrade on units in an error state.
	ForceUnits bool

	// ForceBase forces the use of the charm even if it is not one of
	// the charm's supported series.
	ForceBase bool

	// Force forces the overriding of the lxd profile validation even if the
	// profile doesn't validate.
	Force bool

	// PendingResourceIDs is a map of resource names to resource IDs to activate during
	// the upgrade.
	PendingResourceIDs map[string]string

	// StorageConstraints contains the storage constraints to add or update when
	// upgrading the charm.
	//
	// Any existing storage instances for the named stores will be
	// unaffected; the storage constraints will only be used for
	// provisioning new storage instances.
	StorageConstraints map[string]StorageConstraints

	// EndpointBindings is an operator-defined map of endpoint names to
	// space names that should be merged with any existing bindings.
	EndpointBindings map[string]string
}

SetCharmConfig contains the parameters for Application.SetCharm.

type Settings

type Settings struct {
	// contains filtered or unexported fields
}

A Settings manages changes to settings as a delta in memory and merges them back in the database when explicitly requested.

func (*Settings) Delete

func (s *Settings) Delete(key string)

Delete removes key.

func (*Settings) Get

func (s *Settings) Get(key string) (value interface{}, found bool)

Get returns the value of key and whether it was found.

func (*Settings) Keys

func (s *Settings) Keys() []string

Keys returns the current keys in alphabetical order.

func (*Settings) Map

func (s *Settings) Map() map[string]interface{}

Map returns all keys and values of the node.

func (*Settings) Read

func (s *Settings) Read() error

Read (re)reads the node data into c.

func (*Settings) Set

func (s *Settings) Set(key string, value interface{})

Set sets key to value

func (*Settings) Update

func (s *Settings) Update(kv map[string]interface{})

Update sets multiple key/value pairs.

func (*Settings) Write

func (s *Settings) Write() (settings.ItemChanges, error)

Write writes changes made to c back onto its node. Changes are written as a delta applied on top of the latest version of the node, to prevent overwriting unrelated changes made to the node since it was last read.

func (*Settings) WriteOperation

func (s *Settings) WriteOperation() ModelOperation

WriteOperation returns a ModelOperation to persist all mutations to a Settings instance.

type State

type State struct {
	// contains filtered or unexported fields
}

State represents the state of an model managed by juju.

func (*State) APIHostPortsForAgents

func (st *State) APIHostPortsForAgents(controllerConfig controller.Config) ([]network.SpaceHostPorts, error)

APIHostPortsForAgents returns the collection of API addresses that should be used by agents. If the controller model is CAAS type, the return will be the controller k8s service addresses in cloud service. If there is no management network space configured for the controller, or if the space is misconfigured, the return will be the same as APIHostPortsForClients. Otherwise the returned addresses will correspond with the management net space. If there is no document at all, we simply fall back to APIHostPortsForClients.

func (*State) APIHostPortsForClients

func (st *State) APIHostPortsForClients(controllerConfig controller.Config) ([]network.SpaceHostPorts, error)

APIHostPortsForClients returns the collection of *all* known API addresses.

func (*State) AddApplication

func (st *State) AddApplication(
	args AddApplicationArgs,
	store objectstore.ObjectStore,
) (_ *Application, err error)

AddApplication creates a new application, running the supplied charm, with the supplied name (which must be unique). If the charm defines peer relations, they will be created automatically.

func (*State) AddCharm

func (st *State) AddCharm(info CharmInfo) (stch CharmRefFull, err error)

AddCharm adds the ch charm with curl to the state. On success the newly added charm state is returned.

TODO(achilleasa) Overwrite this implementation with the body of the AddCharmMetadata method once the server-side bundle expansion work is complete.

func (*State) AddCharmMetadata

func (st *State) AddCharmMetadata(info CharmInfo) (CharmRefFull, error)

AddCharmMetadata creates a charm document in state and populates it with the provided charm metadata details. If the charm document already exists it will be returned back as a *charm.Charm.

If the charm document already exists as a placeholder and the charm hasn't been downloaded yet, the document is updated with the current charm info.

If the provided CharmInfo does not include a SHA256 and storage path entry, then the charm document will be created with the PendingUpload flag set to true.

The charm URL must either have a charmhub ("ch") schema and it must include a revision that isn't a negative value. Otherwise, an error will be returned.

func (*State) AddCharmPlaceholder

func (st *State) AddCharmPlaceholder(curl *charm.URL) (err error)

AddCharmPlaceholder creates a charm document in state for the given charm URL, which must reference a charm from the given store. The charm document is marked as a placeholder which means that if the charm is to be deployed, it will need to first be uploaded to model storage.

func (*State) AddControllerNode

func (st *State) AddControllerNode() (*controllerNode, error)

AddControllerNode creates a new controller node.

func (*State) AddMachine

func (st *State) AddMachine(
	base Base, jobs ...MachineJob,
) (*Machine, error)

AddMachine adds a machine with the given series and jobs. It is deprecated and around for testing purposes only.

func (*State) AddMachineInsideMachine

func (st *State) AddMachineInsideMachine(
	template MachineTemplate,
	parentId string,
	containerType instance.ContainerType,
) (*Machine, error)

AddMachineInsideMachine adds a machine inside a container of the given type on the existing machine with id=parentId.

func (*State) AddMachineInsideNewMachine

func (st *State) AddMachineInsideNewMachine(
	template, parentTemplate MachineTemplate,
	containerType instance.ContainerType,
) (*Machine, error)

AddMachineInsideNewMachine creates a new machine within a container of the given type inside another new machine. The two given templates specify the form of the child and parent respectively.

func (*State) AddMachines

func (st *State) AddMachines(
	templates ...MachineTemplate,
) (_ []*Machine, err error)

AddMachines adds new machines configured according to the given templates.

func (*State) AddOfferConnection

func (st *State) AddOfferConnection(args AddOfferConnectionParams) (_ *OfferConnection, err error)

AddOfferConnection creates a new offer connection record, which records details about a relation made from a remote model to an offer in the local model.

func (*State) AddOneMachine

func (st *State) AddOneMachine(
	template MachineTemplate,
) (*Machine, error)

AddOneMachine machine adds a new machine configured according to the given template.

func (*State) AddRelation

func (st *State) AddRelation(eps ...Endpoint) (r *Relation, err error)

AddRelation creates a new relation with the given endpoints.

func (*State) AddRemoteApplication

func (st *State) AddRemoteApplication(args AddRemoteApplicationParams) (_ *RemoteApplication, err error)

AddRemoteApplication creates a new remote application record, having the supplied relation endpoints, with the supplied name, which must be unique across all applications, local and remote.

func (*State) AliveRelationKeys

func (st *State) AliveRelationKeys() []string

AliveRelationKeys returns the relation keys of all live relations in the model. Used in charmhub metrics collection.

func (*State) AllApplications

func (st *State) AllApplications() (applications []*Application, err error)

AllApplications returns all deployed applications in the model.

func (*State) AllConstraints

func (st *State) AllConstraints() ([]*Constraints, error)

AllConstraints returns all constraints in the collection.

func (*State) AllIPAddresses

func (st *State) AllIPAddresses() (addresses []*Address, err error)

AllIPAddresses returns all ip addresses in the model.

func (*State) AllLinkLayerDevices

func (st *State) AllLinkLayerDevices() (devices []*LinkLayerDevice, err error)

AllLinkLayerDevices returns all link layer devices in the model.

func (*State) AllMachineRemovals

func (st *State) AllMachineRemovals() ([]string, error)

AllMachineRemovals returns (the ids of) all of the machines that need to be removed but need provider-level cleanup.

func (*State) AllMachines

func (st *State) AllMachines() ([]*Machine, error)

AllMachines returns all machines in the model ordered by id.

func (*State) AllMachinesCount

func (st *State) AllMachinesCount() (int, error)

AllMachinesCount returns thje total number of machines in the model

func (*State) AllModelUUIDs

func (st *State) AllModelUUIDs() ([]string, error)

AllModelUUIDs returns the UUIDs for all non-dead models in the controller. Results are sorted by (name, owner).

func (*State) AllModelUUIDsIncludingDead

func (st *State) AllModelUUIDsIncludingDead() ([]string, error)

AllModelUUIDsIncludingDead returns the UUIDs for all models in the controller. Results are sorted by (name, owner).

func (*State) AllOfferConnections

func (st *State) AllOfferConnections() ([]*OfferConnection, error)

AllOfferConnections returns all offer connections in the model.

func (*State) AllRelations

func (st *State) AllRelations() (relations []*Relation, err error)

AllRelations returns all relations in the model ordered by id.

func (*State) AllRemoteApplications

func (st *State) AllRemoteApplications() (applications []*RemoteApplication, err error)

AllRemoteApplications returns all the remote applications used by the model.

func (*State) AllRemoteEntities

func (st *State) AllRemoteEntities() ([]RemoteEntity, error)

AllRemoteEntities returns all the remote entities for the model.

func (*State) AllUnitAssignments

func (st *State) AllUnitAssignments() ([]UnitAssignment, error)

AllUnitAssignments returns all staged unit assignments in the model.

func (*State) Application

func (st *State) Application(name string) (_ *Application, err error)

Application returns an application state by name.

func (*State) ApplyOperation

func (st *State) ApplyOperation(op ModelOperation) error

ApplyOperation applies a given ModelOperation to the model.

NOTE(axw) when all model-specific types and methods are moved to Model, then this should move also.

func (*State) AssignStagedUnits

func (st *State) AssignStagedUnits(
	allSpaces network.SpaceInfos,
	ids []string,
) ([]UnitAssignmentResult, error)

AssignStagedUnits gets called by the UnitAssigner worker, and runs the given assignments.

func (*State) AssignUnit

func (st *State) AssignUnit(
	u *Unit,
	policy AssignmentPolicy,
) (err error)

AssignUnit places the unit on a machine. Depending on the policy, and the state of the model, this may lead to new instances being launched within the model.

func (*State) AssignUnitWithPlacement

func (st *State) AssignUnitWithPlacement(
	unit *Unit,
	placement *instance.Placement,
	allSpaces network.SpaceInfos,
) error

AssignUnitWithPlacement chooses a machine using the given placement directive and then assigns the unit to it.

func (*State) Charm

func (st *State) Charm(curl string) (CharmRefFull, error)

Charm returns the charm with the given URL. Charms pending to be uploaded are returned for Charmhub charms. Charm placeholders are never returned.

func (*State) CharmFromSha256

func (st *State) CharmFromSha256(bundleSha256 string) (*Charm, error)

Charm returns the charm with the given URL. Charms pending to be uploaded are returned for Charmhub charms. Charm placeholders are never returned.

func (*State) Cleanup

func (st *State) Cleanup(
	ctx context.Context, store objectstore.ObjectStore,
	machineRemover MachineRemover,
	applicationService ApplicationAndUnitRemover,
) (err error)

Cleanup removes all documents that were previously marked for removal, if any such exist. It should be called periodically by at least one element of the system.

func (*State) Close

func (st *State) Close() (err error)

Close the connection to the database.

func (*State) CloudCredentialUpdated

func (st *State) CloudCredentialUpdated(tag names.CloudCredentialTag) error

CloudCredentialUpdated updates models which use a credential to have their suspended status reverted.

func (*State) CloudService

func (st *State) CloudService(id string) (*CloudService, error)

CloudService returns a cloud service state by Id.

func (*State) CompleteMachineRemovals

func (st *State) CompleteMachineRemovals(ids ...string) error

CompleteMachineRemovals finishes the removal of the specified machines. The machines must have been marked for removal previously. Valid-looking-but-unknown machine ids are ignored so that this is idempotent.

func (*State) CompletedMigration

func (st *State) CompletedMigration() (ModelMigration, error)

CompletedMigration returns the most recent migration for this state's model if it reached the DONE phase and caused the model to be relocated.

func (*State) CompletedMigrationForModel

func (st *State) CompletedMigrationForModel(modelUUID string) (ModelMigration, error)

CompletedMigrationForModel returns the most recent migration for the input model UUID if it reached the DONE phase and caused the model to be relocated.

func (*State) ConstraintsBySpaceName

func (st *State) ConstraintsBySpaceName(spaceName string) ([]*Constraints, error)

ConstraintsBySpaceName returns all Constraints that include a positive or negative space constraint for the input space name.

func (*State) ControllerIds

func (st *State) ControllerIds() ([]string, error)

ControllerIds returns the ids of the controller nodes.

func (*State) ControllerInfo

func (st *State) ControllerInfo() (*ControllerInfo, error)

ControllerInfo returns information about the currently configured controller machines.

func (*State) ControllerModelTag

func (st *State) ControllerModelTag() names.ModelTag

ControllerModelTag returns the tag form the return value of ControllerModelUUID.

func (*State) ControllerModelUUID

func (st *State) ControllerModelUUID() string

ControllerModelUUID returns the UUID of the model that was bootstrapped. This is the only model that can have controller machines. The owner of this model is also considered "special", in that they are the only user that is able to create other users (until we have more fine grained permissions), and they cannot be disabled.

func (*State) ControllerNode

func (st *State) ControllerNode(id string) (ControllerNode, error)

ControllerNode returns the controller node with the given id.

func (*State) ControllerNodes

func (st *State) ControllerNodes() ([]*controllerNode, error)

ControllerNodes returns all the controller nodes.

func (*State) ControllerOwner

func (st *State) ControllerOwner() (names.UserTag, error)

ControllerOwner returns the owner of the controller model.

func (*State) ControllerTag

func (st *State) ControllerTag() names.ControllerTag

ControllerTag returns the tag form of the ControllerUUID.

func (*State) ControllerTimestamp

func (st *State) ControllerTimestamp() (*time.Time, error)

ControllerTimestamp returns the current timestamp of the backend controller.

func (*State) ControllerUUID

func (st *State) ControllerUUID() string

ControllerUUID returns the UUID for the controller of this state instance.

func (*State) CreateMigration

func (st *State) CreateMigration(spec MigrationSpec) (ModelMigration, error)

CreateMigration initialises state that tracks a model migration. It will return an error if there is already a model migration in progress.

func (*State) DumpAll

func (st *State) DumpAll() (map[string]interface{}, error)

DumpAll returns a map of collection names to a slice of documents in that collection. Every document that is related to the current model is returned in the map.

func (*State) EnableHA

func (st *State) EnableHA(
	numControllers int, cons constraints.Value, base Base, placement []string,
) (ControllersChanges, []string, error)

EnableHA adds controller machines as necessary to make the number of live controllers equal to numControllers. The given constraints and series will be attached to any new machines. If placement is not empty, any new machines which may be required are started according to the specified placement directives until the placement list is exhausted; thereafter any new machines are started according to the constraints and series. MachineID is the id of the machine where the apiserver is running.

func (*State) EndpointsRelation

func (st *State) EndpointsRelation(endpoints ...Endpoint) (*Relation, error)

EndpointsRelation returns the existing relation with the given endpoints.

func (*State) EnsureModelRemoved

func (st *State) EnsureModelRemoved() error

EnsureModelRemoved returns an error if any multi-model documents for this model are found. It is intended only to be used in tests and exported so it can be used in the tests of other packages.

func (*State) Export

func (st *State) Export(leaders map[string]string, store objectstore.ObjectStore) (description.Model, error)

Export the current model for the State.

func (*State) ExportPartial

func (st *State) ExportPartial(cfg ExportConfig, store objectstore.ObjectStore) (description.Model, error)

ExportPartial the current model for the State optionally skipping aspects as defined by the ExportConfig.

func (*State) FindEntity

func (st *State) FindEntity(tag names.Tag) (Entity, error)

FindEntity returns the entity with the given tag.

The returned value can be of type *Machine, *Unit, *User, *Application, *Model, or *Action, depending on the tag.

func (*State) GetSSHHostKeys

func (st *State) GetSSHHostKeys(tag names.MachineTag) (SSHHostKeys, error)

GetSSHHostKeys retrieves the SSH host keys stored for an entity. / NOTE: Currently only machines are supported. This can be generalised to take other tag types later, if and when we need it.

func (*State) HAPrimaryMachine

func (st *State) HAPrimaryMachine() (names.MachineTag, error)

HAPrimaryMachine returns machine tag for a controller machine that has a mongo instance that is primary in replicaset.

func (*State) InferActiveRelation

func (st *State) InferActiveRelation(names ...string) (*Relation, error)

InferActiveRelation returns the relation corresponding to the supplied application or endpoint name(s), assuming such a relation exists and is unique. There must be 1 or 2 supplied names, of the form <application>[:<endpoint>].

func (*State) InferEndpoints

func (st *State) InferEndpoints(names ...string) ([]Endpoint, error)

InferEndpoints returns the endpoints corresponding to the supplied names. There must be 1 or 2 supplied names, of the form <application>[:<endpoint>]. If the supplied names uniquely specify a possible relation, or if they uniquely specify a possible relation once all implicit relations have been filtered, the endpoints corresponding to that relation will be returned.

func (*State) InvalidateModelCredential

func (st *State) InvalidateModelCredential(reason string) error

InvalidateModelCredential invalidate cloud credential for the model of the given state.

func (*State) IsController

func (st *State) IsController() bool

IsController returns true if this state instance has the bootstrap model UUID.

func (*State) IsMigrationActive

func (st *State) IsMigrationActive() (bool, error)

IsMigrationActive returns true if a migration is in progress for the model associated with the State.

func (*State) KeyRelation

func (st *State) KeyRelation(key string) (*Relation, error)

KeyRelation returns the existing relation with the given key (which can be derived unambiguously from the relation's endpoints).

func (*State) LatestMigration

func (st *State) LatestMigration() (ModelMigration, error)

LatestMigration returns the most recent ModelMigration (if any) for a model that has not been removed from the state. Callers interested in ModelMigrations for models that have been removed after a successful migration to another controller should use CompletedMigration instead.

func (*State) LatestPlaceholderCharm

func (st *State) LatestPlaceholderCharm(curl *charm.URL) (*Charm, error)

LatestPlaceholderCharm returns the latest charm described by the given URL but which is not yet deployed.

func (*State) LinkLayerDevice

func (st *State) LinkLayerDevice(id string) (*LinkLayerDevice, error)

func (*State) Machine

func (st *State) Machine(id string) (*Machine, error)

Machine returns the machine with the given id.

func (*State) MachineCountForBase

func (st *State) MachineCountForBase(base ...Base) (map[string]int, error)

MachineCountForBase counts the machines for the provided bases in the model. The bases must all be for the one os.

func (*State) Migration

func (st *State) Migration(id string) (ModelMigration, error)

Migration retrieves a specific ModelMigration by its id. See also LatestMigration and LatestCompletedMigration.

func (*State) Model

func (st *State) Model() (*Model, error)

Model returns the model entity.

func (*State) ModelConstraints

func (st *State) ModelConstraints() (constraints.Value, error)

ModelConstraints returns the current model constraints.

func (*State) ModelExists

func (st *State) ModelExists(uuid string) (bool, error)

ModelExists returns true if a model with the supplied UUID exists.

func (*State) ModelPayloads

func (st *State) ModelPayloads() (ModelPayloads, error)

ModelPayloads returns a ModelPayloads for the state's model.

func (*State) ModelUUID

func (st *State) ModelUUID() string

ModelUUID returns the model UUID for the model controlled by this state instance.

func (*State) MongoSession

func (st *State) MongoSession() *mgo.Session

MongoSession returns the underlying mongodb session used by the state. It is exposed so that external code can maintain the mongo replica set and should not otherwise be used.

func (*State) MongoVersion

func (st *State) MongoVersion() (string, error)

MongoVersion return the string repre

func (*State) NeedsCleanup

func (st *State) NeedsCleanup() (bool, error)

NeedsCleanup returns true if documents previously marked for removal exist.

func (*State) NewSettings

func (st *State) NewSettings() *StateSettings

NewSettings returns a new StateSettings reference for working with settings in the current database.

func (*State) OfferConnectionForRelation

func (st *State) OfferConnectionForRelation(relationKey string) (*OfferConnection, error)

OfferConnectionForRelation returns the offer connection for the specified relation.

func (*State) OfferConnections

func (st *State) OfferConnections(offerUUID string) ([]*OfferConnection, error)

OfferConnections returns the offer connections for an offer.

func (*State) OfferConnectionsForUser

func (st *State) OfferConnectionsForUser(username string) ([]*OfferConnection, error)

OfferConnectionsForUser returns the offer connections for the specified user.

func (*State) Ping

func (st *State) Ping() error

Ping probes the state's database connection to ensure that it is still alive.

func (*State) PrepareLocalCharmUpload

func (st *State) PrepareLocalCharmUpload(url string) (chosenURL *charm.URL, err error)

PrepareLocalCharmUpload must be called before a local charm is uploaded to the provider storage in order to create a charm document in state. It returns the chosen unique charm URL reserved in state for the charm.

The url's schema must be "local" and it must include a revision.

func (*State) ProcessDyingModel

func (st *State) ProcessDyingModel() (err error)

ProcessDyingModel checks if the model is Dying and empty, and if so, transitions the model to Dead.

If the model is non-empty because it is the controller model and still contains hosted models, an error satisfying HasHostedModelsError will be returned. If the model is otherwise non-empty, an error satisfying IsNonEmptyModelError will be returned.

func (*State) ReadSettings

func (st *State) ReadSettings(collection, key string) (*Settings, error)

ReadSettings returns the settings for the given key.

func (*State) Relation

func (st *State) Relation(id int) (*Relation, error)

Relation returns the existing relation with the given id.

func (*State) RemoteApplication

func (st *State) RemoteApplication(name string) (_ *RemoteApplication, err error)

RemoteApplication returns a remote application state by name.

func (*State) RemoteConnectionStatus

func (st *State) RemoteConnectionStatus(offerUUID string) (*RemoteConnectionStatus, error)

RemoteConnectionStatus returns summary information about connections to the specified offer.

func (*State) RemoteEntities

func (st *State) RemoteEntities() *RemoteEntities

RemoteEntities returns a wrapped state instance providing access to the remote entities collection.

func (*State) RemoveControllerReference

func (st *State) RemoveControllerReference(c controllerReference) error

RemoveControllerReference will unregister Controller from being part of the set of Controllers. It must not have or want to vote, and it must not be the last controller.

func (*State) RemoveDyingModel

func (st *State) RemoveDyingModel() error

RemoveDyingModel sets current model to dead then removes all documents from multi-model collections.

func (*State) RemoveExportingModelDocs

func (st *State) RemoveExportingModelDocs() error

RemoveExportingModelDocs removes all documents from multi-model collections for the current model. This method asserts that the model's migration mode is "exporting".

func (*State) RemoveImportingModelDocs

func (st *State) RemoveImportingModelDocs() error

RemoveImportingModelDocs removes all documents from multi-model collections for the current model. This method asserts that the model's migration mode is "importing".

func (*State) RemoveModelsCredential

func (st *State) RemoveModelsCredential(tag names.CloudCredentialTag) error

RemoveModelsCredential clears out given credential reference from all models that have it.

func (*State) Report

func (st *State) Report() map[string]interface{}

Report conforms to the Dependency Engine Report() interface, giving an opportunity to introspect what is going on at runtime.

func (*State) ResolveConstraints

func (st *State) ResolveConstraints(cons constraints.Value) (constraints.Value, error)

ResolveConstraints combines the given constraints with the environ constraints to get a constraints which will be used to create a new instance.

func (*State) SafeControllerIds

func (st *State) SafeControllerIds() ([]string, error)

SafeControllerIds returns the ids of the controller nodes by looking for the newer "controller-ids" attribute but falling back to the legacy "machineids" if needed. This method is only used when preparing for upgrades since 2.6 or earlier used "machineids".

func (*State) SaveCloudService

func (st *State) SaveCloudService(args SaveCloudServiceArgs) (_ *CloudService, err error)

SaveCloudService creates a cloud service.

func (*State) Sequences

func (st *State) Sequences() (map[string]int, error)

Sequences returns the model's sequence names and their next values.

func (*State) SetAPIHostPorts

func (st *State) SetAPIHostPorts(
	controllerConfig controller.Config,
	newHostPorts []network.SpaceHostPorts,
	newHostPortsForAgents []network.SpaceHostPorts,
) error

SetAPIHostPorts sets the addresses, if changed, of two collections:

  • The list of *all* addresses at which the API is accessible.
  • The list of addresses at which the API can be accessed by agents according to the controller management space configuration.

Each server is represented by one element in the top level slice.

func (*State) SetAdminMongoPassword

func (st *State) SetAdminMongoPassword(password string) error

SetAdminMongoPassword sets the administrative password to access the state. If the password is non-empty, all subsequent attempts to access the state must be authorized; otherwise no authorization is required.

func (*State) SetModelAgentVersion

func (st *State) SetModelAgentVersion(newVersion version.Number, stream *string, ignoreAgentVersions bool, upgrader Upgrader) (err error)

SetModelAgentVersion changes the agent version for the model to the given version, only if the model is in a stable state (all agents are running the current version). If this is a hosted model, newVersion cannot be higher than the controller version.

func (*State) SetModelConstraints

func (st *State) SetModelConstraints(cons constraints.Value) error

SetModelConstraints replaces the current model constraints.

func (*State) SetSSHHostKeys

func (st *State) SetSSHHostKeys(tag names.MachineTag, keys SSHHostKeys) error

SetSSHHostKeys updates the stored SSH host keys for an entity.

See the note for GetSSHHostKeys regarding supported entities.

func (*State) SetStateServingInfo

func (st *State) SetStateServingInfo(info jujucontroller.StateServingInfo) error

SetStateServingInfo stores information needed for running a controller

func (*State) StateServingInfo

func (st *State) StateServingInfo() (jujucontroller.StateServingInfo, error)

StateServingInfo returns information for running a controller machine

func (*State) ToolsStorage

func (st *State) ToolsStorage(store objectstore.ObjectStore) (binarystorage.StorageCloser, error)

ToolsStorage returns a new binarystorage.StorageCloser that stores tools metadata in the "juju" database "toolsmetadata" collection.

func (*State) TrackQueries

func (s *State) TrackQueries(method string) QueryTracker

TrackQueries allows tests to turn on a mechanism to count and track the database queries made. The query is counted if the method specified is found in the traceback. It is currently just using a string.Contains check. We may want to extend this functionality at some state to use regex, or support multiple matches.

func (*State) Unit

func (st *State) Unit(name string) (*Unit, error)

Unit returns a unit by name.

func (*State) UnitPayloads

func (st *State) UnitPayloads(unit *Unit) (UnitPayloads, error)

UnitPayloads returns a UnitPayloads for the supplied unit.

func (*State) UnitsFor

func (st *State) UnitsFor(machineId string) ([]*Unit, error)

UnitsFor returns the units placed in the given machine id.

func (*State) UnitsInError

func (st *State) UnitsInError() ([]*Unit, error)

UnitsInError returns the units which have an agent status of Error.

func (*State) WatchAPIHostPortsForAgents

func (st *State) WatchAPIHostPortsForAgents() NotifyWatcher

WatchAPIHostPortsForAgents returns a NotifyWatcher that notifies when the set of API addresses usable by agents changes.

func (*State) WatchAPIHostPortsForClients

func (st *State) WatchAPIHostPortsForClients() NotifyWatcher

WatchAPIHostPortsForClients returns a NotifyWatcher that notifies when the set of API addresses changes.

func (*State) WatchActionLogs

func (st *State) WatchActionLogs(actionId string) StringsWatcher

WatchActionLogs starts and returns a StringsWatcher that notifies on new log messages for a specified action being added. The strings are json encoded action messages.

func (*State) WatchApplicationCharms

func (st *State) WatchApplicationCharms() StringsWatcher

WatchApplicationCharms notifies when application charm URLs change. TODO(wallyworld) - use a filter to only trigger on charm URL changes.

func (*State) WatchApplications

func (st *State) WatchApplications() StringsWatcher

WatchApplications returns a StringsWatcher that notifies of changes to the lifecycles of the applications in the model.

func (*State) WatchCharms

func (st *State) WatchCharms() StringsWatcher

WatchCharms notifies when charms change.

func (*State) WatchCleanups

func (st *State) WatchCleanups() NotifyWatcher

WatchCleanups starts and returns a CleanupWatcher.

func (*State) WatchControllerInfo

func (st *State) WatchControllerInfo() StringsWatcher

WatchControllerInfo returns a StringsWatcher for the controllers collection

func (*State) WatchControllerStatusChanges

func (st *State) WatchControllerStatusChanges() StringsWatcher

WatchControllerStatusChanges starts and returns a StringsWatcher that notifies when the status of a controller node changes. TODO(cherylj) Add unit tests for this, as per bug 1543408.

func (*State) WatchForMigration

func (st *State) WatchForMigration() NotifyWatcher

WatchForMigration returns a notify watcher which reports when a migration is in progress for the model associated with the State.

func (*State) WatchForUnitAssignment

func (st *State) WatchForUnitAssignment() StringsWatcher

WatchForUnitAssignment watches for new applications that request units to be assigned to machines.

func (*State) WatchMachineRemovals

func (st *State) WatchMachineRemovals() NotifyWatcher

WatchMachineRemovals returns a NotifyWatcher which triggers whenever machine removal records are added or removed.

func (*State) WatchMachines

func (st *State) WatchMachines() StringsWatcher

WatchMachines notifies when machines change.

func (*State) WatchMigrationStatus

func (st *State) WatchMigrationStatus() NotifyWatcher

WatchMigrationStatus returns a NotifyWatcher which triggers whenever the status of latest migration for the State's model changes. One instance can be used across migrations. The watcher will report changes when one migration finishes and another one begins.

Note that this watcher does not produce an initial event if there's never been a migration attempt for the model.

func (*State) WatchMinUnits

func (st *State) WatchMinUnits() StringsWatcher

WatchMinUnits returns a StringsWatcher for the minUnits collection

func (*State) WatchModelEntityReferences

func (st *State) WatchModelEntityReferences(mUUID string) NotifyWatcher

WatchModelEntityReferences returns a NotifyWatcher waiting for the Model Entity references to change for specified model.

func (*State) WatchModelLives

func (st *State) WatchModelLives() StringsWatcher

WatchModelLives returns a StringsWatcher that notifies of changes to any model life values. The watcher will not send any more events for a model after it has been observed to be Dead.

func (*State) WatchModelMachineStartTimes

func (st *State) WatchModelMachineStartTimes(quiesceInterval time.Duration) StringsWatcher

WatchModelMachineStartTimes watches the non-container machines in the model for changes to the Life or AgentStartTime fields and reports them as a batch after the specified quiesceInterval time has passed without seeing any new change events.

func (*State) WatchModelMachines

func (st *State) WatchModelMachines() StringsWatcher

WatchModelMachines returns a StringsWatcher that notifies of changes to the lifecycles of the machines (but not containers) in the model.

func (*State) WatchModels

func (st *State) WatchModels() StringsWatcher

WatchModels returns a StringsWatcher that notifies of changes to any models. If a model is removed this *won't* signal that the model has gone away - it's based on a collectionWatcher which omits these events.

func (*State) WatchOffer

func (st *State) WatchOffer(offerName string) NotifyWatcher

WatchOffer returns a new NotifyWatcher watching for changes to the specified offer.

func (*State) WatchOfferStatus

func (st *State) WatchOfferStatus(offerUUID string) (NotifyWatcher, error)

WatchOfferStatus returns a NotifyWatcher that notifies of changes to the offer's status.

func (*State) WatchRemoteApplications

func (st *State) WatchRemoteApplications() StringsWatcher

WatchRemoteApplications returns a StringsWatcher that notifies of changes to the lifecycles of the remote applications in the model.

func (*State) WatchRemoteRelations

func (st *State) WatchRemoteRelations() StringsWatcher

WatchRemoteRelations returns a StringsWatcher that notifies of changes to the lifecycles of the remote relations in the model.

func (*State) WatchUnits

func (st *State) WatchUnits() StringsWatcher

WatchUnits notifies when units change.

type StateDocumentFactory

type StateDocumentFactory interface {
	NewRemoteApplication(*remoteApplicationDoc) *RemoteApplication
	MakeRemoteApplicationDoc(description.RemoteApplication) *remoteApplicationDoc
	MakeStatusDoc(description.Status) statusDoc
	MakeStatusOp(string, statusDoc) txn.Op
}

StateDocumentFactory creates documents that are useful with in the state package. In essence this just allows us to model our dependencies correctly without having to construct dependencies everywhere. Note: we need public methods here because gomock doesn't mock private methods

type StatePool

type StatePool struct {
	// contains filtered or unexported fields
}

StatePool is a cache of State instances for multiple models. Clients should call Release when they have finished with any state.

func OpenStatePool

func OpenStatePool(args OpenParams) (_ *StatePool, err error)

OpenStatePool returns a new StatePool instance.

func (*StatePool) Clock

func (p *StatePool) Clock() clock.Clock

Clock returns the clock used by the system state.

func (*StatePool) Close

func (p *StatePool) Close() error

Close closes all State instances in the pool.

func (*StatePool) Get

func (p *StatePool) Get(modelUUID string) (*PooledState, error)

Get returns a PooledState for a given model, creating a new State instance if required. If the State has been marked for removal, an error is returned.

func (*StatePool) GetModel

func (p *StatePool) GetModel(modelUUID string) (*Model, PoolHelper, error)

GetModel is a convenience method for getting a Model for a State.

func (*StatePool) IntrospectionReport

func (p *StatePool) IntrospectionReport() string

IntrospectionReport produces the output for the introspection worker in order to look inside the state pool.

func (*StatePool) Remove

func (p *StatePool) Remove(modelUUID string) (bool, error)

Remove takes the state out of the pool and closes it, or marks it for removal if it's currently being used (indicated by Gets without corresponding Releases). The boolean result indicates whether or not the state was removed.

func (*StatePool) Report

func (p *StatePool) Report() map[string]interface{}

Report conforms to the Dependency Engine Report() interface, giving an opportunity to introspect what is going on at runtime.

func (*StatePool) StartWorkers

func (p *StatePool) StartWorkers(st *State) error

StartWorkers is used by factory.NewModel in tests. TODO(wallyworld) refactor to remove this dependency.

func (*StatePool) SystemState

func (p *StatePool) SystemState() (*State, error)

SystemState returns the State passed in to NewStatePool.

type StateSettings

type StateSettings struct {
	// contains filtered or unexported fields
}

StateSettings is used to expose various settings APIs outside of the state package.

func NewStateSettings

func NewStateSettings(backend modelBackend) *StateSettings

NewStateSettings creates a StateSettings from a modelBackend (e.g. State). TODO (manadart 2020-01-21): Usage of this method should be phased out in favour of NewSettings, above. That method facilitates state mocks and shims for testing in external packages in a way that this method can not, because the package-private modelBackend is inaccessible to them.

func (*StateSettings) CreateSettings

func (s *StateSettings) CreateSettings(key string, settings map[string]interface{}) error

CreateSettings exposes createSettings on state for use outside the state package.

func (*StateSettings) DeltaOps

func (s *StateSettings) DeltaOps(key string, delta settings.ItemChanges) ([]txn.Op, error)

DeltaOps returns the operations required to modify the settings document identified by the input key, with the the input settings changes.

func (*StateSettings) ListSettings

func (s *StateSettings) ListSettings(keyPrefix string) (map[string]map[string]interface{}, error)

ListSettings exposes listSettings on state for use outside the state package.

func (*StateSettings) ReadSettings

func (s *StateSettings) ReadSettings(key string) (map[string]interface{}, error)

ReadSettings exposes readSettings on state for use outside the state package.

func (*StateSettings) RemoveSettings

func (s *StateSettings) RemoveSettings(key string) error

RemoveSettings exposes removeSettings on state for use outside the state package.

func (*StateSettings) ReplaceSettings

func (s *StateSettings) ReplaceSettings(key string, settings map[string]interface{}) error

ReplaceSettings exposes replaceSettings on state for use outside the state package.

type StorageAttachment

type StorageAttachment interface {
	// StorageInstance returns the tag of the corresponding storage
	// instance.
	StorageInstance() names.StorageTag

	// Unit returns the tag of the corresponding unit.
	Unit() names.UnitTag

	// Life reports whether the storage attachment is Alive, Dying or Dead.
	Life() Life
}

StorageAttachment represents the state of a unit's attachment to a storage instance. A non-shared storage instance will have a single attachment for the storage instance's owning unit, whereas a shared storage instance will have an attachment for each unit of the application owning the storage instance.

type StorageConstraints

type StorageConstraints struct {
	// Pool is the name of the storage pool from which to provision the
	// storage instances.
	Pool string `bson:"pool"`

	// Size is the required size of the storage instances, in MiB.
	Size uint64 `bson:"size"`

	// Count is the required number of storage instances.
	Count uint64 `bson:"count"`
}

StorageConstraints contains the user-specified constraints for provisioning storage instances for an application unit.

type StorageInstance

type StorageInstance interface {
	Entity

	// StorageTag returns the tag for the storage instance.
	StorageTag() names.StorageTag

	// Kind returns the storage instance kind.
	Kind() StorageKind

	// Owner returns the tag of the application or unit that owns this storage
	// instance, and a boolean indicating whether or not there is an owner.
	//
	// When a non-shared storage instance is detached from the unit, the
	// storage instance's owner will be cleared, allowing it to be attached
	// to another unit.
	Owner() (names.Tag, bool)

	// StorageName returns the name of the storage, as defined in the charm
	// storage metadata. This does not uniquely identify storage instances,
	// but identifies the group that the instances belong to.
	StorageName() string

	// Life reports whether the storage instance is Alive, Dying or Dead.
	Life() Life

	// Pool returns the name of the storage pool from which the storage
	// instance has been or will be provisioned.
	Pool() string
}

StorageInstance represents the state of a unit or application-wide storage instance in the model.

type StorageKind

type StorageKind int

StorageKind defines the type of a store: whether it is a block device or a filesystem.

const (
	StorageKindUnknown StorageKind = iota
	StorageKindBlock
	StorageKindFilesystem
)

func (StorageKind) String

func (k StorageKind) String() string

String returns a human-readable string representing the type.

type StoragePoolGetter

type StoragePoolGetter interface {
	GetStorageRegistry(ctx context.Context) (storage.ProviderRegistry, error)
	GetStoragePoolByName(ctx context.Context, name string) (*storage.Config, error)
}

StoragePoolGetter instances get a storage pool by name.

type StringsWatcher

type StringsWatcher interface {
	Watcher
	Changes() <-chan []string
}

StringsWatcher generates signals when something changes, returning the changes as a list of strings.

type TimeUnit

type TimeUnit string

type TransactionRunner

type TransactionRunner interface {
	RunTransaction([]txn.Op) error
}

TransactionRunner is an in-place usage for running transactions to a persistence store.

type Unit

type Unit struct {
	// contains filtered or unexported fields
}

Unit represents the state of an application unit.

func (*Unit) ActionSpecs

func (u *Unit) ActionSpecs() (ActionSpecsByName, error)

ActionSpecs gets the ActionSpec map for the Unit's charm.

func (*Unit) Actions

func (u *Unit) Actions() ([]Action, error)

Actions returns a list of actions pending or completed for this unit.

func (*Unit) Agent

func (u *Unit) Agent() *UnitAgent

Agent Returns an agent by its unit's name.

func (*Unit) AgentHistory

func (u *Unit) AgentHistory() status.StatusHistoryGetter

AgentHistory returns an StatusHistoryGetter which can be used to query the status history of the unit's agent.

func (*Unit) AgentStatus

func (u *Unit) AgentStatus() (status.StatusInfo, error)

AgentStatus calls Status for this unit's agent, this call is equivalent to the former call to Status when Agent and Unit were not separate entities.

func (*Unit) AgentTools

func (u *Unit) AgentTools() (*tools.Tools, error)

AgentTools returns the tools that the agent is currently running. It an error that satisfies errors.IsNotFound if the tools have not yet been set.

func (*Unit) AllAddresses

func (u *Unit) AllAddresses() (addrs network.SpaceAddresses, _ error)

AllAddresses returns the public and private addresses plus the container address of the unit (if known). Only relevant for CAAS models - will return an empty slice for IAAS models.

func (*Unit) Application

func (u *Unit) Application() (*Application, error)

Application returns the application.

func (*Unit) ApplicationName

func (u *Unit) ApplicationName() string

ApplicationName returns the application name.

func (*Unit) AssignToMachine

func (u *Unit) AssignToMachine(
	m *Machine,
) (err error)

AssignToMachine assigns this unit to a given machine.

func (*Unit) AssignToMachineRef

func (u *Unit) AssignToMachineRef(
	m MachineRef,
) (err error)

AssignToMachine assigns this unit to a given machine.

func (*Unit) AssignToNewMachine

func (u *Unit) AssignToNewMachine() (err error)

AssignToNewMachine assigns the unit to a new machine, with constraints determined according to the application and model constraints at the time of unit creation.

func (*Unit) AssignedMachineId

func (u *Unit) AssignedMachineId() (id string, err error)

AssignedMachineId returns the id of the assigned machine.

func (*Unit) Base

func (u *Unit) Base() Base

Base returns the deployed charm's base.

func (*Unit) CancelAction

func (u *Unit) CancelAction(action Action) (Action, error)

CancelAction removes a pending Action from the queue for this ActionReceiver and marks it as cancelled.

func (*Unit) CharmURL

func (u *Unit) CharmURL() *string

CharmURL returns the charm URL this unit is currently using.

func (*Unit) ClearResolved

func (u *Unit) ClearResolved() error

ClearResolved removes any resolved setting on the unit.

func (*Unit) CompletedActions

func (u *Unit) CompletedActions() ([]Action, error)

CompletedActions returns a list of actions that have finished for this unit.

func (*Unit) ConfigSettings

func (u *Unit) ConfigSettings() (charm.Settings, error)

ConfigSettings returns the complete set of application charm config settings available to the unit. Unset values will be replaced with the default value for the associated option, and may thus be nil when no default is specified.

func (*Unit) Constraints

func (u *Unit) Constraints() (*constraints.Value, error)

Constraints returns the unit's deployment constraints.

func (*Unit) ContainerInfo

func (u *Unit) ContainerInfo() (CloudContainer, error)

ContainerInfo returns information about the containing hosting this unit. This is only used for CAAS models.

func (*Unit) ContainerStatus

func (u *Unit) ContainerStatus() (status.StatusInfo, error)

ContainerStatus returns the container status for a unit.

func (*Unit) Destroy

func (u *Unit) Destroy(store objectstore.ObjectStore) error

Destroy, when called on a Alive unit, advances its lifecycle as far as possible; it otherwise has no effect. In most situations, the unit's life is just set to Dying; but if a principal unit that is not assigned to a provisioned machine is Destroyed, it will be removed from state directly. NB This is only called from tests.

func (*Unit) DestroyMaybeRemove

func (u *Unit) DestroyMaybeRemove(store objectstore.ObjectStore) (bool, error)

DestroyMaybeRemove destroys a unit and returns if it was also removed.

func (*Unit) DestroyOperation

func (u *Unit) DestroyOperation(store objectstore.ObjectStore) *DestroyUnitOperation

DestroyOperation returns a model operation that will destroy the unit.

func (*Unit) DestroyWithForce

func (u *Unit) DestroyWithForce(store objectstore.ObjectStore, force bool, maxWait time.Duration) (removed bool, errs []error, err error)

DestroyWithForce does the same thing as Destroy() but ignores errors.

func (*Unit) EnsureDead

func (u *Unit) EnsureDead() (err error)

EnsureDead sets the unit lifecycle to Dead if it is Alive or Dying. It does nothing otherwise. If the unit has subordinates, it will return ErrUnitHasSubordinates; otherwise, if it has storage instances, it will return ErrUnitHasStorageInstances.

func (*Unit) IsPrincipal

func (u *Unit) IsPrincipal() bool

IsPrincipal returns whether the unit is deployed in its own container, and can therefore have subordinate applications deployed alongside it.

func (*Unit) Kind

func (u *Unit) Kind() string

Kind returns a human readable name identifying the unit workload kind.

func (*Unit) Life

func (u *Unit) Life() Life

Life returns whether the unit is Alive, Dying or Dead.

func (*Unit) Name

func (u *Unit) Name() string

Name returns the unit name.

func (*Unit) PasswordValid

func (u *Unit) PasswordValid(password string) bool

PasswordValid returns whether the given password is valid for the given unit.

func (*Unit) PendingActions

func (u *Unit) PendingActions() ([]Action, error)

PendingActions returns a list of actions pending for this unit.

func (*Unit) PrepareActionPayload

func (u *Unit) PrepareActionPayload(name string, payload map[string]interface{}, parallel *bool, executionGroup *string) (map[string]interface{}, bool, string, error)

PrepareActionPayload returns the payload to use in creating an action for this unit. Note that the use of spec.InsertDefaults mutates payload.

func (*Unit) PrincipalName

func (u *Unit) PrincipalName() (string, bool)

PrincipalName returns the name of the unit's principal. If the unit is not a subordinate, false is returned.

func (*Unit) PrivateAddress

func (u *Unit) PrivateAddress() (network.SpaceAddress, error)

PrivateAddress returns the private address of the unit.

func (*Unit) PublicAddress

func (u *Unit) PublicAddress() (network.SpaceAddress, error)

PublicAddress returns the public address of the unit.

func (*Unit) Refresh

func (u *Unit) Refresh() error

Refresh refreshes the contents of the Unit from the underlying state. It an error that satisfies errors.IsNotFound if the unit has been removed.

func (*Unit) RelationsInScope

func (u *Unit) RelationsInScope() ([]*Relation, error)

RelationsInScope returns the relations for which the unit has entered scope and not left it.

func (*Unit) RelationsJoined

func (u *Unit) RelationsJoined() ([]*Relation, error)

RelationsJoined returns the relations for which the unit has entered scope and neither left it nor prepared to leave it

func (*Unit) Remove

func (u *Unit) Remove(store objectstore.ObjectStore) error

Remove removes the unit from state, and may remove its application as well, if the application is Dying and no other references to it exist. It will fail if the unit is not Dead.

func (*Unit) RemoveOperation

func (u *Unit) RemoveOperation(store objectstore.ObjectStore, force bool) *RemoveUnitOperation

RemoveOperation returns a model operation that will remove the unit.

func (*Unit) RemoveWithForce

func (u *Unit) RemoveWithForce(store objectstore.ObjectStore, force bool, maxWait time.Duration) ([]error, error)

RemoveWithForce removes the unit from state similar to the unit.Remove() but it ignores errors. In addition, this function also returns all non-fatal operational errors encountered.

func (*Unit) Resolve

func (u *Unit) Resolve(retryHooks bool) error

Resolve marks the unit as having had any previous state transition problems resolved, and informs the unit that it may attempt to reestablish normal workflow. The retryHooks parameter informs whether to attempt to reexecute previous failed hooks or to continue as if they had succeeded before.

func (*Unit) Resolved

func (u *Unit) Resolved() ResolvedMode

Resolved returns the resolved mode for the unit.

func (*Unit) RunningActions

func (u *Unit) RunningActions() ([]Action, error)

RunningActions returns a list of actions running on this unit.

func (*Unit) SetAgentStatus

func (u *Unit) SetAgentStatus(agentStatus status.StatusInfo) error

SetAgentStatus calls SetStatus for this unit's agent, this call is equivalent to the former call to SetStatus when Agent and Unit were not separate entities.

func (*Unit) SetAgentVersion

func (u *Unit) SetAgentVersion(v version.Binary) (err error)

SetAgentVersion sets the version of juju that the agent is currently running.

func (*Unit) SetCharmURL

func (u *Unit) SetCharmURL(curl string) error

SetCharmURL marks the unit as currently using the supplied charm URL. No checks are performed on the supplied URL, and it is assumed to be properly stored in dqlite.

func (*Unit) SetPassword

func (u *Unit) SetPassword(password string) error

SetPassword sets the password for the machine's agent.

func (*Unit) SetResolved

func (u *Unit) SetResolved(mode ResolvedMode) (err error)

SetResolved marks the unit as having had any previous state transition problems resolved, and informs the unit that it may attempt to reestablish normal workflow. The resolved mode parameter informs whether to attempt to reexecute previous failed hooks or to continue as if they had succeeded before.

func (*Unit) SetState

func (u *Unit) SetState(unitState *UnitState, limits UnitStateSizeLimits) error

SetState replaces the currently stored state for a unit with the contents of the provided UnitState.

Use this for testing, otherwise use SetStateOperation.

func (*Unit) SetStateOperation

func (u *Unit) SetStateOperation(unitState *UnitState, limits UnitStateSizeLimits) ModelOperation

SetStateOperation returns a ModelOperation for replacing the currently stored state for a unit with the contents of the provided UnitState.

func (*Unit) SetStatus

func (u *Unit) SetStatus(unitStatus status.StatusInfo) error

SetStatus sets the status of the unit agent. The optional values allow to pass additional helpful status data. This method relies on globalKey instead of globalAgentKey since it is part of the effort to separate Unit from UnitAgent. Now the SetStatus for UnitAgent is in the UnitAgent struct.

func (*Unit) SetWorkloadVersion

func (u *Unit) SetWorkloadVersion(version string) error

SetWorkloadVersion sets the version of the workload that the unit is currently running.

func (*Unit) ShouldBeAssigned

func (u *Unit) ShouldBeAssigned() bool

ShouldBeAssigned returns whether the unit should be assigned to a machine. IAAS models require units to be assigned.

func (*Unit) State

func (u *Unit) State() (*UnitState, error)

State returns the persisted state for a unit.

func (*Unit) Status

func (u *Unit) Status() (status.StatusInfo, error)

Status returns the status of the unit. This method relies on globalKey instead of globalAgentKey since it is part of the effort to separate Unit from UnitAgent. Now the Status for UnitAgent is in the UnitAgent struct.

func (*Unit) StatusHistory

func (u *Unit) StatusHistory(filter status.StatusHistoryFilter) ([]status.StatusInfo, error)

StatusHistory returns a slice of at most <size> StatusInfo items or items as old as <date> or items newer than now - <delta> time representing past statuses for this unit.

func (*Unit) StorageConstraints

func (u *Unit) StorageConstraints() (map[string]StorageConstraints, error)

StorageConstraints returns the unit's storage constraints.

func (*Unit) String

func (u *Unit) String() string

String returns the unit as string.

func (*Unit) SubordinateNames

func (u *Unit) SubordinateNames() []string

SubordinateNames returns the names of any subordinate units.

func (*Unit) Tag

func (u *Unit) Tag() names.Tag

Tag returns a name identifying the unit. The returned name will be different from other Tag values returned by any other entities from the same state.

func (*Unit) UnassignFromMachine

func (u *Unit) UnassignFromMachine() (err error)

UnassignFromMachine removes the assignment between this unit and the machine it's assigned to.

func (*Unit) UnitTag

func (u *Unit) UnitTag() names.UnitTag

UnitTag returns a names.UnitTag representing this Unit, unless the unit Name is invalid, in which case it will panic

func (*Unit) UpdateOperation

func (u *Unit) UpdateOperation(props UnitUpdateProperties) *UpdateUnitOperation

UpdateOperation returns a model operation that will update a unit.

func (*Unit) Watch

func (u *Unit) Watch() NotifyWatcher

Watch returns a watcher for observing changes to a unit.

func (*Unit) WatchActionNotifications

func (u *Unit) WatchActionNotifications() StringsWatcher

WatchActionNotifications starts and returns a StringsWatcher that notifies when actions with Id prefixes matching this Unit are added

func (*Unit) WatchApplicationConfigSettings

func (u *Unit) WatchApplicationConfigSettings() (NotifyWatcher, error)

WatchApplicationConfigSettings is the same as WatchConfigSettings but notifies on changes to application configuration not charm configuration.

func (*Unit) WatchApplicationConfigSettingsHash

func (u *Unit) WatchApplicationConfigSettingsHash() (StringsWatcher, error)

WatchApplicationConfigSettingsHash is the same as WatchConfigSettingsHash but watches the application's config rather than charm configuration. Yields a hash of the application config with each change.

func (*Unit) WatchConfigSettingsHash

func (u *Unit) WatchConfigSettingsHash() (StringsWatcher, error)

WatchConfigSettingsHash returns a watcher that yields a hash of the unit's charm config settings whenever they are changed. The returned watcher will be valid only while the application's charm URL is not changed.

func (*Unit) WatchContainerAddresses

func (u *Unit) WatchContainerAddresses() NotifyWatcher

WatchContainerAddresses returns a new NotifyWatcher watching the unit's pod address(es).

func (*Unit) WatchLXDProfileUpgradeNotifications

func (u *Unit) WatchLXDProfileUpgradeNotifications() (StringsWatcher, error)

WatchLXDProfileUpgradeNotifications returns a watcher that observes the status of a lxd profile upgrade by monitoring changes on the unit machine's lxd profile upgrade completed field that is specific to itself.

func (*Unit) WatchMachineAndEndpointAddressesHash

func (u *Unit) WatchMachineAndEndpointAddressesHash() (StringsWatcher, error)

WatchMachineAndEndpointAddressesHash returns a StringsWatcher that reports changes to the hash value of the address assignments to the unit's endpoints. The hash is recalculated when any of the following events occurs: - the machine addresses for the unit change. - the endpoint bindings for the unit's application change.

func (*Unit) WatchPendingActionNotifications

func (u *Unit) WatchPendingActionNotifications() StringsWatcher

WatchPendingActionNotifications is part of the ActionReceiver interface.

func (*Unit) WatchSubordinateUnits

func (u *Unit) WatchSubordinateUnits() StringsWatcher

WatchSubordinateUnits returns a StringsWatcher tracking the unit's subordinate units.

func (*Unit) WorkloadVersion

func (u *Unit) WorkloadVersion() (string, error)

WorkloadVersion returns the version of the running workload set by the charm (eg, the version of postgresql that is running, as opposed to the version of the postgresql charm).

func (*Unit) WorkloadVersionHistory

func (u *Unit) WorkloadVersionHistory() *HistoryGetter

WorkloadVersionHistory returns a HistoryGetter which enables the caller to request past workload version changes.

type UnitAgent

type UnitAgent struct {
	status.StatusHistoryGetter
	// contains filtered or unexported fields
}

UnitAgent represents the state of an application's unit agent.

func (*UnitAgent) Kind

func (u *UnitAgent) Kind() string

Kind returns a human readable name identifying the unit agent kind.

func (*UnitAgent) SetStatus

func (u *UnitAgent) SetStatus(unitAgentStatus status.StatusInfo) (err error)

SetStatus sets the status of the unit agent. The optional values allow to pass additional helpful status data.

func (*UnitAgent) Status

func (u *UnitAgent) Status() (status.StatusInfo, error)

Status returns the status of the unit agent.

func (*UnitAgent) StatusHistory

func (u *UnitAgent) StatusHistory(filter status.StatusHistoryFilter) ([]status.StatusInfo, error)

StatusHistory returns a slice of at most filter.Size StatusInfo items or items as old as filter.Date or items newer than now - filter.Delta time representing past statuses for this agent.

func (*UnitAgent) String

func (u *UnitAgent) String() string

String returns the unit agent as string.

func (*UnitAgent) Tag

func (u *UnitAgent) Tag() names.Tag

Tag returns a names.Tag identifying this agent's unit.

type UnitAssignment

type UnitAssignment struct {
	// Unit is the ID of the unit to be assigned.
	Unit string

	// Scope is the placement scope to apply to the unit.
	Scope string

	// Directive is the placement directive to apply to the unit.
	Directive string
}

UnitAssignment represents a staged unit assignment.

type UnitAssignmentResult

type UnitAssignmentResult struct {
	Unit  string
	Error error
}

UnitAssignmentResult is the result of running a staged unit assignment.

type UnitPayloads

type UnitPayloads struct {
	// contains filtered or unexported fields
}

UnitPayloads lets you CRUD payloads for a single unit.

func (UnitPayloads) List

func (up UnitPayloads) List(names ...string) ([]payloads.Result, error)

List has two different modes of operation, because that's never a bad idea. If you pass no args, it returns information about all payloads tracked by the unit; if you pass names, it returns a slice of results corresponding to names, in which any names not tracked have both the NotFound field *and* an Error set.

func (UnitPayloads) LookUp

func (UnitPayloads) LookUp(name, rawID string) (string, error)

LookUp returns its first argument and no error.

func (UnitPayloads) SetStatus

func (up UnitPayloads) SetStatus(name, status string) error

SetStatus updates the raw status for the identified payload to the provided value. If the payload is missing then payloads.ErrNotFound is returned.

func (UnitPayloads) Track

func (up UnitPayloads) Track(pl payloads.Payload) error

Track inserts the provided payload info in state. If the payload is already in the DB then it is replaced.

func (UnitPayloads) Untrack

func (up UnitPayloads) Untrack(name string) error

Untrack removes the identified payload from state. It does not trigger the actual destruction of the payload. If the payload is missing then this is a noop.

type UnitState

type UnitState struct {
	// contains filtered or unexported fields
}

UnitState contains the various state saved for this unit, including from the charm itself and the uniter.

func NewUnitState

func NewUnitState() *UnitState

NewUnitState returns a new UnitState struct.

func (*UnitState) CharmState

func (u *UnitState) CharmState() (map[string]string, bool)

CharmState returns the unit's stored charm state and bool indicating whether the data was set.

func (*UnitState) Modified

func (u *UnitState) Modified() bool

Modified returns true if any of the struct have been set.

func (*UnitState) RelationState

func (u *UnitState) RelationState() (map[int]string, bool)

RelationState returns the relation state and bool indicating whether the data was set.

func (*UnitState) SecretState

func (u *UnitState) SecretState() (string, bool)

SecretState returns the secret state and bool indicating whether the data was set.

func (*UnitState) SetCharmState

func (u *UnitState) SetCharmState(state map[string]string)

SetCharmState sets the charm state value.

func (*UnitState) SetRelationState

func (u *UnitState) SetRelationState(state map[int]string)

SetRelationState sets the relation state value.

func (*UnitState) SetSecretState

func (u *UnitState) SetSecretState(state string)

SetSecretState sets the secret state value.

func (*UnitState) SetStorageState

func (u *UnitState) SetStorageState(state string)

SetStorageState sets the storage state value.

func (*UnitState) SetUniterState

func (u *UnitState) SetUniterState(state string)

SetUniterState sets the uniter state value.

func (*UnitState) StorageState

func (u *UnitState) StorageState() (string, bool)

StorageState returns the storage state and bool indicating whether the data was set.

func (*UnitState) UniterState

func (u *UnitState) UniterState() (string, bool)

UniterState returns the uniter state and bool indicating whether the data was set.

type UnitStateSizeLimits

type UnitStateSizeLimits struct {
	// The maximum allowed size for the charm state. It can be set to zero
	// to bypass the charm state quota checks.
	// quota checks will be
	MaxCharmStateSize int

	// The maximum allowed size for the uniter's state. It can be set to
	// zero to bypass the uniter state quota checks.
	MaxAgentStateSize int
}

UnitStateSizeLimits defines the quota limits that are enforced when updating the state (charm and uniter) of a unit.

type UnitUpdateProperties

type UnitUpdateProperties struct {
	ProviderId           *string
	Address              *string
	Ports                *[]string
	UnitName             *string
	AgentStatus          *status.StatusInfo
	UnitStatus           *status.StatusInfo
	CloudContainerStatus *status.StatusInfo
}

UnitUpdateProperties holds information used to update the state model for the unit.

type UnitsWatcher

type UnitsWatcher interface {
	Entity
	WatchUnits() StringsWatcher
}

UnitsWatcher defines the methods needed to retrieve an entity (a machine or an application) and watch its units.

type UpdateMachineOperation

type UpdateMachineOperation struct {
	AgentVersion      *version.Binary
	Constraints       *constraints.Value
	MachineAddresses  *[]network.SpaceAddress
	ProviderAddresses *[]network.SpaceAddress
	PasswordHash      *string
	// contains filtered or unexported fields
}

UpdateMachineOperation is a model operation for updating a machine.

func (*UpdateMachineOperation) Build

func (op *UpdateMachineOperation) Build(attempt int) ([]txn.Op, error)

Build is part of the ModelOperation interface.

func (*UpdateMachineOperation) Done

func (op *UpdateMachineOperation) Done(err error) error

Done is part of the ModelOperation interface.

type UpdateUnitOperation

type UpdateUnitOperation struct {
	// contains filtered or unexported fields
}

UpdateUnitOperation is a model operation for updating a unit.

func (*UpdateUnitOperation) Build

func (op *UpdateUnitOperation) Build(_ int) ([]txn.Op, error)

Build is part of the ModelOperation interface.

func (*UpdateUnitOperation) Done

func (op *UpdateUnitOperation) Done(err error) error

Done is part of the ModelOperation interface.

type UpdateUnitsOperation

type UpdateUnitsOperation struct {
	Adds    []*AddUnitOperation
	Deletes []*DestroyUnitOperation
	Updates []*UpdateUnitOperation
}

UpdateUnitsOperation is a model operation for updating some units of an application.

func (*UpdateUnitsOperation) Build

func (op *UpdateUnitsOperation) Build(attempt int) ([]txn.Op, error)

Build is part of the ModelOperation interface.

func (*UpdateUnitsOperation) Done

func (op *UpdateUnitsOperation) Done(err error) error

Done is part of the ModelOperation interface.

type Upgrader

type Upgrader interface {
	IsUpgrading() (bool, error)
}

Upgrader is an interface that can be used to check if an upgrade is in progress.

type UpsertCAASUnitParams

type UpsertCAASUnitParams struct {
	AddUnitParams

	// OrderedScale is always true. It represents a mapping of OrderedId to Unit ID.
	OrderedScale bool
	// OrderedId is the stable ordinal index of the "pod".
	OrderedId int

	// ObservedAttachedVolumeIDs is the filesystem attachments observed to be attached by the infrastructure,
	// used to map existing attachments.
	ObservedAttachedVolumeIDs []string
}

UpsertCAASUnitParams is passed to UpsertCAASUnit to describe how to create or how to find and update an existing unit for sidecar CAAS application.

type Volume

type Volume interface {
	GlobalEntity
	Lifer
	status.StatusGetter
	status.StatusSetter

	// VolumeTag returns the tag for the volume.
	VolumeTag() names.VolumeTag

	// StorageInstance returns the tag of the storage instance that this
	// volume is assigned to, if any. If the volume is not assigned to
	// a storage instance, an error satisfying errors.IsNotAssigned will
	// be returned.
	//
	// A volume can be assigned to at most one storage instance, and a
	// storage instance can have at most one associated volume.
	StorageInstance() (names.StorageTag, error)

	// Info returns the volume's VolumeInfo, or a NotProvisioned
	// error if the volume has not yet been provisioned.
	Info() (VolumeInfo, error)

	// Params returns the parameters for provisioning the volume,
	// if it has not already been provisioned. Params returns true if the
	// returned parameters are usable for provisioning, otherwise false.
	Params() (VolumeParams, bool)

	// Detachable reports whether or not the volume is detachable.
	Detachable() bool

	// Releasing reports whether or not the volume is to be released
	// from the model when it is Dying/Dead.
	Releasing() bool
}

Volume describes a volume (disk, logical volume, etc.) in the model.

type VolumeAttachment

type VolumeAttachment interface {
	Lifer

	// Volume returns the tag of the related Volume.
	Volume() names.VolumeTag

	// Host returns the tag of the related Host.
	Host() names.Tag

	// Info returns the volume attachment's VolumeAttachmentInfo, or a
	// NotProvisioned error if the attachment has not yet been made.
	//
	// TODO(axw) use a different error, rather than NotProvisioned
	// (say, NotAttached or NotAssociated).
	Info() (VolumeAttachmentInfo, error)

	// Params returns the parameters for creating the volume attachment,
	// if it has not already been made. Params returns true if the returned
	// parameters are usable for creating an attachment, otherwise false.
	Params() (VolumeAttachmentParams, bool)
}

VolumeAttachment describes an attachment of a volume to a machine.

type VolumeAttachmentInfo

type VolumeAttachmentInfo struct {
	DeviceName string `bson:"devicename,omitempty"`
	DeviceLink string `bson:"devicelink,omitempty"`
	BusAddress string `bson:"busaddress,omitempty"`
	ReadOnly   bool   `bson:"read-only"`
	// PlanInfo holds information used by the machine storage
	// provisioner to execute any needed steps in order to make
	// make sure the actual storage device becomes available.
	// For example, any storage backend that requires userspace
	// setup, like iSCSI would fall into this category.
	PlanInfo *VolumeAttachmentPlanInfo `bson:"plan-info,omitempty"`
}

VolumeAttachmentInfo describes information about a volume attachment.

type VolumeAttachmentParams

type VolumeAttachmentParams struct {
	ReadOnly bool `bson:"read-only"`
}

VolumeAttachmentParams records parameters for attaching a volume to a machine.

type VolumeAttachmentPlan

type VolumeAttachmentPlan interface {
	Lifer

	// Volume returns the tag of the related Volume.
	Volume() names.VolumeTag

	// Machine returns the tag of the related Machine.
	Machine() names.MachineTag

	// PlanInfo returns the plan info for a volume
	PlanInfo() (VolumeAttachmentPlanInfo, error)

	// BlockDeviceInfo returns the block device info associated with
	// this plan, as seen by the machine agent it is plugged into
	BlockDeviceInfo() (BlockDeviceInfo, error)
}

VolumeAttachmentPlan describes the plan information for a particular volume Machine agents use this information to do any extra initialization that is needed This is separate from VolumeAttachment to allow separation of concerns between the controller's idea of detaching a volume and the machine agent's idea. This way, we can have the controller ask the environment for a volume, attach it to the instance, which in some cases simply means granting the instance access to connect to it, and then explicitly let the machine agent know that something has been attached to it.

type VolumeAttachmentPlanInfo

type VolumeAttachmentPlanInfo struct {
	// DeviceType is the type of storage type this plan info
	// describes. For directly attached local storage, this
	// can be left to its default value, or set as storage.DeviceTypeLocal
	// This value will be used by the machine storage provisioner
	// to load the appropriate storage plan, and execute any Attach/Detach
	// operations.
	DeviceType storage.DeviceType `bson:"device-type,omitempty"`
	// DeviceAttributes holds a map of key/value pairs that may be used
	// by the storage plan backend to initialize the storage device
	// For example, if dealing with iSCSI, this can hold the IP address
	// of the remote server, the LUN, access credentials, etc.
	DeviceAttributes map[string]string `bson:"device-attributes,omitempty"`
}

type VolumeInfo

type VolumeInfo struct {
	HardwareId string `bson:"hardwareid,omitempty"`
	WWN        string `bson:"wwn,omitempty"`
	Size       uint64 `bson:"size"`
	Pool       string `bson:"pool"`
	VolumeId   string `bson:"volumeid"`
	Persistent bool   `bson:"persistent"`
}

VolumeInfo describes information about a volume.

type VolumeParams

type VolumeParams struct {
	Pool string `bson:"pool"`
	Size uint64 `bson:"size"`
	// contains filtered or unexported fields
}

VolumeParams records parameters for provisioning a new volume.

type WatchParams

type WatchParams struct {
	// IncludeOffers controls whether application offers should be watched.
	IncludeOffers bool
}

WatchParams defines config to control which entites are included when watching a model.

type Watcher

type Watcher interface {
	// Kill asks the watcher to stop without waiting for it do so.
	Kill()
	// Wait waits for the watcher to die and returns any
	// error encountered when it was running.
	Wait() error
	// Stop kills the watcher, then waits for it to die.
	Stop() error
	// Err returns any error encountered while the watcher
	// has been running.
	Err() error
}

Watcher is implemented by all watchers; the actual changes channel is returned by a watcher-specific Changes method.

Directories

Path Synopsis
Package migrations aims to create an intermediate state between state and the description package.
Package migrations aims to create an intermediate state between state and the description package.
Package stateenvirons provides types and functions that interface the state and environs packages.
Package stateenvirons provides types and functions that interface the state and environs packages.
Package watcher provides an interface for observing changes to arbitrary MongoDB documents that are maintained via the mgo/txn transaction package.
Package watcher provides an interface for observing changes to arbitrary MongoDB documents that are maintained via the mgo/txn transaction package.

Jump to

Keyboard shortcuts

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