context

package
v0.0.0-...-e653fdf Latest Latest
Warning

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

Go to latest
Published: Apr 19, 2024 License: AGPL-3.0 Imports: 40 Imported by: 33

Documentation

Overview

Package context contains the ContextFactory and Context definitions. Context implements runner.Context and is used together with uniter.Runner to run hooks, commands and actions.

Index

Constants

This section is empty.

Variables

View Source
var ContextAllowedEnvVars = []string{

	"KUBERNETES_PORT",
	"KUBERNETES_PORT_443_TCP",
	"KUBERNETES_PORT_443_TCP_ADDR",
	"KUBERNETES_PORT_443_TCP_PORT",
	"KUBERNETES_PORT_443_TCP_PROTO",
	"KUBERNETES_SERVICE",
	"KUBERNETES_SERVICE_HOST",
	"KUBERNETES_SERVICE_PORT",
	"KUBERNETES_SERVICE_PORT_HTTPS",
}

ContextAllowedEnvVars defines a list of allowed env vars to include from the given context

View Source
var ErrIsNotLeader = errors.Errorf("this unit is not the leader")
View Source
var ErrReboot = errors.New("reboot after hook")
View Source
var ErrRequeueAndReboot = errors.New("reboot now")

Functions

func ContextDependentEnvVars

func ContextDependentEnvVars(env Environmenter) []string

ContextDependentEnvVars returns the context aware enviormnent variables needed for charms depending on contexts they may be operating in. For example returning defined Kubernetes env variables when they're defined.

func OSDependentEnvVars

func OSDependentEnvVars(paths Paths, env Environmenter) []string

OSDependentEnvVars returns the OS-dependent environment variables that should be set for a hook context.

Types

type ActionData

type ActionData struct {
	Name           string
	Tag            names.ActionTag
	Params         map[string]interface{}
	Failed         bool
	ResultsMessage string
	ResultsMap     map[string]interface{}
	Cancel         <-chan struct{}
}

ActionData contains the tag, parameters, and results of an Action.

func NewActionData

func NewActionData(name string, tag *names.ActionTag, params map[string]interface{}, cancel <-chan struct{}) *ActionData

NewActionData builds a suitable ActionData struct with no nil members. this should only be called in the event that an Action hook is being requested.

type Clock

type Clock interface {
	// After waits for the duration to elapse and then sends the
	// current time on the returned channel.
	After(time.Duration) <-chan time.Time
}

Clock defines the methods of the full clock.Clock that are needed here.

type CommandInfo

type CommandInfo struct {
	// RelationId is the relation context to execute the commands in.
	RelationId int
	// RemoteUnitName is the remote unit for the relation context.
	RemoteUnitName string
	// TODO(jam): 2019-10-23 Add RemoteApplicationName
	// ForceRemoteUnit skips unit inference and existence validation.
	ForceRemoteUnit bool
}

CommandInfo specifies the information necessary to run a command.

type Context

type Context interface {
	jujuc.Context
	Id() string
	HookVars(
		paths Paths,
		remote bool,
		env Environmenter) ([]string, error)
	ActionData() (*ActionData, error)
	SetProcess(process HookProcess)
	HasExecutionSetUnitStatus() bool
	ResetExecutionSetUnitStatus()
	ModelType() model.ModelType

	Prepare() error
	Flush(badge string, failure error) error

	GetLogger(module string) loggo.Logger
}

Context exposes hooks.Context, and additional methods needed by Runner.

type ContextFactory

type ContextFactory interface {
	// CommandContext creates a new context for running a juju command.
	CommandContext(commandInfo CommandInfo) (*HookContext, error)

	// HookContext creates a new context for running a juju hook.
	HookContext(hookInfo hook.Info) (*HookContext, error)

	// ActionContext creates a new context for running a juju action.
	ActionContext(actionData *ActionData) (*HookContext, error)
}

ContextFactory represents a long-lived object that can create execution contexts relevant to a specific unit.

func NewContextFactory

func NewContextFactory(config FactoryConfig) (ContextFactory, error)

NewContextFactory returns a ContextFactory capable of creating execution contexts backed by the supplied unit's supplied API connection.

type ContextRelation

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

