Documentation
¶
Overview ¶
Package client - a High-level Incus API wrapper with resource management and parallel execution.
This package provides a compose-spec friendly interface for managing Incus resources: instances, networks, volumes, profiles, and images.
It also adds support for container image building by using `podman`.
Package client provides a high-level wrapper around the Incus client library.
This package abstracts the complexities of interacting with Incus servers and provides a compose-spec friendly interface for managing instances, networks, volumes, and projects.
For detailed documentation, see: https://github.com/lxc/incus-compose/tree/main/docs/architecture/client
Index ¶
- Constants
- Variables
- func ByKind[T Resource](resources []Resource, kind Kind) ([]T, error)
- func DNSmasqParse(raw string) (map[string][]string, map[string][]string, string)
- func DialRemote(path string, remote string) (*iclient.Connection, error)
- func RandString(n int) string
- func RunAction(ctx context.Context, r Resource, action Action, opts ...Option) error
- func SanitizeIncusName(name string, maxLength int) string
- func SanitizeNetworkName(projectName, prefix, networkName string) string
- func SanitizeProjectName(name string) string
- func SupportsAction(r Resource, action Action) bool
- type Action
- type BaseResource
- type BuildConfig
- type BuildInfo
- type BuildMode
- type Client
- func (c *Client) AddHookAfter(...)
- func (c *Client) AddHookBefore(...)
- func (c *Client) AddHookConnected(hook func(err error) error)
- func (c *Client) AddHookDone(hook func(err error) error)
- func (c *Client) Clone() *Client
- func (c *Client) Config() ClientConfig
- func (c *Client) Connection() (*iclient.Connection, error)
- func (c *Client) Done() error
- func (c *Client) FindHealthd() (string, error)
- func (c *Client) Global() *GlobalClient
- func (c *Client) GlobalConnection() (*iclient.Connection, error)
- func (c *Client) HealthdRunning() (bool, error)
- func (c *Client) IgnoreError(iAction Action, iErr error)
- func (c *Client) IncusProject() string
- func (c *Client) InstanceExists(name string) (bool, error)
- func (c *Client) IsConnected() bool
- func (c *Client) IsDebugging() bool
- func (c *Client) IsRemote() bool
- func (c *Client) LogDebug(msg string, args ...any)
- func (c *Client) LogError(msg string, args ...any)
- func (c *Client) LogInfo(msg string, args ...any)
- func (c *Client) LogWarn(msg string, args ...any)
- func (c *Client) Open() error
- func (c *Client) Project() string
- func (c *Client) RegisterDNSWatcher() error
- func (c *Client) ResolveImageFingerprint(fingerprint string) string
- func (c *Client) Resource(kind Kind, name string, config Config) (Resource, error)
- func (c *Client) WarnError(f func() error, message string)
- type ClientConfig
- type ClientOption
- func ClientCacheProject(n string) ClientOption
- func ClientDefaultStoragePool(n string) ClientOption
- func ClientDescriptionFormat(n string) ClientOption
- func ClientLogger(l *slog.Logger) ClientOption
- func ClientNetworkPrefix(n string) ClientOption
- func ClientProvideConnection(conn *iclient.Connection) ClientOption
- func ClientStderrWriter(lw *SwapWriter) ClientOption
- func ClientStdout(w io.Writer) ClientOption
- func ClientSystemProject(n string) ClientOption
- func ClientURL(u string) ClientOption
- type Config
- type DeleteAble
- type EnsureAble
- type EnsureProjectOption
- type Error
- func (e *Error) As(target any) bool
- func (e *Error) Error() string
- func (e *Error) Is(target error) bool
- func (e *Error) Severity() slog.Level
- func (e *Error) Unwrap() error
- func (e *Error) WithAction(action Action) *Error
- func (e *Error) WithKindName(kind Kind, name string) *Error
- func (e *Error) WithResource(resource Resource) *Error
- func (e *Error) WithSeverity(severity slog.Level) *Error
- func (e *Error) WithText(text string) *Error
- func (e *Error) Wrap(wrapped error) *Error
- type GlobalClient
- func (c *GlobalClient) AddHookAfter(...)
- func (c *GlobalClient) AddHookBefore(...)
- func (c *GlobalClient) AddMissingProjectConfig(name string, config map[string]string) error
- func (c *GlobalClient) CliConfig() *iclient.Config
- func (c *GlobalClient) Connect() error
- func (c *GlobalClient) Connection() (*iclient.Connection, error)
- func (c *GlobalClient) ConnectionIPs() ([]net.IP, error)
- func (c *GlobalClient) DeleteProject(name string, force bool) error
- func (c *GlobalClient) EnsureProject(name string, opts ...EnsureProjectOption) (*Client, error)
- func (c *GlobalClient) HTTPSAddress() (string, error)
- func (c *GlobalClient) HasExtension(ext string) bool
- func (c *GlobalClient) IsConnected() bool
- func (c *GlobalClient) IsDebugging() bool
- func (c *GlobalClient) IsRemote() bool
- func (c *GlobalClient) LogDebug(msg string, args ...any)
- func (c *GlobalClient) LogError(msg string, args ...any)
- func (c *GlobalClient) LogInfo(msg string, args ...any)
- func (c *GlobalClient) LogWarn(msg string, args ...any)
- func (c *GlobalClient) NetworkBridgeIPs(networkName string) (ipv4 []string, ipv6 []string, err error)
- func (c *GlobalClient) ProjectConfig(name string) (map[string]string, error)
- func (c *GlobalClient) ProjectsWithConfig(key, value string) ([]string, error)
- func (c *GlobalClient) SameHost() error
- func (c *GlobalClient) SetOutputHandler(handler func(action Action, r Resource, data []byte))
- func (c *GlobalClient) SetProgressHandler(handler func(action Action, r Resource, args Options, p Progress))
- func (c *GlobalClient) Stderr() io.Writer
- func (c *GlobalClient) Stdout() io.Writer
- func (c *GlobalClient) SwapStderr(w io.Writer) io.Writer
- func (c *GlobalClient) URL() (*url.URL, error)
- type Image
- func (r *Image) AddService(name string)
- func (r *Image) Created() bool
- func (r *Image) Delete(ctx context.Context, opts ...Option) error
- func (r *Image) Ensure(ctx context.Context, opts ...Option) error
- func (r *Image) IncusName() string
- func (r *Image) IsEnsured() bool
- func (r *Image) NativeIncus() bool
- func (r *Image) Remote() string
- func (r *Image) Size() int64
- func (r *Image) State() *ImageState
- func (r *Image) Status() string
- func (r *Image) String() string
- type ImageConfig
- type ImageState
- type Instance
- func (r *Instance) Created() bool
- func (r *Instance) Delete(ctx context.Context, opts ...Option) error
- func (r *Instance) Ensure(ctx context.Context, opts ...Option) error
- func (r *Instance) HasFull() bool
- func (r *Instance) IncusName() string
- func (r *Instance) IsEnsured() bool
- func (r *Instance) Log(ctx context.Context, opts ...Option) error
- func (r *Instance) MarkDelete()
- func (r *Instance) PushFiles(ctx context.Context, sftpConn *sftp.Client) error
- func (r *Instance) Running() bool
- func (r *Instance) ServiceName() string
- func (r *Instance) SetHealthCheckingStopped(ctx context.Context, stopped bool) error
- func (r *Instance) Start(ctx context.Context, opts ...Option) error
- func (r *Instance) State() *InstanceState
- func (r *Instance) Stop(ctx context.Context, opts ...Option) error
- func (r *Instance) String() string
- func (r *Instance) WaitIPs(ctx context.Context, timeout time.Duration) ([]InterfaceIPs, error)
- type InstanceConfig
- type InstanceDevice
- type InstanceDeviceConfig
- type InstanceDeviceDiskConfig
- type InstanceDeviceProxyConfig
- type InstanceDeviceTmpfsConfig
- type InstanceFile
- type InstanceState
- type InterfaceIPs
- type Kind
- type LogAble
- type Network
- func (r *Network) Created() bool
- func (r *Network) Delete(ctx context.Context, opts ...Option) error
- func (r *Network) Ensure(ctx context.Context, opts ...Option) error
- func (r *Network) IncusName() string
- func (r *Network) IsEnsured() bool
- func (r *Network) State() *NetworkState
- func (r *Network) String() string
- type NetworkConfig
- type NetworkState
- type Option
- func OptionBuild(info BuildInfo) Option
- func OptionCreate() Option
- func OptionDependencyTimeout(t time.Duration) Option
- func OptionExternalHealthd() Option
- func OptionFollow() Option
- func OptionForce() Option
- func OptionNoHealthd() Option
- func OptionPull() Option
- func OptionPullMode(m PullMode) Option
- func OptionTimeout(t time.Duration) Option
- type Options
- type PoolRunArgs
- type Profile
- func (r *Profile) Created() bool
- func (r *Profile) Delete(ctx context.Context, opts ...Option) error
- func (r *Profile) Ensure(ctx context.Context, opts ...Option) error
- func (r *Profile) HasDevice(name string) bool
- func (r *Profile) IncusName() string
- func (r *Profile) IsEnsured() bool
- func (r *Profile) State() *ProfileState
- func (r *Profile) String() string
- type ProfileConfig
- type ProfileState
- type Progress
- type PullMode
- type Reader
- type Resource
- type ResourceStore
- type Stack
- func (s *Stack) Add(resources ...Resource)
- func (s *Stack) AddOrdered(order []string, resources map[string][]Resource)
- func (s *Stack) All() []Resource
- func (s *Stack) ForAction(action Action) *Stack
- func (s *Stack) ForActionF(action Action, filter func(r Resource) bool) *Stack
- func (s *Stack) Run(ctx context.Context, action Action, opts ...Option) error
- func (s *Stack) SetOptions(opts ...StackOption)
- func (s *Stack) Sort(desc bool)
- type StackOption
- type StackOptions
- type StackRunArgs
- type StartAble
- type StopAble
- type StorageVolume
- func (r *StorageVolume) Created() bool
- func (r *StorageVolume) Delete(ctx context.Context, opts ...Option) error
- func (r *StorageVolume) Ensure(ctx context.Context, opts ...Option) error
- func (r *StorageVolume) IncusName() string
- func (r *StorageVolume) IsEnsured() bool
- func (r *StorageVolume) Lock(ctx context.Context, sc *sftp.Client, name string, stale time.Duration) (*VolumeLock, error)
- func (r *StorageVolume) SFTP(ctx context.Context) (*sftp.Client, error)
- func (r *StorageVolume) Start(_ context.Context, _ ...Option) error
- func (r *StorageVolume) State() *StorageVolumeState
- func (r *StorageVolume) String() string
- type StorageVolumeConfig
- type StorageVolumeState
- type SwapWriter
- type VolumeLock
- type WorkerPool
Constants ¶
const ( SeverityError = slog.LevelError SeverityWarn = slog.LevelWarn )
Severity of an error, defaults to SeverityError.
const ( HealthStatusUnknown = shared.HealthStatusUnknown HealthStatusHealthy = shared.HealthStatusHealthy HealthStatusUnhealthy = shared.HealthStatusUnhealthy HealthStatusStopped = shared.HealthStatusStopped HealthKeyPrefix = shared.HealthKeyPrefix // HealthStatusKey is the instance config key used to store health status. HealthStatusKey = shared.HealthStatusKey // HealthStoppedKey when "true" means healthchecking is stopped. HealthStoppedKey = shared.HealthStoppedKey )
Health check status constants written to HealthConfigKey by ic-healthd. Re-exported from the shared package for backward compatibility with existing client.Health* references.
const ( PriorityProject = 1 << 8 // Infrastructure (created first, deleted last) PriorityProfile = 1 << 9 // Base config PriorityImage = 1 << 10 // Images (own batch for parallel downloads) PriorityNetwork = 1 << 11 // Networks PriorityVolume = 1 << 12 // Storage PriorityInstance = 1 << 13 // Instance depends on everything above )
Resource creation priorities using powers of 2 for clear separation. Lower priority values are created first and deleted last.
const ( InstanceDeviceTypeProxy = "proxy" InstanceDeviceTypeDisk = "disk" InstanceDeviceTypeNic = "nic" InstanceDeviceTypeTmpfs = "tmpfs" )
Device type constants.
const DefaultCacheProject = "incus-compose-cache"
DefaultCacheProject is the Incus project images are cached in.
const DefaultLockVolume = "ic-image-lock"
DefaultLockVolume is the storage volume holding the per-alias image locks.
const DefaultSystemProject = "incus-client"
DefaultSystemProject is the Incus project the library runs its own instances in.
const MaxIncusNameLen = 63
MaxIncusNameLen is the maximum length for Incus instance names. Incus allows up to 63 characters (DNS hostname limit).
Variables ¶
var ( // ErrUnsupportedAction indicates the resource does not support the action. ErrUnsupportedAction = NewError("resource does not support action") // ErrUnknown indicates an unknown error occurred. ErrUnknown = NewError("unknown") // ErrRunning indicates a command on a running instance. ErrRunning = NewError("resource is already running").WithSeverity(SeverityWarn) // ErrNotRunning indicates a command on a not running instance. ErrNotRunning = NewError("resource is not running").WithSeverity(SeverityWarn) // ErrUnknownConfig indicates an unknown config for a resource. ErrUnknownConfig = NewError("unknown config for resource") // ErrNilPointer indicates something is a nil pointer. ErrNilPointer = NewError("found a nil pointer") // ErrOperation is returned within an operation. ErrOperation = NewError("in an operation") // ErrBadDeviceConfig indicates a bad device config. ErrBadDeviceConfig = NewError("bad config for device") // ErrDependencyNotEnsured indicates a dependency is not ensured. ErrDependencyNotEnsured = NewError("dependency not ensured") // ErrDisconnected indicates an operation was attempted on a disconnected client. ErrDisconnected = NewError("client is not connected") // ErrConnectionFailed indicates a connection attempt failed. ErrConnectionFailed = NewError("connection failed") // ErrServerNotListening indicates the Incus server has no core.https_address // set. incus-compose copies cached images between projects using pull mode, // which needs the server reachable over the network. ErrServerNotListening = NewError("the incus server is not listening on the network (core.https_address is not set); incus-compose needs it for image caching, set it with `incus config set core.https_address=:8443`, see https://github.com/lxc/incus-compose/blob/main/docs/getting-started.md") // ErrServerTooOld indicates the Incus server has no oci_network_config API, // which every compose network attachment needs. ErrServerTooOld = NewError("the incus server has no oci_network_config API, incus-compose needs Incus 7.0.1 (LTS) or 7.2 and newer") // ErrAborted indicates an operation was aborted (e.g., by BeforeAny hook). ErrAborted = NewError("operation aborted") // ErrNotFound indicates a resource was not found. ErrNotFound = NewError("resource not found") // ErrNotEnsured indicates an operation requires the resource to be ensured first. ErrNotEnsured = NewError("resource not ensured").WithSeverity(SeverityWarn) // ErrImageRequired indicates an instance requires an image. ErrImageRequired = NewError("instances without an image are not yet supported") // ErrUnknownResource indicates an unknown resource kind. ErrUnknownResource = NewError("unknown resource kind") // ErrInvalidFormat indicates invalid format or syntax. ErrInvalidFormat = NewError("invalid format") // ErrImageSource indicates an image source error. ErrImageSource = NewError("image source error") // ErrDeviceConflict indicates a device name conflict. ErrDeviceConflict = NewError("device conflict") // ErrVolumeMismatch indicates volume configuration mismatch. ErrVolumeMismatch = NewError("volume configuration mismatch") // ErrCreate indicates a resource creation error. ErrCreate = NewError("create failed") // ErrDelete indicates a resource deletion error. ErrDelete = NewError("delete failed") )
var ErrDNSWatcher = NewError("DNSWatcher")
ErrDNSWatcher is used as wrapper to indicate an error happened in the DNSWatcher.
var WellKnownRegistries = map[string]string{
"ghcr.io": "https://ghcr.io",
"docker.io": "https://docker.io",
"mcr.microsoft.com": "https://mcr.microsoft.com",
"quay.io": "https://quay.io",
"registry.gitlab.com": "https://registry.gitlab.com",
"codeberg.org": "https://codeberg.org",
}
WellKnownRegistries maps well-known OCI registry domains to their server URLs. An image from one of these resolves without an `incus remote add` step.
Functions ¶
func DNSmasqParse ¶
DNSmasqParse parses a raw.dnsmasq value into its three parts: address records as a service->[]IP map, cname records as a target->[]alias map, and any other lines (e.g. user-supplied raw.dnsmasq content) verbatim.
func DialRemote ¶ added in v1.2.0
func DialRemote(path string, remote string) (*iclient.Connection, error)
DialRemote connects to a remote of the Incus CLI configuration at path. An empty path is the default location, an empty remote the default remote.
func RandString ¶
RandString is a helper that creates a random string for the given size (n). It is from https://stackoverflow.com/a/31832326 -- RandStringBytesMaskImprSrcSB.
func SanitizeIncusName ¶
SanitizeIncusName converts a string to a valid Incus instance name. Converts to lowercase, replaces special chars and underscores with hyphens. Names exceeding 63 chars are replaced with a 32-char hex hash for DNS compatibility.
func SanitizeNetworkName ¶
SanitizeNetworkName generates a network interface name from project and network name. Returns a deterministic, unique name that fits within Linux interface name limits.
func SanitizeProjectName ¶
SanitizeProjectName converts a string to a valid Incus project name. Replaces underscores with hyphens and removes special characters via slug.
func SupportsAction ¶
SupportsAction returns if the Resource supports the action.
Types ¶
type BaseResource ¶
type BaseResource struct {
// contains filtered or unexported fields
}
BaseResource provides common fields for all Incus resources.
func NewBaseResource ¶
func NewBaseResource(kind Kind, name string, priority int) *BaseResource
NewBaseResource creates a new BaseResource.
func (*BaseResource) Priority ¶
func (r *BaseResource) Priority() int
Priority returns the resource priority.
type BuildConfig ¶
type BuildConfig struct {
// Context is the build context directory (absolute path).
Context string
// Dockerfile is an optional path to the Containerfile/Dockerfile, passed to
// the builder verbatim, so a relative path resolves against the process
// working directory rather than Context. Empty means the builder uses its
// default (Containerfile or Dockerfile in Context).
Dockerfile string
// DockerfileInline is inline Dockerfile content from compose build.dockerfile_inline.
DockerfileInline string
// Target is the Dockerfile stage to build.
Target string
// Platform is the OCI platform to build for, for example linux/amd64.
Platform string
// Args are build-time variables (--build-arg).
Args map[string]string
// NoCache disables layer caching during the build as well as caching
// the resulting image on the server.
NoCache bool
// Pull always attempts to pull a newer version of the base image.
Pull bool
}
BuildConfig holds the parameters read from a compose service's build: block.
type BuildInfo ¶
type BuildInfo struct {
// Mode controls rebuild behavior.
Mode BuildMode
// PreferredBuilder is the container builder binary name or absolute path.
// Empty means auto-detect (tries podman, then docker).
PreferredBuilder string
}
BuildInfo carries the rebuild mode and optional builder selection for ActionEnsure.
type BuildMode ¶
type BuildMode int
BuildMode controls how build-configured images are treated during Ensure.
type Client ¶
type Client struct {
// contains filtered or unexported fields
}
Client wraps a project-scoped Incus client with resource management.
func NewOfflineClient ¶
NewOfflineClient creates a disconnected project client for resource planning. It can create in-memory resources, but cannot run Incus operations.
func (*Client) AddHookAfter ¶
func (c *Client) AddHookAfter(hook func(ctx context.Context, action Action, r Resource, args Options, err error) error)
AddHookAfter adds a hook that will be executed after any action (LIFO order).
func (*Client) AddHookBefore ¶
func (c *Client) AddHookBefore(hook func(ctx context.Context, action Action, r Resource, args Options, err error) error)
AddHookBefore adds a hook that will be executed before any action. You may use it for abort control.
func (*Client) AddHookConnected ¶
AddHookConnected adds a hook that will be executed when the client connects (FIFO order).
func (*Client) AddHookDone ¶
AddHookDone adds a hook that will be executed when the client's work is complete (LIFO order).
func (*Client) Clone ¶
Clone returns a copy of the client, where you can add independent hooks and resources. Resources are NOT shared.
func (*Client) Config ¶
func (c *Client) Config() ClientConfig
Config returns a copy of the clients config.
func (*Client) Connection ¶
func (c *Client) Connection() (*iclient.Connection, error)
Connection returns the project-scoped Incus connection, safe for concurrent use.
func (*Client) FindHealthd ¶
FindHealthd returns the name of the healthd instance in the project, identified by user.healthcheck.daemon=true.
func (*Client) Global ¶
func (c *Client) Global() *GlobalClient
Global returns the GlobalClient associated with this project client.
func (*Client) GlobalConnection ¶
func (c *Client) GlobalConnection() (*iclient.Connection, error)
GlobalConnection returns the global incus connection (with the default project).
func (*Client) HealthdRunning ¶ added in v1.2.0
HealthdRunning reports whether the daemon watching this project is up, looking wherever the project's stored scope says it lives.
func (*Client) IgnoreError ¶
IgnoreError ignores an "warning" errors for the given kind and the rest of the session.
func (*Client) IncusProject ¶
IncusProject returns the sanitized Incus project name.
func (*Client) InstanceExists ¶
InstanceExists reports whether an instance with the given name exists in Incus.
func (*Client) IsConnected ¶
IsConnected reports whether the project client can run Incus operations.
func (*Client) IsDebugging ¶
IsDebugging returns if debugging is enabled.
func (*Client) Open ¶
Open fires the connected hooks. Call once after registering all hooks, before running any stack actions.
func (*Client) RegisterDNSWatcher ¶
RegisterDNSWatcher wires service-name DNS records into the project's managed networks via the client lifecycle hooks. On each instance create/start/stop/ delete it reads raw.dnsmasq from Incus, updates only the records for services seen in this run (identified via IncusName), preserves all other records, and writes back. Multiple projects can coexist in the same network without clobbering each other's records.
func (*Client) ResolveImageFingerprint ¶
ResolveImageFingerprint returns the first alias name for the given fingerprint, or the fingerprint itself if no alias is found or the lookup fails.
type ClientConfig ¶
type ClientConfig struct {
// URL is the Incus server URL to connect to.
URL string
// Logger to use within this client.
Logger *slog.Logger
// Stdout is the stdout writer to use.
Stdout io.Writer
// Stderr is the swappable stderr writer.
Stderr *SwapWriter
// NetworkPrefix is the prefix for new networks (default: "ic-").
NetworkPrefix string
// DefaultStoragePool is the storage pool to use for volumes (default: "default").
DefaultStoragePool string
// DescriptionFormat is the format string for resource descriptions (default: "incus-compose: %s").
DescriptionFormat string
// ProvidedConnection allows injecting an existing connection (for testing).
ProvidedConnection *iclient.Connection
// CacheProject is the project name to use as image cache.
// If set, the project will be created if it doesn't exist.
CacheProject string
// SystemProject is the project holding the instances the library runs.
SystemProject string
}
ClientConfig holds configuration options for the Client.
type ClientOption ¶
type ClientOption func(*ClientConfig)
ClientOption is a functional option for configuring the Client.
func ClientCacheProject ¶
func ClientCacheProject(n string) ClientOption
ClientCacheProject sets the project name to use as image cache.
func ClientDefaultStoragePool ¶
func ClientDefaultStoragePool(n string) ClientOption
ClientDefaultStoragePool sets the default storage pool name.
func ClientDescriptionFormat ¶
func ClientDescriptionFormat(n string) ClientOption
ClientDescriptionFormat sets the format string for resource descriptions.
func ClientLogger ¶
func ClientLogger(l *slog.Logger) ClientOption
ClientLogger sets the client to use within the created client.
func ClientNetworkPrefix ¶
func ClientNetworkPrefix(n string) ClientOption
ClientNetworkPrefix sets the prefix for network names.
func ClientProvideConnection ¶
func ClientProvideConnection(conn *iclient.Connection) ClientOption
ClientProvideConnection injects an existing Incus connection.
func ClientStderrWriter ¶ added in v1.1.0
func ClientStderrWriter(lw *SwapWriter) ClientOption
ClientStderrWriter sets the swappable writer.
func ClientStdout ¶ added in v1.1.0
func ClientStdout(w io.Writer) ClientOption
ClientStdout sets the clients stdout.
func ClientSystemProject ¶ added in v1.2.0
func ClientSystemProject(n string) ClientOption
ClientSystemProject sets the project holding the library's own instances.
type Config ¶
type Config interface {
GetConfig() any
}
Config is implemented by resource configuration types.
type DeleteAble ¶
DeleteAble is implemented by resources that can be deleted.
type EnsureAble ¶
type EnsureAble interface {
// Ensure fetches an existing Resource or creates a new one.
// If a Resource with the same name exists, it is returned.
Ensure(ctx context.Context, opts ...Option) error
}
EnsureAble is implemented by resources that can be ensured.
type EnsureProjectOption ¶
type EnsureProjectOption func(*ensureProjectOptions)
EnsureProjectOption is a functional option for configuring project creation.
func EnsureProjectWithConfig ¶
func EnsureProjectWithConfig(config map[string]string) EnsureProjectOption
EnsureProjectWithConfig sets configuration options to apply when creating the project. These options are merged with default features configuration.
func EnsureProjectWithCreate ¶
func EnsureProjectWithCreate() EnsureProjectOption
EnsureProjectWithCreate enables project creation if the project doesn't exist.
func EnsureProjectWithSkipHealthd ¶
func EnsureProjectWithSkipHealthd() EnsureProjectOption
EnsureProjectWithSkipHealthd skips as the name says any healthd calls.
type Error ¶
type Error struct {
// contains filtered or unexported fields
}
Error is a sentinel-based error type that supports context enrichment.
func (*Error) WithAction ¶
WithAction adds action context to the error.
func (*Error) WithKindName ¶
WithKindName adds resource kind and name context to the error.
func (*Error) WithResource ¶
WithResource adds resource context to the error.
func (*Error) WithSeverity ¶
WithSeverity returns a new error withe given severity.
type GlobalClient ¶
type GlobalClient struct {
// contains filtered or unexported fields
}
GlobalClient provides a high-level interface to Incus operations.
func New ¶
func New(ctx context.Context, opts ...ClientOption) *GlobalClient
New creates a new Client with the provided context and logger.
func NewTestClient ¶
func NewTestClient(ctx context.Context) (*GlobalClient, error)
NewTestClient creates a new GlobalClient for testing.
func (*GlobalClient) AddHookAfter ¶
func (c *GlobalClient) AddHookAfter(hook func(ctx context.Context, action Action, r Resource, args Options, err error) error)
AddHookAfter adds a hook that will be executed after any action (LIFO order).
func (*GlobalClient) AddHookBefore ¶
func (c *GlobalClient) AddHookBefore(hook func(ctx context.Context, action Action, r Resource, args Options, err error) error)
AddHookBefore adds a hook that will be executed before any action (FIFO order). You may use it for abort control.
func (*GlobalClient) AddMissingProjectConfig ¶ added in v1.2.0
func (c *GlobalClient) AddMissingProjectConfig(name string, config map[string]string) error
AddMissingProjectConfig adds declared config keys the project does not have yet.
func (*GlobalClient) CliConfig ¶
func (c *GlobalClient) CliConfig() *iclient.Config
CliConfig returns the CLI config for image server resolution.
func (*GlobalClient) Connect ¶
func (c *GlobalClient) Connect() error
Connect establishes a connection to the Incus server.
func (*GlobalClient) Connection ¶
func (c *GlobalClient) Connection() (*iclient.Connection, error)
Connection returns the connection scoped to the default project, safe for concurrent use.
func (*GlobalClient) ConnectionIPs ¶
func (c *GlobalClient) ConnectionIPs() ([]net.IP, error)
ConnectionIPs returns the IP of the current connection, this function is cached by GlobalClient.connectionIP.
func (*GlobalClient) DeleteProject ¶
func (c *GlobalClient) DeleteProject(name string, force bool) error
DeleteProject deletes a project and removes it from the cache.
func (*GlobalClient) EnsureProject ¶
func (c *GlobalClient) EnsureProject(name string, opts ...EnsureProjectOption) (*Client, error)
EnsureProject ensures a project exists and returns a Client for it. Options control whether the project is created if it doesn't exist and what config to apply.
func (*GlobalClient) HTTPSAddress ¶
func (c *GlobalClient) HTTPSAddress() (string, error)
HTTPSAddress returns the core.https_address of the incus server.
func (*GlobalClient) HasExtension ¶ added in v1.1.0
func (c *GlobalClient) HasExtension(ext string) bool
HasExtension returns whether the server has the given extension.
func (*GlobalClient) IsConnected ¶
func (c *GlobalClient) IsConnected() bool
IsConnected returns true if the client is connected.
func (*GlobalClient) IsDebugging ¶
func (c *GlobalClient) IsDebugging() bool
IsDebugging returns true if debug logging is enabled.
func (*GlobalClient) IsRemote ¶
func (c *GlobalClient) IsRemote() bool
IsRemote returns true if connected via network (not unix socket).
func (*GlobalClient) LogDebug ¶
func (c *GlobalClient) LogDebug(msg string, args ...any)
LogDebug logs a debug message. The `any` here is ok.
func (*GlobalClient) LogError ¶
func (c *GlobalClient) LogError(msg string, args ...any)
LogError logs an error. The `any` here is ok.
func (*GlobalClient) LogInfo ¶
func (c *GlobalClient) LogInfo(msg string, args ...any)
LogInfo logs an info message. The `any` here is ok.
func (*GlobalClient) LogWarn ¶
func (c *GlobalClient) LogWarn(msg string, args ...any)
LogWarn logs a warning. The `any` here is ok.
func (*GlobalClient) NetworkBridgeIPs ¶
func (c *GlobalClient) NetworkBridgeIPs(networkName string) (ipv4 []string, ipv6 []string, err error)
NetworkBridgeIPs returns the IPv4 and IPv6 bridge addresses of an Incus network. The addresses are returned without CIDR notation. Addresses for which the network config key is absent or set to "none" are omitted.
func (*GlobalClient) ProjectConfig ¶ added in v1.2.0
func (c *GlobalClient) ProjectConfig(name string) (map[string]string, error)
ProjectConfig returns the Incus project's config, empty if it does not exist.
func (*GlobalClient) ProjectsWithConfig ¶ added in v1.2.0
func (c *GlobalClient) ProjectsWithConfig(key, value string) ([]string, error)
ProjectsWithConfig returns the names of the Incus projects carrying key set to value.
func (*GlobalClient) SameHost ¶
func (c *GlobalClient) SameHost() error
SameHost returns nil of the connected incus and the current host share the same ip else an error.
func (*GlobalClient) SetOutputHandler ¶
func (c *GlobalClient) SetOutputHandler(handler func(action Action, r Resource, data []byte))
SetOutputHandler sets the handler for resource output (e.g., logs). The handler receives raw bytes - formatting is the caller's responsibility.
func (*GlobalClient) SetProgressHandler ¶
func (c *GlobalClient) SetProgressHandler(handler func(action Action, r Resource, args Options, p Progress))
SetProgressHandler sets the handler for live operation progress. Pass nil to disable. Operations run in parallel, so the handler may be called concurrently and must be safe for concurrent use.
func (*GlobalClient) Stderr ¶ added in v1.1.0
func (c *GlobalClient) Stderr() io.Writer
Stderr returns this clients error output.
func (*GlobalClient) Stdout ¶ added in v1.1.0
func (c *GlobalClient) Stdout() io.Writer
Stdout returns this clients standard output.
func (*GlobalClient) SwapStderr ¶ added in v1.1.0
func (c *GlobalClient) SwapStderr(w io.Writer) io.Writer
SwapStderr redirects this client's log output to w.
type Image ¶
type Image struct {
*BaseResource
Config ImageConfig
// contains filtered or unexported fields
}
Image represents an OCI or native Incus image copied to the Incus image cache.
func (*Image) AddService ¶ added in v1.2.0
AddService records a compose service that uses this image. One image often serves several services, and Client.Resource hands them all the same object.
func (*Image) Ensure ¶
Ensure retrieves an existing image from cache or copies it if Create option is set. With the Pull option, a cached image is refreshed from its source registry. When ImageConfig.Build is set the image is built locally via podman/docker.
func (*Image) NativeIncus ¶
NativeIncus returns true if this is a native Incus image.
func (*Image) Size ¶
Size returns the total image size in bytes as reported by the source server, or 0 when unknown. It is resolved best-effort before a download starts.
func (*Image) State ¶ added in v1.2.0
func (r *Image) State() *ImageState
State returns the image state as of the last fetch. It is replaced whole, never written into, so the result stays consistent for as long as it is held.
type ImageConfig ¶
type ImageConfig struct {
// CacheClient is the project-scoped client to use as cache (for library
// users). Takes precedence over CacheProject.
CacheClient *Client
// CacheProject is the project name to use as cache (for CLI users).
// The project will be created if it doesn't exist.
// Ignored if CacheClient is set.
CacheProject string
// LockVolume names the storage volume in the cache project holding the
// per-alias locks. Empty means DefaultLockVolume.
LockVolume string
// Build, when set, marks this image as locally built rather than pulled
// from a registry. Ensure will shell out to podman/docker instead of
// calling CopyImage.
Build *BuildConfig
// A list of service dependencies for log output.
Services []string
}
ImageConfig contains the source and cache configuration for an image.
func (*ImageConfig) GetConfig ¶
func (c *ImageConfig) GetConfig() any
GetConfig returns the configuration.
type ImageState ¶ added in v1.2.0
type ImageState struct {
// IncusAlias is nil until the image is ensured.
IncusAlias *incusApi.ImageAliasesEntry
ETag string
// OCI metadata extracted from the image (empty/0 for native Incus images).
UID uint64
GID uint64
Entrypoint string
Cwd string
// Size is the total image size in bytes as reported by the source server,
// resolved best-effort before a download. 0 when unknown.
Size int64
}
ImageState is what the last fetch read back from Incus.
type Instance ¶
type Instance struct {
*BaseResource
Config InstanceConfig
// contains filtered or unexported fields
}
Instance represents an Incus container or virtual machine.
func (*Instance) Created ¶
Created returns true if the instance was created during the last Ensure call.
func (*Instance) Ensure ¶
Ensure retrieves an existing instance or creates a new one if args.Create is true.
func (*Instance) MarkDelete ¶
func (r *Instance) MarkDelete()
MarkDelete marks a instance to be deleted after Ensure(), this is for down scaling instances.
func (*Instance) PushFiles ¶
PushFiles pushes files into the instance over the instance's SFTP endpoint.
func (*Instance) ServiceName ¶
ServiceName returns the compose service name which has been set by the config.
func (*Instance) SetHealthCheckingStopped ¶
SetHealthCheckingStopped writes the user.healthcheck.stopped marker, which tells ic-healthd a stop was deliberate. The status is ic-healthd's alone.
func (*Instance) State ¶ added in v1.2.0
func (r *Instance) State() *InstanceState
State returns the instance state as of the last fetch. It is replaced whole, never written into, so the result stays consistent for as long as it is held.
func (*Instance) WaitIPs ¶
WaitIPs polls the instance state until each attached NIC reports its expected global addresses (IPv4 always, IPv6 too unless the network or this NIC's own attachment disables it) or the timeout elapses. A freshly started container may not have its DHCP lease(s) yet, so this gives it time. On timeout it returns an error: DNSWatcher registers an AAAA-equivalent record for any address family it waited for, so a missing one must not pass silently.
type InstanceConfig ¶
type InstanceConfig struct {
// ServiceName represents the compose service name.
ServiceName string
// Type is the instance type (container or VM).
Type incusApi.InstanceType
// Full fetches the full instance.
Full bool
// Image is the OCI image to create the instance from.
Image string
// Ensured Resources that this instance depends on.
Resources []Resource
// Devices are devices attached before instance creation (networks, proxies).
Devices []InstanceDevice
// Files are files pushed into the instance after creation.
// Map key is the target path in the instance.
Files []InstanceFile
// Extensions contains Incus instance configuration options.
Extensions map[string]string
// ExtraDevices contains additional raw device configurations.
ExtraDevices map[string]map[string]string
// NoRootDevice takes the root disk from the instance's profile instead.
NoRootDevice bool
// Dependencies maps dependency Incus instance names to the required health
// status (HealthStatusHealthy, HealthStatusStarting, HealthStatusUnhealthy).
// Instance.Start() blocks until all dependencies reach the required status.
Dependencies map[string]string
// Priority if set sets the instance priority to this instead PriorityInstance.
Priority int
// Entrypoint overrides the image entrypoint (compose `entrypoint:`). Nil
// means unset; a non-nil value discards the image's default command.
Entrypoint []string
// Command overrides the image command (compose `command:`).
Command []string
// UID if not 0 use that value else use the user id from the image.
UID uint64
// GID if not 0 use that value else use the user id from the image.
GID uint64
}
InstanceConfig configures instance creation.
func (*InstanceConfig) GetConfig ¶
func (c *InstanceConfig) GetConfig() any
GetConfig returns the configuration.
type InstanceDevice ¶
type InstanceDevice struct {
// Name is the device name.
Name string
// Config holds the device configuration.
Config InstanceDeviceConfig
}
InstanceDevice represents an instance device configuration.
func (*InstanceDevice) ToIncusDevice ¶
func (d *InstanceDevice) ToIncusDevice() (string, map[string]string, error)
ToIncusDevice converts the device to Incus API format. Returns the device name and configuration map.
type InstanceDeviceConfig ¶
type InstanceDeviceConfig struct {
// DeviceType identifies the device type (nic, disk, proxy, tmpfs).
DeviceType string
// Network is the network resource for nic devices (compose-managed).
Network Resource
// NetworkName is a raw Incus network name for nic devices that reference an
// existing bridge directly, without a compose-managed Resource.
// Only one of Network or NetworkName should be set.
NetworkName string
// Proxy contains proxy device configuration.
Proxy InstanceDeviceProxyConfig
// Disk contains disk device configuration.
Disk InstanceDeviceDiskConfig
// Tmpfs contains tmpfs device configuration.
Tmpfs InstanceDeviceTmpfsConfig
// Extensions contains direct device configuration options. For a raw device
// (unknown DeviceType) it holds the entire device config; for a typed device
// it holds extra keys merged over the generated config.
Extensions map[string]string
}
InstanceDeviceConfig configures an instance device.
type InstanceDeviceDiskConfig ¶
type InstanceDeviceDiskConfig struct {
StorageVolumeConfig *StorageVolumeConfig
// Source is the volume name or host path.
Source string
// Path is the mount point inside the instance.
Path string
// Shift enables UID/GID shifting for the mount.
Shift bool
// ReadOnly makes the mount read-only.
ReadOnly bool
}
InstanceDeviceDiskConfig configures a disk device (volume or bind mount).
type InstanceDeviceProxyConfig ¶
type InstanceDeviceProxyConfig struct {
// ListenType is the protocol type for the listen side (e.g., "tcp").
ListenType string
// ListenAddr is the address to listen on.
ListenAddr string
// ListenPort is the port to listen on.
ListenPort uint32
// ConnectType is the protocol type for the connect side (e.g., "tcp").
ConnectType string
// ConnectAddr is the address to connect to.
ConnectAddr string
// ConnectPort is the port to connect to.
ConnectPort uint32
// Nat enables NAT mode for the proxy.
Nat bool
}
InstanceDeviceProxyConfig configures a proxy device for port forwarding.
type InstanceDeviceTmpfsConfig ¶
type InstanceDeviceTmpfsConfig struct {
// Path is the mount point inside the instance.
Path string
// Size is the optional size limit in bytes.
Size string
}
InstanceDeviceTmpfsConfig configures a tmpfs device.
type InstanceFile ¶
type InstanceFile struct {
Target string
// Give either "File", "Content" or "Reader"
File string
Content io.ReadSeekCloser
UID int64 // Uses oci.uid if -1 has been given.
GID int64 // Uses oci.gid if -1 has been given.
Mode int
NoMKDir bool
DirMode int
Overwrite bool
}
InstanceFile represents a file to push to an instance after creation.
type InstanceState ¶ added in v1.2.0
type InterfaceIPs ¶
InterfaceIPs represents interface ips.
type Network ¶
type Network struct {
*BaseResource
Config NetworkConfig
// CNames is a map of cnames indexed by target.
CNames map[string][]string
// contains filtered or unexported fields
}
Network represents an Incus bridge network.
func (*Network) Created ¶
Created returns true if the network was created during the last Ensure call.
func (*Network) Delete ¶
Delete removes the network from Incus. External networks are never deleted.
func (*Network) Ensure ¶
Ensure retrieves an existing network or creates a new one if args.Create is true.
func (*Network) IsEnsured ¶
IsEnsured returns true if the network state has been fetched from Incus.
func (*Network) State ¶ added in v1.2.0
func (r *Network) State() *NetworkState
State returns the network state as of the last fetch. It is replaced whole, never written into, so the result stays consistent for as long as it is held.
type NetworkConfig ¶
type NetworkConfig struct {
// Type is the network type (default: "bridge").
Type string
// External marks the network as externally managed.
// External networks must already exist and won't be created or deleted.
External bool
// Extensions are Incus network config key-value pairs sourced from the
// x-incus compose extension. All entries pass through verbatim to the
// Incus network config on creation.
Extensions map[string]string
// OverrideName is the x-incus-compose.network override. For external networks
// it is probed raw then sanitized before falling back to the compose name.
OverrideName string
}
NetworkConfig configures network creation.
func (*NetworkConfig) GetConfig ¶
func (c *NetworkConfig) GetConfig() any
GetConfig returns the configuration.
type NetworkState ¶ added in v1.2.0
type NetworkState struct {
// IncusNetwork is nil until the network is ensured.
IncusNetwork *incusApi.Network
ETag string
}
NetworkState is what the last fetch read back from Incus.
type Option ¶
type Option func(o *Options)
Option configures action arguments.
func OptionBuild ¶
OptionBuild sets the build info for build-configured images (for ActionEnsure).
func OptionCreate ¶
func OptionCreate() Option
OptionCreate creates resources if they don't exist (for ActionEnsure).
func OptionDependencyTimeout ¶
OptionDependencyTimeout sets the max time to wait for dependency health checks. Falls back to OptionTimeout when zero.
func OptionExternalHealthd ¶
func OptionExternalHealthd() Option
OptionExternalHealthd indicates that we have an unmanaged healthd.
func OptionFollow ¶
func OptionFollow() Option
OptionFollow enables continuous streaming (for ActionLog).
func OptionForce ¶
func OptionForce() Option
OptionForce forces deletion/stop even if resource is in use.
func OptionNoHealthd ¶
func OptionNoHealthd() Option
OptionNoHealthd indicates that we dont use healthd features.
func OptionPull ¶
func OptionPull() Option
OptionPull forces cached images to refresh from their source registry (for ActionEnsure).
func OptionPullMode ¶ added in v1.2.0
OptionPullMode sets the pull policy for images (for ActionEnsure).
func OptionTimeout ¶
OptionTimeout sets the timeout for actions.
type Options ¶
type Options struct {
// Create resources if they don't exist (for ActionEnsure).
Create bool
// Force deletion/stop even if resource is in use.
Force bool
// Timeout for actions (0 = default).
Timeout time.Duration
// DependencyTimeout is the max time to wait for dependency health checks.
// Falls back to Timeout when zero.
DependencyTimeout time.Duration
// Follow enables continuous streaming (for ActionLog).
Follow bool
// Pull is the pull policy for images (for ActionEnsure).
Pull PullMode
// Build controls rebuild behavior for build-configured images (for ActionEnsure).
Build BuildInfo
// Healthd indicates that we use healthd features.
Healthd bool
// ExternalHealthd indicates that we have an unmanaged healthd.
ExternalHealthd bool
}
Options holds arguments for resource actions.
func NewOptions ¶
NewOptions makes a ActionArgs struct from ActionO* options.
type PoolRunArgs ¶
type PoolRunArgs struct {
// FailFast stops processing on first error (default: true).
FailFast bool
}
PoolRunArgs contains options for WorkerPool.Run.
type Profile ¶
type Profile struct {
*BaseResource
Config ProfileConfig
// contains filtered or unexported fields
}
Profile represents an Incus profile resource.
func (*Profile) Created ¶
Created returns true if the profile was created during the last Ensure call.
func (*Profile) Ensure ¶
Ensure retrieves an existing resource or creates a new one if args.Create is true.
func (*Profile) IsEnsured ¶
IsEnsured returns true if the profile state has been fetched from Incus.
func (*Profile) State ¶ added in v1.2.0
func (r *Profile) State() *ProfileState
State returns the profile state as of the last fetch. It is replaced whole, never written into, so the result stays consistent for as long as it is held.
type ProfileConfig ¶
type ProfileConfig struct {
// SourceServer is the Incus server to copy the profile from.
// If nil, uses the global Incus client.
SourceServer *iclient.Connection
// SourceProject is the project containing the source profile.
SourceProject string
// SourceProfile is the name of the profile to copy from.
SourceProfile string
// NetworkOnly copies only NIC devices from the source profile.
NetworkOnly bool
}
ProfileConfig configures profile creation from a source profile.
func (*ProfileConfig) GetConfig ¶
func (c *ProfileConfig) GetConfig() any
GetConfig returns the configuration.
type ProfileState ¶ added in v1.2.0
type ProfileState struct {
// IncusProfile is nil until the profile is ensured.
IncusProfile *incusApi.Profile
ETag string
}
ProfileState is what the last fetch read back from Incus.
type Progress ¶
type Progress struct {
// Percent is 0-100, or -1 when the operation reports no percentage.
Percent int
// Text is the raw status text from Incus, empty when none was reported.
Text string
}
Progress describes the live state of a long-running resource operation.
Native Incus images report a real percentage ("rootfs: 42% (3.10MB/s)"), so Percent is set. OCI image pulls only emit status text ("Retrieving OCI image from registry"); for those Percent is -1 and only Text is meaningful, because the registry download runs as an opaque skopeo subprocess with no byte or percentage feedback.
type PullMode ¶ added in v1.2.0
type PullMode int
PullMode controls when an image is refreshed from its source.
type Reader ¶
Reader wraps bytes.Reader to add a no-op Close.
func NewReaderFromBytes ¶
NewReaderFromBytes returns the given ClosingBufferReader from the given bytes.
type Resource ¶
type Resource interface {
// Kind returns the resource type identifier (e.g., "instance", "network").
Kind() Kind
// Name returns the user-facing resource name.
Name() string
// IncusName returns the sanitized name for incus.
IncusName() string
// Priority returns the creation/deletion priority for dependency ordering.
// Lower values are created first and deleted last.
Priority() int
// IsEnsured returns wherever the resource has been ensured.
IsEnsured() bool
// Created returns true if the resource was created during the last Ensure call.
// Returns false if the resource already existed or hasn't been ensured yet.
Created() bool
}
Resource defines the common interface for all Incus resources.
type ResourceStore ¶
type ResourceStore struct {
// contains filtered or unexported fields
}
ResourceStore provides storage for any BasicResource type.
func (*ResourceStore) Add ¶
func (s *ResourceStore) Add(r Resource)
Add appends a resource to the store.
func (*ResourceStore) Get ¶
func (s *ResourceStore) Get(kind Kind, name string, incus bool) Resource
Get retrieves a resource by kind and its name. Returns nil if not found.
func (*ResourceStore) Range ¶ added in v1.1.0
func (s *ResourceStore) Range(f func(r Resource))
Range runs a function on each resource with an active lock.
func (*ResourceStore) Remove ¶
func (s *ResourceStore) Remove(r Resource)
Remove removes a resource from the store by kind and name.
type Stack ¶
type Stack struct {
// contains filtered or unexported fields
}
Stack manages a collection of resource operations. Resources are executed in priority order with proper dependency handling.
func NewStack ¶
func NewStack(c *Client, opts ...StackOption) *Stack
NewStack creates a new Stack for the given project.
func (*Stack) Add ¶
Add appends resources to the stack, skipping nil and already-added pointers. Since Client.Resource() deduplicates by IncusName, pointer identity is the right key: the same resource object must not run twice in parallel.
func (*Stack) AddOrdered ¶
AddOrdered adds resources in the given order.
func (*Stack) ForAction ¶
ForAction returns a new stack with resources filtered for the given action.
func (*Stack) ForActionF ¶
ForActionF returns a new stack with resources filtered for the given action, it allows custom filtering with the filter hook.
func (*Stack) Run ¶
Run executes all tasks in priority order. Returns aggregated errors from all failed operations.
Image tasks are executed in parallel using a worker pool. All other tasks are executed sequentially to respect potential dependencies.
func (*Stack) SetOptions ¶
func (s *Stack) SetOptions(opts ...StackOption)
SetOptions allows you to override options for the current stack.
type StackOption ¶
type StackOption func(*StackOptions)
StackOption configures stack options.
func StackFailFast ¶
func StackFailFast() StackOption
StackFailFast instructs the stack to fail on first error.
func StackSortDescending ¶
func StackSortDescending() StackOption
StackSortDescending sorts resources in descending priority order.
func StackWorkers ¶
func StackWorkers(w int) StackOption
StackWorkers sets the number of parallel workers.
type StackOptions ¶
StackOptions configures stack execution.
type StackRunArgs ¶
type StackRunArgs struct {
Options
// Workers is the number of parallel workers per batch (default: 4).
Workers int
}
StackRunArgs holds arguments for Stack.Run().
type StorageVolume ¶
type StorageVolume struct {
*BaseResource
Config StorageVolumeConfig
// contains filtered or unexported fields
}
StorageVolume represents a custom storage volume with optional UID/GID shifting. Storage volumes provide persistent storage that can be attached to instances.
func (*StorageVolume) Created ¶
func (r *StorageVolume) Created() bool
Created returns true if the volume was created during the last Ensure call.
func (*StorageVolume) Delete ¶
func (r *StorageVolume) Delete(ctx context.Context, opts ...Option) error
Delete removes the storage volume from Incus.
func (*StorageVolume) Ensure ¶
func (r *StorageVolume) Ensure(ctx context.Context, opts ...Option) error
Ensure retrieves an existing storage volume or creates a new one if Create option is set.
func (*StorageVolume) IncusName ¶
func (r *StorageVolume) IncusName() string
IncusName returns the prefixed volume name used in Incus.
func (*StorageVolume) IsEnsured ¶
func (r *StorageVolume) IsEnsured() bool
IsEnsured returns true if the volume has been fetched/created.
func (*StorageVolume) Lock ¶ added in v1.2.0
func (r *StorageVolume) Lock(ctx context.Context, sc *sftp.Client, name string, stale time.Duration) (*VolumeLock, error)
Lock acquires the named advisory lock on the volume, blocking until it is held or ctx is done. The name may contain slashes; missing parent directories are created. A stale of 0 means the lock is never taken over and the holder does not refresh it. sc must stay open until Unlock is called - the acquire uses it, and when stale > 0 so does the heartbeat.
func (*StorageVolume) SFTP ¶ added in v1.2.0
SFTP returns a new SFTP connection to the volume. The caller closes it.
func (*StorageVolume) Start ¶
func (r *StorageVolume) Start(_ context.Context, _ ...Option) error
Start validates the storage volume.
func (*StorageVolume) State ¶ added in v1.2.0
func (r *StorageVolume) State() *StorageVolumeState
State returns the volume state as of the last fetch. It is replaced whole, never written into, so the result stays consistent for as long as it is held.
type StorageVolumeConfig ¶
type StorageVolumeConfig struct {
// Pool is the storage pool to create the volume in.
// Defaults to ClientProject.Config.DefaultStoragePool.
Pool string
// Shifted enables UID/GID shifting for the volume.
Shifted bool
// UID/GID for shifting ImageResource will overwrite this if given.
UID uint64
GID uint64
// ImageResource to take UID/GID from for shifting, only
// needed if shifting is true.
ImageResource Resource
// HostPath, when set, seeds the volume with the local directory contents on first creation.
HostPath string
// Extensions contains additional volume configuration options.
Extensions map[string]string
}
StorageVolumeConfig configures storage volume creation.
func (*StorageVolumeConfig) GetConfig ¶
func (c *StorageVolumeConfig) GetConfig() any
GetConfig returns the configuration.
type StorageVolumeState ¶ added in v1.2.0
type StorageVolumeState struct {
// IncusVolume is nil until the volume is ensured.
IncusVolume *incusApi.StorageVolume
ETag string
}
StorageVolumeState is what the last fetch read back from Incus.
type SwapWriter ¶ added in v1.1.0
type SwapWriter struct {
// contains filtered or unexported fields
}
SwapWriter is an io.Writer whose destination can be swapped at runtime.
func NewSwapWriter ¶ added in v1.1.0
func NewSwapWriter(w io.Writer) *SwapWriter
NewSwapWriter creates a LogWriter initially writing to w.
type VolumeLock ¶ added in v1.2.0
type VolumeLock struct {
// contains filtered or unexported fields
}
VolumeLock is an advisory lock on a file inside a StorageVolume; release it with Unlock.
func (*VolumeLock) Unlock ¶ added in v1.2.0
func (l *VolumeLock) Unlock() error
Unlock releases the lock, deleting the lock file only if it still names this holder as owner - a stale takeover may have replaced it, and deleting unconditionally would delete the new holder's lock instead. It does not close sc; the caller that passed it to Lock owns it.
type WorkerPool ¶
type WorkerPool struct {
// contains filtered or unexported fields
}
WorkerPool executes tasks concurrently with a limited number of workers.
func NewWorkerPool ¶
func NewWorkerPool(workers int) *WorkerPool
NewWorkerPool creates a new WorkerPool with the specified number of workers.
func (*WorkerPool) Run ¶
func (p *WorkerPool) Run(args PoolRunArgs) error
Run executes all submitted tasks using the worker pool. With FailFast it returns the first error without waiting for the remaining tasks; otherwise it waits for all tasks and returns their aggregated errors.
func (*WorkerPool) Submit ¶
func (p *WorkerPool) Submit(fn func() error)
Submit adds a task to the pool.
Source Files
¶
- build.go
- client.go
- client_dnswatcher.go
- client_events.go
- doc.go
- errors.go
- global_client.go
- interfaces.go
- names.go
- pool.go
- randstring.go
- resource.go
- resource_image.go
- resource_instance.go
- resource_instance_device.go
- resource_network.go
- resource_profile.go
- resource_storage_volume.go
- resource_storage_volume_lock.go
- stack.go
- wellknown.go