provider

package
v1.1.0 Latest Latest
Warning

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

Go to latest
Published: Aug 23, 2026 License: AGPL-3.0 Imports: 60 Imported by: 0

Documentation

Index

Constants

View Source
const (
	DefaultProjectDescription = "This project was created automatically by garm to be used for github ephemeral action runners."
	DefaultProjectName        = "garm-project"
)
View Source
const IncusSDKVersion = "v7.3.0"

Variables

View Source
var (
	DefaultToolFetch      ToolFetchFunc      = util.GetTools
	DefaultGetCloudconfig GetCloudConfigFunc = cloudconfig.GetCloudConfig
)
View Source
var Commit = "unknown"
View Source
var Version = "v0.0.0-unknown"

Functions

This section is empty.

Types

type CompatibilityProbe

type CompatibilityProbe struct {
	Compatible           bool     `json:"compatible"`
	Project              string   `json:"project"`
	Profile              string   `json:"profile"`
	ImageAlias           string   `json:"image_alias"`
	ImageFingerprint     string   `json:"image_fingerprint"`
	IncusSDKVersion      string   `json:"incus_sdk_version"`
	VisibleInstanceCount int      `json:"visible_instance_count"`
	VisibleInstances     []string `json:"visible_instances"`
	CacheDeliveryReady   bool     `json:"cache_delivery_ready"`
	CacheRole            string   `json:"cache_role,omitempty"`
}

type GetCloudConfigFunc

type GetCloudConfigFunc func(bootstrapParams commonParams.BootstrapInstance, tools commonParams.RunnerApplicationDownload, runnerName string) (string, error)

type Incus

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

func NewIncusProvider

func NewIncusProvider(configFile, controllerID string) (*Incus, error)

func (*Incus) CreateInstance

func (l *Incus) CreateInstance(ctx context.Context, bootstrapParams commonParams.BootstrapInstance) (result commonParams.ProviderInstance, err error)

CreateInstance creates a new compute instance in the provider.

func (*Incus) DeleteInstance

func (l *Incus) DeleteInstance(ctx context.Context, instance string) (err error)

Delete instance will delete the instance in a provider.

func (*Incus) DrainWarm

func (l *Incus) DrainWarm(ctx context.Context, flavor, instanceName string, apply bool) (WarmDrainResult, error)

DrainWarm authorizes and optionally deletes one exact, never-assigned warm instance through the normal diagnostic and journal-aware teardown path. The caller must close manager admission and prove zero claims before apply; the metadata checks below independently prevent a job VM from entering the path.

func (*Incus) GetInstance

func (l *Incus) GetInstance(ctx context.Context, instanceName string) (commonParams.ProviderInstance, error)

GetInstance will return details about one instance.

func (*Incus) GetVersion

func (l *Incus) GetVersion(ctx context.Context) string

GetVersion returns the version of the provider.

func (*Incus) ListInstances

func (l *Incus) ListInstances(ctx context.Context, poolID string) ([]commonParams.ProviderInstance, error)

ListInstances will list all instances for a provider.

func (*Incus) Probe

func (l *Incus) Probe(ctx context.Context, profile string) (CompatibilityProbe, error)

Probe performs the same read-only API calls needed before GARM can create a worker. It intentionally does not touch the admission journal or mutate Incus, and is run as the production garm user during deployment.

func (*Incus) ReconcileMaintenanceLeases

func (l *Incus) ReconcileMaintenanceLeases(ctx context.Context, apply bool) (providerjournal.MaintenanceReconcileResult, error)

func (*Incus) ReconcileWarm

func (l *Incus) ReconcileWarm(ctx context.Context, flavor string, apply bool) (WarmPoolResult, error)

ReconcileWarm converges one pool toward its configured unregistered ready target. It never creates GitHub registration state and never reuses a VM after the provider has durably claimed it for a job.

func (*Incus) RemoveAllInstances

func (l *Incus) RemoveAllInstances(ctx context.Context) error

RemoveAllInstances will remove all instances created by this provider.

func (*Incus) Start

func (l *Incus) Start(ctx context.Context, instance string) error

Start boots up an instance.

func (*Incus) Stop

func (l *Incus) Stop(ctx context.Context, instance string, force bool) error

Stop shuts down the instance.

type InstanceServerInterface

type InstanceServerInterface interface {
	GetProject(string) (*api.Project, string, error)
	UseProject(string) incus.InstanceServer
	GetProfileNames() ([]string, error)
	CreateInstance(api.InstancesPost) (incus.Operation, error)
	UpdateInstanceState(string, api.InstanceStatePut, string) (incus.Operation, error)
	GetInstanceFull(string) (*api.InstanceFull, string, error)
	UpdateInstance(string, api.InstancePut, string) (incus.Operation, error)
	CreateInstanceFile(string, string, incus.InstanceFileArgs) error
	GetInstanceFile(string, string) (io.ReadCloser, *incus.InstanceFileResponse, error)
	DeleteInstance(string) (incus.Operation, error)
	GetInstancesFull(api.InstanceType) ([]api.InstanceFull, error)
	GetImageAliasArchitectures(string, string) (map[string]*api.ImageAliasesEntry, error)
	GetImage(string) (*api.Image, string, error)
	// Cluster shape. A fleet that spans hosts answers admission from every
	// member's state, not from whichever machine happens to run the provider.
	GetServer() (*api.Server, string, error)
	GetClusterMembers() ([]api.ClusterMember, error)
	GetClusterMemberState(string) (*api.ClusterMemberState, string, error)
}