ContextRelation is the implementation of hooks.ContextRelation.

func NewContextRelation

func NewContextRelation(ru RelationUnit, cache *RelationCache) *ContextRelation

NewContextRelation creates a new context for the given relation unit. The unit-name keys of members supplies the initial membership.

func (*ContextRelation) ApplicationSettings

func (ctx *ContextRelation) ApplicationSettings() (jujuc.Settings, error)

func (*ContextRelation) FakeId

func (ctx *ContextRelation) FakeId() string

func (*ContextRelation) FinalSettings

func (ctx *ContextRelation) FinalSettings() (unitSettings, appSettings params.Settings)

FinalSettings returns the changes made to the relation settings (unit and application)

func (*ContextRelation) Id

func (ctx *ContextRelation) Id() int

func (*ContextRelation) Life

func (ctx *ContextRelation) Life() life.Value

Life returns the relation's current life state.

func (*ContextRelation) Name

func (ctx *ContextRelation) Name() string

func (*ContextRelation) ReadApplicationSettings

func (ctx *ContextRelation) ReadApplicationSettings(app string) (settings params.Settings, err error)

func (*ContextRelation) ReadSettings

func (ctx *ContextRelation) ReadSettings(unit string) (settings params.Settings, err error)

func (*ContextRelation) RelationTag

func (ctx *ContextRelation) RelationTag() names.RelationTag

func (*ContextRelation) RemoteApplicationName

func (ctx *ContextRelation) RemoteApplicationName() string

RemoteApplicationName returns the application on the other end of this relation from the perspective of this unit.

func (*ContextRelation) SetStatus

func (ctx *ContextRelation) SetStatus(status relation.Status) error

SetStatus sets the relation's status.

func (*ContextRelation) Settings

func (ctx *ContextRelation) Settings() (jujuc.Settings, error)

func (*ContextRelation) Suspended

func (ctx *ContextRelation) Suspended() bool

Suspended returns true if the relation is suspended.

func (*ContextRelation) UnitNames

func (ctx *ContextRelation) UnitNames() []string

type EnvironmentWrapper

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

func NewHostEnvironmenter

func NewHostEnvironmenter() *EnvironmentWrapper

NewHostEnvironmenter constructs an EnvironmentWrapper target at the current process host

func NewRemoteEnvironmenter

func NewRemoteEnvironmenter(
	environFn func() []string,
	getenvFn func(string) string,
	lookupEnvFn func(string) (string, bool),
) *EnvironmentWrapper

NewRemoveEnvironmenter constructs an EnviornmentWrapper with targets set to that of the functions provided.

func (*EnvironmentWrapper) Environ

func (e *EnvironmentWrapper) Environ() []string

Environ implements Environmenter Environ

func (*EnvironmentWrapper) Getenv

func (e *EnvironmentWrapper) Getenv(key string) string

Getenv implements Environmenter Getenv

func (*EnvironmentWrapper) LookupEnv

func (e *EnvironmentWrapper) LookupEnv(key string) (string, bool)

LookupEnv implements Environmenter LookupEnv

type Environmenter

type Environmenter interface {
	// Environ returns a copy of strings representing the environment, in the
	// form "key=value"
	Environ() []string

	// Getenv retrieves the value of the environment variable named by the key.
	// It returns the value, which will be empty if the variable is not present.
	Getenv(string) string

	// LookupEnv retrieves the value of the environment variable named by the
	// key. If the variable is present in the environment the value (which may
	// be empty) is returned and the boolean is true. Otherwise the returned
	// value will be empty and the boolean will be false.
	LookupEnv(string) (string, bool)
}

Environmenter represent the os environ interface for fetching host level environment variables.

type FactoryConfig

type FactoryConfig struct {
	State                *uniter.State
	SecretsClient        SecretsAccessor
	SecretsBackendGetter SecretsBackendGetter
	Unit                 *uniter.Unit
	Resources            *uniter.ResourcesFacadeClient
	Payloads             *uniter.PayloadFacadeClient
	Tracker              leadership.Tracker
	GetRelationInfos     RelationsFunc
	Paths                Paths
	Clock                Clock
	Logger               loggo.Logger
}

FactoryConfig contains configuration values for the context factory.

