instance

package
v3.0.0-beta10 Latest Latest
Warning

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

Go to latest
Published: Dec 12, 2025 License: Apache-2.0 Imports: 24 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

View Source
var (
	ErrInvalidGlobalExpect = errors.New("invalid instance monitor global expect")
	ErrInvalidLocalExpect  = errors.New("invalid instance monitor local expect")
	ErrInvalidState        = errors.New("invalid instance monitor state")
	ErrSameGlobalExpect    = errors.New("instance monitor global expect is already set to the same value")
)
View Source
var (
	MonitorGlobalExpectStrings map[MonitorGlobalExpect]string
	MonitorGlobalExpectValues  map[string]MonitorGlobalExpect
)

Functions

func ConfigEqual

func ConfigEqual(a, b *Config) bool

ConfigEqual returns a boolean reporting whether a == b

Nodename and Path are not compared

func DropNode

func DropNode(nodename string)

func InitData

func InitData()

InitData reset package instances data, it can be used for tests.

func InstanceString

func InstanceString(p naming.Path, nodename string) string

func ResourceFlagsString

func ResourceFlagsString(rid string, mon Monitor, status Status, rstatus resource.Status) string

ResourceFlagsString formats resource flags as a vector of characters.

R Running M Monitored D Disabled O Optional E Encap P Provisioned S Standby <n> Restart remaining, + More than 9 remaining, X UserStopped

Types

type ActorConfig

type ActorConfig struct {
	App              string            `json:"app,omitempty"`
	Children         naming.Relations  `json:"children,omitempty"`
	DRP              bool              `json:"drp,omitempty"`
	Env              string            `json:"env,omitempty"`
	MonitorAction    []MonitorAction   `json:"monitor_action,omitempty"`
	PreMonitorAction string            `json:"pre_monitor_action,omitempty"`
	Orchestrate      string            `json:"orchestrate"`
	Parents          naming.Relations  `json:"parents,omitempty"`
	PlacementPolicy  placement.Policy  `json:"placement_policy"`
	Resources        ResourceConfigs   `json:"resources"`
	Schedules        []schedule.Config `json:"schedules"`
	Stonith          bool              `json:"stonith"`
	Subsets          SubsetConfigs     `json:"subsets"`
	Topology         topology.T        `json:"topology,omitempty"`
	Flex             *FlexConfig       `json:"flex,omitempty"`

	// IsDisabled is true when DEFAULT.disable is true
	IsDisabled bool `json:"is_disabled"`
}

func (*ActorConfig) DeepCopy

func (cfg *ActorConfig) DeepCopy() *ActorConfig

type Config

type Config struct {
	Path      naming.Path `json:"-"`
	Checksum  string      `json:"csum"`
	Priority  priority.T  `json:"priority"`
	Scope     []string    `json:"scope"`
	UpdatedAt time.Time   `json:"updated_at"`

	*ActorConfig
	*VolConfig
}

Config describes a configuration file content checksum, timestamp of last change and the nodes it should be installed on.

func (*Config) DeepCopy

func (cfg *Config) DeepCopy() *Config

func (Config) Unstructured

func (t Config) Unstructured() map[string]any

type Data

type Data[T Dataer] struct {
	sync.RWMutex
	// contains filtered or unexported fields
}

Data defines a shared holder for all instances Dataer

var (

	// StatusData is the package data holder for all instances statuses
	StatusData *Data[Status]

	// MonitorData is the package data holder for all instances monitors
	MonitorData *Data[Monitor]

	// ConfigData is the package data holder for all instances configs
	ConfigData *Data[Config]
)

func NewData

func NewData[T Dataer]() *Data[T]

func (*Data[T]) DropNode

func (c *Data[T]) DropNode(nodename string)

DropNode removes node instances

func (*Data[T]) GetAll

func (c *Data[T]) GetAll() []DataElement[T]

GetAll returns all instance data as a list of DataElements

