instance

package
v3.0.0-rc43 Latest Latest
Warning

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

Go to latest
Published: Oct 1, 2026 License: Apache-2.0 Imports: 30 Imported by: 0

Documentation

Index

Constants

View Source
const MaxResizeStages = 3

MaxResizeStages is how many stages a resize orchestration grows a chain in. A chain crossing more replicated resources than that is grown by hand, one stage at a time.

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 IsReferenceResource

func IsReferenceResource(group driver.Group, name string) bool

IsReferenceResource reports whether a resource of the group and driver name tells the active instance: the ones holding what the data lives on or is reached by, that is every resource but the app, sync and task ones, and the disk.scsireserv and disk.drbd ones, which are up on the passive nodes too.

func IsReplicationSource

func IsReplicationSource(refs []ReferenceStatus, force bool) (ok bool, reason string, forced bool)

IsReplicationSource decides from the status of the reference resources of an instance whether it is the one the data is replicated from.

As v2 did, their aggregated availability must be up, or not applicable with their overall status up. An instance with no reference resource gives no way to tell the active one from the others, so none is. force makes an instance whose reference resources are neither down nor not applicable the source anyway, forced saying so, and reason why it would not be otherwise.

func ResourceFlagsString

func ResourceFlagsString(rid string, states States, 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"`

	// Claims is what the object claims of each compute type of its
	// namespace, cluster-wide: thousandths of a cpu, and bytes of memory,
	// -1 for a type its processes are not capped on.
	//
	// It is published with the configuration because that is where a
	// claim reads what a namespace holds, and a claim is weighed when a
	// configuration is written, before anything runs.
	Claims map[string]int64 `json:"claims,omitempty"`

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

	// WaitSyncsTimeout is how long a stop or a switch waits for the
	// syncs running on the instance to end: DEFAULT.wait_syncs_timeout.
	WaitSyncsTimeout time.Duration `json:"wait_syncs_timeout,omitempty"`
}

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"`
	Labels    label.M     `json:"labels,omitempty"`

	*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"`
}

func (*Instance) DeepCopy

func (t *Instance) DeepCopy() *Instance

DeepCopy returns a copy of the instance sharing nothing with it.

func (*Instance) IsZero

func (t *Instance) IsZero() bool

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               xsession.ID      `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
	MonitorGlobalExpectResized
	MonitorGlobalExpectRestarted
	MonitorGlobalExpectStarted
	MonitorGlobalExpectStopped
	MonitorGlobalExpectUnfrozen
	MonitorGlobalExpectUnprovisioned
	MonitorGlobalExpectCapped

	// MonitorGlobalExpectUnknown is what a value this agent does not know decodes to:
	// a peer running a later version publishes values this one has no
	// name for, and failing to decode them failed the whole heartbeat
	// message the peer sent, which is how a peer is found dead.
	MonitorGlobalExpectUnknown
)

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 MonitorGlobalExpectOptionsCapped

type MonitorGlobalExpectOptionsCapped struct {
	ConfigUpdatedAt time.Time `json:"config_updated_at"`
}

MonitorGlobalExpectOptionsCapped carries the configuration a cap orchestration applies, so a node does not apply the caps it held before the request.

type MonitorGlobalExpectOptionsPlacedAt

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

	// InterruptSyncs has the instance stopped interrupt the syncs
	// running on it, instead of waiting for them to end.
	InterruptSyncs bool `json:"interrupt_syncs,omitempty"`
}

type MonitorGlobalExpectOptionsResized

type MonitorGlobalExpectOptionsResized struct {
	ConfigUpdatedAt time.Time `json:"config_updated_at"`
}

MonitorGlobalExpectOptionsResized carries the configuration a resize is for, so a node does not grow to the size it held before the request.

type MonitorGlobalExpectOptionsRestarted

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

type MonitorGlobalExpectOptionsStopped

type MonitorGlobalExpectOptionsStopped struct {
	InterruptSyncs bool `json:"interrupt_syncs,omitempty"`
}

MonitorGlobalExpectOptionsStopped carries how a stop treats the syncs running on the instance: it waits for them to end, or it interrupts them when InterruptSyncs is set.

type MonitorLocalExpect

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

	// MonitorLocalExpectUnknown is what a value this agent does not know decodes to:
	// a peer running a later version publishes values this one has no
	// name for, and failing to decode them failed the whole heartbeat
	// message the peer sent, which is how a peer is found dead.
	MonitorLocalExpectUnknown
)

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

	MonitorStateResizeProgress
	MonitorStateResizeFailure
	MonitorStateResizeSuccess

	// MonitorStateResizeStage0 and its siblings are the states an instance
	// takes between the stages of a resize. A chain is grown in at most
	// MaxResizeStages stages, so they are named rather than counted.
	MonitorStateResizeStage0
	MonitorStateResizeStage1
	MonitorStateResizeStage2

	MonitorStateCapProgress
	MonitorStateCapFailure
	MonitorStateCapSuccess

	// wait states
	MonitorStateWaitChildren
	MonitorStateWaitParents
	MonitorStateWaitPriors
	MonitorStateWaitLeader
	MonitorStateWaitNonLeader
	MonitorStateWaitSyncs

	// Miscellaneous
	MonitorStateRunning
	MonitorStateSyncing
	MonitorStatePurgeFailed
	MonitorStateReady
	MonitorStateRestarted

	// MonitorStateUnknown is what a value this agent does not know decodes to:
	// a peer running a later version publishes values this one has no
	// name for, and failing to decode them failed the whole heartbeat
	// message the peer sent, which is how a peer is found dead.
	MonitorStateUnknown
)

func NewMonitorStateResizeStage

func NewMonitorStateResizeStage(stage int) (MonitorState, bool)

NewMonitorStateResizeStage is the state of an instance that finished a stage of a resize, and whether there is one to name.

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) ResizeStage

func (t MonitorState) ResizeStage() (int, bool)

ResizeStage is the stage an instance finished, and whether it is between stages at all.

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 ReferenceStatus

type ReferenceStatus struct {
	RID      string
	Status   status.T
	Optional bool
}

ReferenceStatus is the status of a reference resource of an instance, one of the resources telling the active instance of an object.

type ResourceConfig

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

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,omitempty"`
}

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