type MockIncusServer

type MockIncusServer struct {
	mock.Mock
}

func (*MockIncusServer) CreateInstance

func (m *MockIncusServer) CreateInstance(instance api.InstancesPost) (op incus.Operation, err error)

func (*MockIncusServer) CreateInstanceFile

func (m *MockIncusServer) CreateInstanceFile(name, path string, file incus.InstanceFileArgs) error

func (*MockIncusServer) DeleteInstance

func (m *MockIncusServer) DeleteInstance(name string) (op incus.Operation, err error)

func (*MockIncusServer) GetClusterMemberState

func (m *MockIncusServer) GetClusterMemberState(name string) (state *api.ClusterMemberState, ETag string, err error)

func (*MockIncusServer) GetClusterMembers

func (m *MockIncusServer) GetClusterMembers() (members []api.ClusterMember, err error)

func (*MockIncusServer) GetImage

func (m *MockIncusServer) GetImage(name string) (image *api.Image, ETag string, err error)

func (*MockIncusServer) GetImageAliasArchitectures

func (m *MockIncusServer) GetImageAliasArchitectures(imageType string, name string) (entries map[string]*api.ImageAliasesEntry, err error)

func (*MockIncusServer) GetInstanceFile

func (m *MockIncusServer) GetInstanceFile(name, path string) (io.ReadCloser, *incus.InstanceFileResponse, error)

func (*MockIncusServer) GetInstanceFull

func (m *MockIncusServer) GetInstanceFull(name string) (instance *api.InstanceFull, ETag string, err error)

func (*MockIncusServer) GetInstancesFull

func (m *MockIncusServer) GetInstancesFull(instanceType api.InstanceType) (instances []api.InstanceFull, err error)

func (*MockIncusServer) GetProfileNames

func (m *MockIncusServer) GetProfileNames() (profiles []string, err error)

func (*MockIncusServer) GetProject

func (m *MockIncusServer) GetProject(name string) (project *api.Project, ETag string, err error)

func (*MockIncusServer) GetServer

func (m *MockIncusServer) GetServer() (server *api.Server, ETag string, err error)

func (*MockIncusServer) UpdateInstance

func (m *MockIncusServer) UpdateInstance(name string, instance api.InstancePut, etag string) (op incus.Operation, err error)

func (*MockIncusServer) UpdateInstanceState

func (m *MockIncusServer) UpdateInstanceState(name string, state api.InstanceStatePut, ETag string) (op incus.Operation, err error)

func (*MockIncusServer) UseProject

func (m *MockIncusServer) UseProject(name string) (client incus.InstanceServer)

type MockOperation

type MockOperation struct {
	mock.Mock
}

func (*MockOperation) AddHandler

func (m *MockOperation) AddHandler(handler func(api.Operation)) (target *incus.EventTarget, err error)

func (*MockOperation) Cancel

func (m *MockOperation) Cancel() error

func (*MockOperation) Get

func (m *MockOperation) Get() api.Operation

func (*MockOperation) GetWebsocket

func (m *MockOperation) GetWebsocket(secret string) (conn *websocket.Conn, err error)

func (*MockOperation) Refresh

func (m *MockOperation) Refresh() error

func (*MockOperation) RemoveHandler

func (m *MockOperation) RemoveHandler(target *incus.EventTarget) error

func (*MockOperation) Wait

func (o *MockOperation) Wait() error

func (*MockOperation) WaitContext

func (m *MockOperation) WaitContext(ctx context.Context) error

type WarmDrainResult

type WarmDrainResult struct {
	Applied  bool   `json:"applied"`
	Pool     string `json:"pool"`
	Instance string `json:"instance"`
	Deleted  bool   `json:"deleted"`
}

type WarmPoolResult

type WarmPoolResult struct {
	Applied           bool                `json:"applied"`
	Pool              string              `json:"pool"`
	TargetReady       int                 `json:"target_ready"`
	ReadyBefore       int                 `json:"ready_before"`
	ReadyAfter        int                 `json:"ready_after"`
	Preparing         int                 `json:"preparing"`
	Claimed           int                 `json:"claimed"`
	Deferred          bool                `json:"deferred"`
	DeferralReason    admission.Reason    `json:"deferral_reason,omitempty"`
	AdmissionDecision *admission.Decision `json:"admission_decision,omitempty"`
	Created           []string            `json:"created"`
	Promoted          []string            `json:"promoted"`
	DeletedExcess     []string            `json:"deleted_excess"`
}

Jump to

Keyboard shortcuts

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