type HookContext

type HookContext struct {
	*resources.ResourcesHookContext
	*payloads.PayloadsHookContext

	// LeadershipContext supplies several hooks.Context methods.
	LeadershipContext
	// contains filtered or unexported fields
}

HookContext is the implementation of runner.Context.

func (*HookContext) ActionData

func (ctx *HookContext) ActionData() (*ActionData, error)

ActionData returns the context's internal action data. It's meant to be transitory; it exists to allow uniter and runner code to keep working as it did; it should be considered deprecated, and not used by new clients. Implements runner.Context.

func (*HookContext) ActionParams

func (ctx *HookContext) ActionParams() (map[string]interface{}, error)

ActionParams simply returns the arguments to the Action. Implements jujuc.ActionHookContext.actionHookContext, part of runner.Context.

func (*HookContext) AddMetric

func (ctx *HookContext) AddMetric(key, value string, created time.Time) error

AddMetric adds metrics to the hook context. Implements jujuc.HookContext.ContextMetrics, part of runner.Context.

func (*HookContext) AddMetricLabels

func (ctx *HookContext) AddMetricLabels(key, value string, created time.Time, labels map[string]string) error

AddMetricLabels adds metrics with labels to the hook context. Implements jujuc.HookContext.ContextMetrics, part of runner.Context.

func (*HookContext) AddUnitStorage

func (ctx *HookContext) AddUnitStorage(cons map[string]params.StorageConstraints) error

AddUnitStorage saves storage constraints in the context. Implements jujuc.HookContext.ContextStorage, part of runner.Context.

func (*HookContext) ApplicationStatus

func (ctx *HookContext) ApplicationStatus() (jujuc.ApplicationStatusInfo, error)

ApplicationStatus returns the status for the application and all the units on the application to which this context unit belongs, only if this unit is the leader. Implements jujuc.HookContext.ContextStatus, part of runner.Context.

func (*HookContext) AvailabilityZone

func (ctx *HookContext) AvailabilityZone() (string, error)

AvailabilityZone returns the executing unit's availability zone or an error if it was not found (or is not available). Implements jujuc.HookContext.ContextInstance, part of runner.Context.

func (*HookContext) ClosePortRange

func (ctx *HookContext) ClosePortRange(endpointName string, portRange network.PortRange) error

ClosePortRange ensures the supplied port range is closed even when the executing unit's application is exposed (unless it is opened separately by a co- located unit). Implements jujuc.HookContext.ContextNetworking, part of runner.Context.

func (*HookContext) CloudSpec

func (ctx *HookContext) CloudSpec() (*params.CloudSpec, error)

CloudSpec return the cloud specification for the running unit's model. Implements jujuc.HookContext.ContextUnit, part of runner.Context.

func (*HookContext) ConfigSettings

func (ctx *HookContext) ConfigSettings() (charm.Settings, error)

ConfigSettings returns the current application configuration of the executing unit. Implements jujuc.HookContext.ContextUnit, part of runner.Context.

func (*HookContext) CreateSecret

func (ctx *HookContext) CreateSecret(args *jujuc.SecretCreateArgs) (*coresecrets.URI, error)

CreateSecret creates a secret with the specified data.

func (*HookContext) DeleteCharmStateValue

func (ctx *HookContext) DeleteCharmStateValue(key string) error

DeleteCharmStateValue deletes the key/value pair for the given key from the cache. Implements jujuc.HookContext.unitCharmStateContext, part of runner.Context.

func (*HookContext) Flush

func (ctx *HookContext) Flush(process string, ctxErr error) error

Flush implements the runner.Context interface.

func (*HookContext) GetCharmState

func (ctx *HookContext) GetCharmState() (map[string]string, error)

GetCharmState returns a copy of the cached charm state. Implements jujuc.HookContext.unitCharmStateContext, part of runner.Context.

func (*HookContext) GetCharmStateValue

func (ctx *HookContext) GetCharmStateValue(key string) (string, error)

GetCharmStateValue returns the value of the given key. Implements jujuc.HookContext.unitCharmStateContext, part of runner.Context.

func (*HookContext) GetLogger

func (ctx *HookContext) GetLogger(module string) loggo.Logger