func (*Data[T]) GetByNode

func (c *Data[T]) GetByNode(nodename string) map[naming.Path]*T

GetByNode returns a map (indexed by path) of instance data for nodename

func (*Data[T]) GetByPath

func (c *Data[T]) GetByPath(p naming.Path) map[string]*T

GetByPath returns a map (indexed by nodename) of instance data for path p

func (*Data[T]) GetByPathAndNode

func (c *Data[T]) GetByPathAndNode(p naming.Path, nodename string) *T

GetByPathAndNode returns an instance data or nil if data is not found

func (*Data[T]) Set

func (c *Data[T]) Set(p naming.Path, nodename string, v *T)

Set will add or update instance data

func (*Data[T]) Unset

func (c *Data[T]) Unset(p naming.Path, nodename string)

Unset removes an instance data

type DataElement

type DataElement[T Dataer] struct {
	Path  naming.Path
	Node  string
	Value *T
}

type Dataer

type Dataer interface {
	Status | Monitor | Config
}

type EncapMap

type EncapMap map[string]EncapStatus

func (EncapMap) DeepCopy

func (m EncapMap) DeepCopy() EncapMap

func (EncapMap) Unstructured

func (t EncapMap) Unstructured() map[string]map[string]any

type EncapStatus

type EncapStatus struct {
	Status
	Hostname string `json:"hostname"`
}

func (EncapStatus) DeepCopy

func (t EncapStatus) DeepCopy() *EncapStatus

func (EncapStatus) Unstructured

func (t EncapStatus) Unstructured() map[string]any

type FlexConfig

type FlexConfig struct {
	Max    int `json:"max,omitempty"`
	Min    int `json:"min,omitempty"`
	Target int `json:"target,omitempty"`
}

type Instance

type Instance struct {
	Config  *Config  `json:"config"`
	Monitor *Monitor `json:"monitor"`
	Status  *Status  `json:"status"`
}

type Monitor

type Monitor struct {
	GlobalExpect          MonitorGlobalExpect `json:"global_expect"`
	GlobalExpectUpdatedAt time.Time           `json:"global_expect_updated_at"`
	GlobalExpectOptions   any                 `json:"global_expect_options"`

	// IsLeader flags the instance as the one where to provision as leader.
	// The provisioning leader is responsible for preparing the shared resources.
	// There can be only one leader, whatever the topology.
	IsLeader bool `json:"is_leader"`

	// IsHALeader flags the instances to start automatically if orchestrate=ha
	// or when the admin posted a start orchestration.
	// There can be one leader on a failover object, or many leaders with a flex topology.
	IsHALeader bool `json:"is_ha_leader"`

	LocalExpect          MonitorLocalExpect `json:"local_expect"`
	LocalExpectUpdatedAt time.Time          `json:"local_expect_updated_at"`

	// OrchestrationID is the accepted orchestration id that will be unset
	// when orchestration is reached on local node
	OrchestrationID uuid.UUID `json:"orchestration_id"`

	// OrchestrationIsDone is set by the orchestration when it decides the instance state has reached its target.
	// It is used to clear orchestration and orchestration id up when all instance monitors have
	// OrchestrationIsDone set.
	OrchestrationIsDone bool `json:"orchestration_is_done"`

	SessionID               uuid.UUID        `json:"session_id"`
	State                   MonitorState     `json:"state"`
	StateUpdatedAt          time.Time        `json:"state_updated_at"`
	MonitorActionExecutedAt time.Time        `json:"monitor_action_executed_at"`
	IsPreserved             bool             `json:"preserved"`
	Resources               ResourceMonitors `json:"resources,omitempty"`
	UpdatedAt               time.Time        `json:"updated_at"`

	Parents  map[string]status.T `json:"parents,omitempty"`
	Children map[string]status.T `json:"children,omitempty"`
}

Monitor describes the in-daemon states of an instance

func (Monitor) DeepCopy