func (*ResourceMonitor) DecRestartRemaining

func (m *ResourceMonitor) DecRestartRemaining()

func (*ResourceMonitor) Unstructured

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

type ResourceMonitorRestart

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

func (*ResourceMonitorRestart) DeepCopy

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"`

	// StoppedAt is when the instance was stopped on purpose, and zero
	// when it was not. It says the daemon must not start the instance
	// back on its own, and is cleared when the object is wanted up
	// again. It is what a stop uses instead of freezing, so the frozen
	// flag keeps saying what the operator decided, and only that.
	StoppedAt time.Time `json:"stopped_at,omitempty"`

	// FrozenScope is "object" when the instance was frozen by a freeze
	// of the object, "instance" when it was frozen alone, and empty
	// when it is not frozen.
	FrozenScope freeze.Scope `json:"frozen_scope,omitempty"`

	UpdatedAt time.Time `json:"updated_at"`

	// OutdatedAt is the earliest OutdatedAt of the resources: when
	// the status changes with no event to tell, for the daemon to
	// evaluate it again then. Zero if it does not.
	OutdatedAt time.Time `json:"outdated_at,omitzero"`

	// RPOBreachedAt is the earliest RPOBreachedAt of the resources:
	// past it, this node taking over would lose more data than one
	// of the resources allows. Each resource has its own contract,
	// so the instance breaches when any of them does. Zero when no
	// resource keeps a copy here.
	RPOBreachedAt time.Time `json:"rpo_breached_at,omitzero"`
}

Status describes the instance status.

func (Status) DeepCopy

func (t Status) DeepCopy() *Status

func (Status) IsFrozen

func (t Status) IsFrozen() bool

func (Status) IsStopped

func (t Status) IsStopped() bool

IsStopped says the instance was stopped on purpose, so the daemon must not start it back on its own.

func (Status) IsUnfrozen

func (t Status) IsUnfrozen() bool

func (Status) ReplicationSource

func (t Status) ReplicationSource() (bool, string)

ReplicationSource says whether the instance is the one the data is replicated from, reading its reference resources from its status, and why not when it is not.

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"`

	// Charges is what the volume takes of pools other than the one that
	// served it, by pool name.
	//
	// A volume is counted against the claim its namespace holds on the
	// pool it was served by, which is what it was asked of that pool.
	// A volume whose resources take their storage elsewhere costs those
	// pools too, and nothing else says so: a volume served by a virtual
	// pool is a copy of a template, and what that template builds is
	// only known by reading what it built.
	Charges map[string]int64 `json:"charges,omitempty"`
}

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