GetLogger returns a Logger for the specified module.

func (*HookContext) GetPodSpec

func (ctx *HookContext) GetPodSpec() (string, error)

GetPodSpec returns the k8s spec for the unit's application. Implements jujuc.HookContext.ContextUnit, part of runner.Context.

func (*HookContext) GetProcess

func (ctx *HookContext) GetProcess() HookProcess

func (*HookContext) GetRawK8sSpec

func (ctx *HookContext) GetRawK8sSpec() (string, error)

GetRawK8sSpec returns the raw k8s spec for the unit's application. Implements jujuc.HookContext.ContextUnit, part of runner.Context.

func (*HookContext) GetRebootPriority

func (ctx *HookContext) GetRebootPriority() jujuc.RebootPriority

func (*HookContext) GetSecret

func (ctx *HookContext) GetSecret(uri *coresecrets.URI, label string, refresh, peek bool) (coresecrets.SecretValue, error)

GetSecret returns the value of the specified secret.

func (*HookContext) GoalState

func (ctx *HookContext) GoalState() (*application.GoalState, error)

GoalState returns the goal state for the current unit. Implements jujuc.HookContext.ContextUnit, part of runner.Context.

func (*HookContext) GrantSecret

func (ctx *HookContext) GrantSecret(uri *coresecrets.URI, arg *jujuc.SecretGrantRevokeArgs) error

GrantSecret grants access to a specified secret.

func (*HookContext) HasExecutionSetUnitStatus

func (ctx *HookContext) HasExecutionSetUnitStatus() bool

HasExecutionSetUnitStatus implements runner.Context.

func (*HookContext) HookRelation

func (ctx *HookContext) HookRelation() (jujuc.ContextRelation, error)

HookRelation returns the ContextRelation associated with the executing hook if it was found, or an error if it was not found (or is not available). Implements jujuc.RelationHookContext.relationHookContext, part of runner.Context.

func (*HookContext) HookStorage

func (ctx *HookContext) HookStorage() (jujuc.ContextStorageAttachment, error)

HookStorage returns the storage attachment associated the executing hook if it was found, and an error if it was not found or is not available. Implements jujuc.HookContext.ContextStorage, part of runner.Context.

func (*HookContext) HookVars

func (ctx *HookContext) HookVars(
	paths Paths,
	remote bool,
	env Environmenter,
) ([]string, error)

HookVars returns an os.Environ-style list of strings necessary to run a hook such that it can know what environment it's operating in, and can call back into context. Implements runner.Context.

func (*HookContext) Id

func (ctx *HookContext) Id() string

Id returns an integer which uniquely identifies the relation. Implements jujuc.HookContext.ContextRelation, part of runner.Context.

func (*HookContext) LogActionMessage

func (ctx *HookContext) LogActionMessage(message string) error

LogActionMessage logs a progress message for the Action. Implements jujuc.ActionHookContext.actionHookContext, part of runner.Context.

func (*HookContext) ModelType

func (ctx *HookContext) ModelType() model.ModelType

ModelType of the context we are running in. SetProcess implements runner.Context.

func (*HookContext) NetworkInfo

func (ctx *HookContext) NetworkInfo(bindingNames []string, relationId int) (map[string]params.NetworkInfoResult, error)

NetworkInfo returns the network info for the given bindings on the given relation. Implements jujuc.HookContext.ContextNetworking, part of runner.Context.

func (*HookContext) OpenPortRange

func (ctx *HookContext) OpenPortRange(endpointName string, portRange network.PortRange) error

OpenPortRange marks the supplied port range for opening. Implements jujuc.HookContext.ContextNetworking, part of runner.Context.

func (*HookContext) OpenedPortRanges

func (ctx *HookContext) OpenedPortRanges() network.GroupedPortRanges

OpenedPortRanges returns all port ranges currently opened by this unit on its assigned machine grouped by endpoint. Implements jujuc.HookContext.ContextNetworking, part of runner.Context.

func (*HookContext) Prepare

func (ctx *HookContext) Prepare() error

Prepare implements the runner.Context interface.

func (*HookContext) PrivateAddress

func (ctx *HookContext) PrivateAddress() (string, error)