func (mon Monitor) DeepCopy() *Monitor

func (*Monitor) UnmarshalJSON

func (t *Monitor) UnmarshalJSON(b []byte) error

func (Monitor) Unstructured

func (t Monitor) Unstructured() map[string]any

type MonitorAction

type MonitorAction string
var (
	// MonitorActionNone: represents the no-operation monitor action
	MonitorActionNone MonitorAction = "none"

	// MonitorActionCrash represents the monitor action that will try system crash/panic
	MonitorActionCrash MonitorAction = "crash"

	// MonitorActionFreezeStop represents the monitor action that will try freeze and subsequently stop
	// the monitored instance.
	MonitorActionFreezeStop MonitorAction = "freezestop"

	// MonitorActionReboot represents the monitor action that will reboot the system.
	MonitorActionReboot MonitorAction = "reboot"

	// MonitorActionSwitch represents the monitor action that will stop instance stop to allow
	// any other cluster nodes to takeover instance.
	MonitorActionSwitch MonitorAction = "switch"
)

type MonitorGlobalExpect

type MonitorGlobalExpect int
const (
	MonitorGlobalExpectInit MonitorGlobalExpect = iota
	MonitorGlobalExpectAborted
	MonitorGlobalExpectDeleted
	MonitorGlobalExpectFrozen
	MonitorGlobalExpectNone
	MonitorGlobalExpectPlaced
	MonitorGlobalExpectPlacedAt
	MonitorGlobalExpectProvisioned
	MonitorGlobalExpectPurged
	MonitorGlobalExpectRestarted
	MonitorGlobalExpectStarted
	MonitorGlobalExpectStopped
	MonitorGlobalExpectUnfrozen
	MonitorGlobalExpectUnprovisioned
)

func (MonitorGlobalExpect) MarshalText

func (t MonitorGlobalExpect) MarshalText() ([]byte, error)

func (MonitorGlobalExpect) String

func (t MonitorGlobalExpect) String() string

func (*MonitorGlobalExpect) UnmarshalText

func (t *MonitorGlobalExpect) UnmarshalText(b []byte) error

type MonitorGlobalExpectOptionsPlacedAt

type MonitorGlobalExpectOptionsPlacedAt struct {
	Destination []string `json:"destination"`
	Live        bool     `json:"live"`
}

type MonitorGlobalExpectOptionsRestarted

type MonitorGlobalExpectOptionsRestarted struct {
	Force bool `json:"force"`
}

type MonitorLocalExpect

type MonitorLocalExpect int
const (
	MonitorLocalExpectInit MonitorLocalExpect = iota
	MonitorLocalExpectNone
	MonitorLocalExpectStarted
	MonitorLocalExpectShutdown
	MonitorLocalExpectEvicted
)

func (MonitorLocalExpect) MarshalText

func (t MonitorLocalExpect) MarshalText() ([]byte, error)

func (MonitorLocalExpect) String

func (t MonitorLocalExpect) String() string

func (*MonitorLocalExpect) UnmarshalText

func (t *MonitorLocalExpect) UnmarshalText(b []byte) error

type MonitorState

type MonitorState int
const (
	// General States
	MonitorStateInit MonitorState = iota
	MonitorStateIdle

	MonitorStateBootSuccess
	MonitorStateBootFailed
	MonitorStateBootProgress

	MonitorStateShutdownProgress
	MonitorStateShutdownFailure
	MonitorStateShutdownSuccess

	MonitorStateStartProgress
	MonitorStateStartFailure
	MonitorStateStartSuccess

	MonitorStateStopProgress
	MonitorStateStopFailure
	MonitorStateStopSuccess

	MonitorStateFreezeProgress
	MonitorStateFreezeFailure
	MonitorStateFreezeSuccess

	MonitorStateUnfreezeProgress
	MonitorStateUnfreezeFailure
	MonitorStateUnfreezeSuccess

	MonitorStateProvisionProgress
	MonitorStateProvisionFailure
	MonitorStateProvisionSuccess

	MonitorStateUnprovisionProgress
	MonitorStateUnprovisionFailure
	MonitorStateUnprovisionSuccess

	MonitorStateDeleteProgress
	MonitorStateDeleteFailure
	MonitorStateDeleteSuccess

	// wait states
	MonitorStateWaitChildren
	MonitorStateWaitParents
	MonitorStateWaitPriors
	MonitorStateWaitLeader
	MonitorStateWaitNonLeader

	// Miscellaneous
	MonitorStateRunning
	MonitorStateSyncing
	MonitorStatePurgeFailed
	MonitorStateReady
	MonitorStateRestarted
)