PrivateAddress returns the executing unit's private address or an error if it is not available. Implements jujuc.HookContext.ContextNetworking, part of runner.Context.

func (*HookContext) PublicAddress

func (ctx *HookContext) PublicAddress() (string, error)

PublicAddress fetches the executing unit's public address if it has not yet been retrieved. The cached value is returned, or an error if it is not available.

func (*HookContext) Relation

func (ctx *HookContext) Relation(id int) (jujuc.ContextRelation, error)

Relation returns the relation with the supplied id if it was found, and an error if it was not found or is not available. Implements jujuc.HookContext.ContextRelations, part of runner.Context.

func (*HookContext) RelationIds

func (ctx *HookContext) RelationIds() ([]int, error)

RelationIds returns the ids of all relations the executing unit is currently participating in or an error if they are not available. Implements jujuc.HookContext.ContextRelations, part of runner.Context.

func (*HookContext) RemoteApplicationName

func (ctx *HookContext) RemoteApplicationName() (string, error)

RemoteApplicationName returns the name of the remote application the hook execution is associated with if it was found, and an error if it was not found or is not available. Implements jujuc.RelationHookContext.relationHookContext, part of runner.Context.

func (*HookContext) RemoteUnitName

func (ctx *HookContext) RemoteUnitName() (string, error)

RemoteUnitName returns the name of the remote unit the hook execution is associated with if it was found, and an error if it was not found or is not available. Implements jujuc.RelationHookContext.relationHookContext, part of runner.Context.

func (*HookContext) RemoveSecret

func (ctx *HookContext) RemoveSecret(uri *coresecrets.URI, revision *int) error

RemoveSecret removes a secret with the specified uri.

func (*HookContext) RequestReboot

func (ctx *HookContext) RequestReboot(priority jujuc.RebootPriority) error

RequestReboot will set the reboot flag to true on the machine agent Implements jujuc.HookContext.ContextInstance, part of runner.Context.

func (*HookContext) ResetExecutionSetUnitStatus

func (ctx *HookContext) ResetExecutionSetUnitStatus()

ResetExecutionSetUnitStatus implements runner.Context.

func (*HookContext) RevokeSecret

func (ctx *HookContext) RevokeSecret(uri *coresecrets.URI, args *jujuc.SecretGrantRevokeArgs) error

RevokeSecret revokes access to a specified secret.

func (*HookContext) SecretLabel

func (ctx *HookContext) SecretLabel() string

SecretLabel returns the secret label for secret hooks. This is not yet used by any hook commands - it is exported for tests to use.

func (*HookContext) SecretMetadata

func (ctx *HookContext) SecretMetadata() (map[string]jujuc.SecretMetadata, error)

SecretMetadata gets the secret ids and their labels and latest revisions created by the charm. The result includes any pending updates.

func (*HookContext) SecretRevision

func (ctx *HookContext) SecretRevision() int

SecretRevision returns the secret revision for secret hooks. This is not yet used by any hook commands - it is exported for tests to use.

func (*HookContext) SecretURI

func (ctx *HookContext) SecretURI() (string, error)

SecretURI returns the secret URI for secret hooks. This is not yet used by any hook commands - it is exported for tests to use.

func (*HookContext) SetActionFailed

func (ctx *HookContext) SetActionFailed() error

SetActionFailed sets the fail state of the action. Implements jujuc.ActionHookContext.actionHookContext, part of runner.Context.

func (*HookContext) SetActionMessage

func (ctx *HookContext) SetActionMessage(message string) error

SetActionMessage sets a message for the Action, usually an error message. Implements jujuc.ActionHookContext.actionHookContext, part of runner.Context.

func (*HookContext) SetAgentStatus

func (ctx *HookContext) SetAgentStatus(agentStatus jujuc.StatusInfo) error

SetAgentStatus will set the given status for this unit's agent. Implements jujuc.HookContext.ContextStatus, part of runner.Context.

func (*HookContext) SetApplicationStatus

func (ctx *HookContext) SetApplicationStatus(applicationStatus jujuc.StatusInfo) error

SetApplicationStatus will set the given status to the application to which this unit's belong, only if this unit is the leader. Implements jujuc.HookContext.ContextStatus, part of runner.Context.

func (*HookContext) SetCharmStateValue

func (ctx *HookContext) SetCharmStateValue(key, value string) error

SetCharmStateValue sets the key/value pair provided in the cache. Implements jujuc.HookContext.unitCharmStateContext, part of runner.Context.

func (*HookContext) SetPodSpec

func (ctx *HookContext) SetPodSpec(specYaml string) error

SetPodSpec sets the podspec for the unit's application. Implements jujuc.HookContext.ContextUnit, part of runner.Context.

func (*HookContext) SetProcess

func (ctx *HookContext) SetProcess(process HookProcess)

SetProcess implements runner.Context.

func (*HookContext) SetRawK8sSpec

func (ctx *HookContext) SetRawK8sSpec(specYaml string) error

SetRawK8sSpec sets the raw k8s spec for the unit's application. Implements jujuc.HookContext.ContextUnit, part of runner.Context.

func (*HookContext) SetUnitStatus

func (ctx *HookContext) SetUnitStatus(unitStatus jujuc.StatusInfo) error

SetUnitStatus will set the given status for this unit. Implements jujuc.HookContext.ContextStatus, part of runner.Context.

func (*HookContext) SetUnitWorkloadVersion

func (ctx *HookContext) SetUnitWorkloadVersion(version string) error

SetUnitWorkloadVersion sets the current unit's workload version to the specified value. Implements jujuc.HookContext.ContextVersion, part of runner.Context.

func (*HookContext) Storage

func (ctx *HookContext) Storage(tag names.StorageTag) (jujuc.ContextStorageAttachment, error)

Storage returns the ContextStorageAttachment with the supplied tag if it was found, and an error if it was not found or is not available to the context. Implements jujuc.HookContext.ContextStorage, part of runner.Context.

func (*HookContext) StorageTags

func (ctx *HookContext) StorageTags() ([]names.StorageTag, error)

StorageTags returns a list of tags for storage instances attached to the unit or an error if they are not available. Implements jujuc.HookContext.ContextStorage, part of runner.Context.

func (*HookContext) UnitName

func (ctx *HookContext) UnitName() string

UnitName returns the executing unit's name. UnitName implements jujuc.HookContext.ContextUnit, part of runner.Context.

func (*HookContext) UnitStatus

func (ctx *HookContext) UnitStatus() (*jujuc.StatusInfo, error)

UnitStatus will return the status for the current Unit. Implements jujuc.HookContext.ContextStatus, part of runner.Context.

func (*HookContext) UnitWorkloadVersion

func (ctx *HookContext) UnitWorkloadVersion() (string, error)

UnitWorkloadVersion returns the version of the workload reported by the current unit. Implements jujuc.HookContext.ContextVersion, part of runner.Context.

func (*HookContext) UpdateActionResults

func (ctx *HookContext) UpdateActionResults(keys []string, value interface{}) error

UpdateActionResults inserts new values for use with action-set and action-fail. The results struct will be delivered to the controller upon completion of the Action. It returns an error if not called on an Action-containing HookContext. Implements jujuc.ActionHookContext.actionHookContext, part of runner.Context.

func (*HookContext) UpdateSecret

func (ctx *HookContext) UpdateSecret(uri *coresecrets.URI, args *jujuc.SecretUpdateArgs) error

UpdateSecret creates a secret with the specified data.

func (*HookContext) WorkloadName

func (ctx *HookContext) WorkloadName() (string, error)

WorkloadName returns the name of the container/workload for workload hooks.

type HookProcess

type HookProcess interface {
	Pid() int
	Kill() error
}

HookProcess is an interface representing a process running a hook.

type HookUnit

type HookUnit interface {
	Application() (*uniter.Application, error)
	ApplicationName() string
	ConfigSettings() (charm.Settings, error)
	LogActionMessage(names.ActionTag, string) error
	Name() string
	NetworkInfo(bindings []string, relationId *int) (map[string]params.NetworkInfoResult, error)
	RequestReboot() error
	SetUnitStatus(unitStatus status.Status, info string, data map[string]interface{}) error
	SetAgentStatus(agentStatus status.Status, info string, data map[string]interface{}) error
	State() (params.UnitStateResult, error)
	Tag() names.UnitTag
	UnitStatus() (params.StatusResult, error)
	CommitHookChanges(params.CommitHookChangesArgs) error
	PublicAddress() (string, error)
}