func (MonitorState) IsDoing

func (t MonitorState) IsDoing() bool

func (MonitorState) IsOneOf

func (t MonitorState) IsOneOf(states ...MonitorState) bool

func (MonitorState) MarshalText

func (t MonitorState) MarshalText() ([]byte, error)

func (MonitorState) String

func (t MonitorState) String() string

func (*MonitorState) UnmarshalText

func (t *MonitorState) UnmarshalText(b []byte) error

type MonitorUpdate

type MonitorUpdate struct {
	GlobalExpect        *MonitorGlobalExpect `json:"global_expect"`
	GlobalExpectOptions any                  `json:"global_expect_options"`
	LocalExpect         *MonitorLocalExpect  `json:"local_expect"`
	State               *MonitorState        `json:"state"`

	// CandidateOrchestrationID is a candidate orchestration id for a new imon orchestration.
	CandidateOrchestrationID uuid.UUID `json:"orchestration_id"`
}

MonitorUpdate is embedded in the SetInstanceMonitor message to change some Monitor values. A nil value does not change the current value.

func (MonitorUpdate) String

func (t MonitorUpdate) String() string

type Node

type Node struct {
	Name     string    `json:"name"`
	FrozenAt time.Time `json:"frozen_at,omitempty"`
}

Node contains the node information displayed in print status.

type ResourceConfig

type ResourceConfig struct {
	IsDisabled   bool           `json:"is_disabled"`
	IsMonitored  bool           `json:"is_monitored"`
	IsStandby    bool           `json:"is_standby"`
	Restart      int            `json:"restart"`
	RestartDelay *time.Duration `json:"restart_delay"`
}

func (ResourceConfig) Unstructured

func (t ResourceConfig) Unstructured() map[string]any

type ResourceConfigs

type ResourceConfigs map[string]ResourceConfig

func (ResourceConfigs) DeepCopy

func (m ResourceConfigs) DeepCopy() ResourceConfigs

func (ResourceConfigs) Get

func (rcfgs ResourceConfigs) Get(rid string) *ResourceConfig

func (ResourceConfigs) Unstructured

func (t ResourceConfigs) Unstructured() map[string]map[string]any

type ResourceMonitor

type ResourceMonitor struct {
	Restart ResourceMonitorRestart `json:"restart"`
}

ResourceMonitor describes the restart states maintained by the daemon for an object instance.

func (*ResourceMonitor) DecRestartRemaining

func (rmon *ResourceMonitor) DecRestartRemaining()

func (ResourceMonitor) Unstructured

func (t ResourceMonitor) Unstructured() map[string]any

type ResourceMonitorRestart

type ResourceMonitorRestart struct {
	Remaining int       `json:"remaining"`
	LastAt    time.Time `json:"last_at"`
}

func (ResourceMonitorRestart) Unstructured

func (t ResourceMonitorRestart) Unstructured() map[string]any

type ResourceMonitors

type ResourceMonitors map[string]ResourceMonitor

func (ResourceMonitors) DeepCopy

func (m ResourceMonitors) DeepCopy() ResourceMonitors

func (ResourceMonitors) Get

func (ResourceMonitors) Set