HookUnit represents the functions needed by a unit in a hook context to call into state.

type LeadershipContext

type LeadershipContext interface {
	IsLeader() (bool, error)
	LeaderSettings() (map[string]string, error)
	WriteLeaderSettings(map[string]string) error
}

LeadershipContext provides several hooks.Context methods. It exists separately of HookContext for clarity, and ease of testing.

func NewLeadershipContext

func NewLeadershipContext(accessor LeadershipSettingsAccessor, tracker leadership.Tracker, unitName string) LeadershipContext

type LeadershipSettingsAccessor

type LeadershipSettingsAccessor interface {
	Read(applicationName string) (map[string]string, error)
	Merge(applicationName, unitName string, settings map[string]string) error
}

LeadershipSettingsAccessor is an interface that allows us not to have to use the concrete `api/uniter/LeadershipSettingsAccessor` type, thus simplifying testing.

type Paths

type Paths interface {
	// GetToolsDir returns the filesystem path to the dirctory containing
	// the hook tool symlinks.
	GetToolsDir() string

	// GetBaseDir returns the filesystem path to the directory in which
	// the charm is installed.
	GetBaseDir() string

	// GetCharmDir returns the filesystem path to the directory in which
	// the charm is installed.
	GetCharmDir() string

	// GetJujucServerSocket returns the path to the socket used by the hook tools
	// to communicate back to the executing uniter process. It might be a
	// filesystem path, or it might be abstract.
	GetJujucServerSocket(remote bool) sockets.Socket

	// GetJujucClientSocket returns the path to the socket used by the hook tools
	// to communicate back to the executing uniter process. It might be a
	// filesystem path, or it might be abstract.
	GetJujucClientSocket(remote bool) sockets.Socket

	// GetMetricsSpoolDir returns the path to a metrics spool dir, used
	// to store metrics recorded during a single hook run.
	GetMetricsSpoolDir() string

	// GetResourcesDir returns the filesystem path to the directory
	// containing resource data files.
	GetResourcesDir() string
}

Paths exposes the paths needed by Context.

type Relation

type Relation interface {
	// Id returns the integer internal relation key.
	Id() int

	// Refresh refreshes the contents of the relation from the underlying
	// state.
	Refresh() error

	// Suspended returns the relation's current suspended status.
	Suspended() bool

	// SetStatus updates the status of the relation.
	SetStatus(status relation.Status) error

	// Tag returns the relation tag.
	Tag() names.RelationTag

	// OtherApplication returns the name of the application on the other
	// end of the relation (from this unit's perspective).
	OtherApplication() string

	// Life returns the relation's current life state.
	Life() life.Value
}

type RelationCache

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

RelationCache stores a relation's remote unit membership and settings. Member settings are stored until invalidated or removed by name; settings of non-member units are stored only until the cache is pruned.

func NewRelationCache

func NewRelationCache(readSettings SettingsFunc, memberNames []string) *RelationCache

NewRelationCache creates a new RelationCache that will use the supplied SettingsFunc to populate itself on demand. Initial membership is determined by memberNames.

func (*RelationCache) ApplicationSettings

func (cache *RelationCache) ApplicationSettings(appName string) (params.Settings, error)

ApplicationSettings returns the relation settings of the named application.

func (*RelationCache) InvalidateApplication

func (cache *RelationCache) InvalidateApplication(appName string)

InvalidateApplication ensures that contents cached for remote app will be wiped clean and that the next attempt to read its settings will use fresh data.

func (*RelationCache) InvalidateMember

func (cache *RelationCache) InvalidateMember(memberName string)

InvalidateMember ensures that the named remote unit will be considered a member of the relation, and that the next attempt to read its settings will use fresh data.

func (*RelationCache) MemberNames

func (cache *RelationCache) MemberNames() (memberNames []string)

MemberNames returns the names of the remote units present in the relation.

func (*RelationCache) Prune

func (cache *RelationCache) Prune(memberNames []string)