func (m ResourceMonitors) Set(rid string, rmon ResourceMonitor)

func (ResourceMonitors) Unstructured

func (t ResourceMonitors) Unstructured() map[string]map[string]any

type ResourceOrder

type ResourceOrder []resource.Status

ResourceOrder is a sortable list representation of the instance status resources map.

func (ResourceOrder) Len

func (a ResourceOrder) Len() int

func (ResourceOrder) Less

func (a ResourceOrder) Less(i, j int) bool

func (ResourceOrder) Swap

func (a ResourceOrder) Swap(i, j int)

type ResourceStatuses

type ResourceStatuses map[string]resource.Status

func (ResourceStatuses) DeepCopy

func (m ResourceStatuses) DeepCopy() ResourceStatuses

func (ResourceStatuses) Unstructured

func (t ResourceStatuses) Unstructured() map[string]map[string]any

type States

type States struct {
	Path    naming.Path `json:"path"`
	Node    Node        `json:"node,omitempty"`
	Config  Config      `json:"config,omitempty"`
	Status  Status      `json:"status,omitempty"`
	Monitor Monitor     `json:"monitor,omitempty"`
}

States groups config and status of the object instance as seen by the daemon.

func (States) LoadTreeNode

func (t States) LoadTreeNode(head *tree.Node)

LoadTreeNode add the tree nodes representing the type instance into another tree, at the specified node.

func (States) LoadTreeNodeFolded

func (t States) LoadTreeNodeFolded(head *tree.Node)

LoadTreeNodeFolded add the tree nodes representing the type instance into another tree, at the specified node. TODO: probable bug, LoadTreeNodeFolded duplicate code of LoadTreeNode

func (States) Render

func (t States) Render() string

Render returns a human friendly string representation of the type instance.

func (States) Tree

func (t States) Tree() *tree.Tree

Tree returns a tree loaded with the type instance.

type StatesList

type StatesList []States

func (StatesList) ByNode

func (t StatesList) ByNode() map[string]States

type Status

type Status struct {
	Avail         status.T                 `json:"avail"`
	Encap         EncapMap                 `json:"encap,omitempty"`
	FrozenAt      time.Time                `json:"frozen_at,omitempty"`
	LastStartedAt time.Time                `json:"last_started_at"`
	Optional      status.T                 `json:"optional,omitempty"`
	Overall       status.T                 `json:"overall"`
	Provisioned   provisioned.T            `json:"provisioned"`
	Resources     ResourceStatuses         `json:"resources,omitempty"`
	Running       resource.RunningInfoList `json:"running,omitempty"`
	UpdatedAt     time.Time                `json:"updated_at"`
}

Status describes the instance status.

func (Status) DeepCopy

func (t Status) DeepCopy() *Status

func (Status) IsFrozen

func (t Status) IsFrozen() bool

func (Status) IsUnfrozen

func (t Status) IsUnfrozen() bool

func (*Status) SortedResources

func (t *Status) SortedResources() []resource.Status

SortedResources returns a list of resource identifiers sorted by: 1/ driver group 2/ subset 3/ resource name

func (Status) Unstructured

func (t Status) Unstructured() map[string]any

type SubsetConfig

type SubsetConfig struct {
	Parallel bool `json:"parallel,omitempty"`
}

func (SubsetConfig) Unstructured

func (t SubsetConfig) Unstructured() map[string]any

type SubsetConfigs

type SubsetConfigs map[string]SubsetConfig

func (SubsetConfigs) DeepCopy

func (m SubsetConfigs) DeepCopy() SubsetConfigs

func (SubsetConfigs) Unstructured

func (t SubsetConfigs) Unstructured() map[string]map[string]any

type VolConfig

type VolConfig struct {
	Pool string `json:"pool"`
	Size int64  `json:"size"`
}

func (*VolConfig) DeepCopy

func (cfg *VolConfig) DeepCopy() *VolConfig

Jump to

Keyboard shortcuts

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