Prune resets the membership to the supplied list, and discards the settings of all non-member units.

func (*RelationCache) RemoveMember

func (cache *RelationCache) RemoveMember(memberName string)

RemoveMember ensures that the named remote unit will not be considered a member of the relation,

func (*RelationCache) Settings

func (cache *RelationCache) Settings(unitName string) (params.Settings, error)

Settings returns the settings of the named remote unit. It's valid to get the settings of any unit that has ever been in the relation.

type RelationInfo

type RelationInfo struct {
	RelationUnit RelationUnit
	MemberNames  []string
}

type RelationUnit

type RelationUnit interface {
	// ApplicationSettings returns a Settings which allows access to this unit's
	// application settings within the relation.
	ApplicationSettings() (*uniter.Settings, error)

	// Endpoint returns the relation endpoint that defines the unit's
	// participation in the relation.
	Endpoint() uniter.Endpoint

	// ReadSettings returns a map holding the settings of the unit with the
	// supplied name within this relation.
	ReadSettings(name string) (params.Settings, error)

	// Relation returns the relation associated with the unit.
	Relation() Relation

	// Settings returns a Settings which allows access to the unit's settings
	// within the relation.
	Settings() (*uniter.Settings, error)
}

type RelationUnitShim

type RelationUnitShim struct {
	*uniter.RelationUnit
}

func (*RelationUnitShim) Relation

func (r *RelationUnitShim) Relation() Relation

type RelationsFunc

type RelationsFunc func() map[int]*RelationInfo

RelationsFunc is used to get snapshots of relation membership at context creation time.

type SecretsAccessor

type SecretsAccessor interface {
	// CreateSecretURIs is used by secret-add to get URIs
	// for added secrets.
	CreateSecretURIs(int) ([]*secrets.URI, error)

	// SecretMetadata is used by secrets-get to fetch
	// metadata for secrets.
	SecretMetadata() ([]secrets.SecretOwnerMetadata, error)

	// SecretRotated records the outcome of rotating a secret.
	SecretRotated(uri string, oldRevision int) error
}

SecretsAccessor is used by the hook context to access the secrets backend.

type SecretsBackendGetter

type SecretsBackendGetter func() (jujusecrets.BackendsClient, error)

SecretsBackendGetter creates a secrets backend client.

type SettingsFunc

type SettingsFunc func(unitName string) (params.Settings, error)

SettingsFunc returns the relation settings for a unit.

type SettingsMap

type SettingsMap map[string]params.Settings

SettingsMap is a map from unit name to relation settings.

type State

type State interface {
	UnitStorageAttachments(unitTag names.UnitTag) ([]params.StorageAttachmentId, error)
	StorageAttachment(storageTag names.StorageTag, unitTag names.UnitTag) (params.StorageAttachment, error)
	GoalState() (application.GoalState, error)
	GetPodSpec(appName string) (string, error)
	GetRawK8sSpec(appName string) (string, error)
	CloudSpec() (*params.CloudSpec, error)
	ActionBegin(tag names.ActionTag) error
	ActionFinish(tag names.ActionTag, status string, results map[string]interface{}, message string) error
	UnitWorkloadVersion(tag names.UnitTag) (string, error)
	SetUnitWorkloadVersion(tag names.UnitTag, version string) error
	OpenedMachinePortRangesByEndpoint(machineTag names.MachineTag) (map[names.UnitTag]network.GroupedPortRanges, error)
	OpenedPortRangesByEndpoint() (map[names.UnitTag]network.GroupedPortRanges, error)
}

State exposes required state functions needed by the HookContext.

type StorageContextAccessor

type StorageContextAccessor interface {

	// StorageTags returns the tags of storage instances attached to
	// the unit.
	StorageTags() ([]names.StorageTag, error)

	// Storage returns the hooks.ContextStorageAttachment with the
	// supplied tag if it was found, and whether it was found.
	Storage(names.StorageTag) (jujuc.ContextStorageAttachment, error)
}

StorageContextAccessor is an interface providing access to StorageContexts for a hooks.Context.

Directories

Path Synopsis
Package mocks is a generated GoMock package.
Package mocks is a generated GoMock package.

Jump to

Keyboard shortcuts

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