Documentation
¶
Index ¶
- Constants
- Variables
- type CompatibilityProbe
- type GetCloudConfigFunc
- type Incus
- func (l *Incus) CreateInstance(ctx context.Context, bootstrapParams commonParams.BootstrapInstance) (result commonParams.ProviderInstance, err error)
- func (l *Incus) DeleteInstance(ctx context.Context, instance string) (err error)
- func (l *Incus) DrainWarm(ctx context.Context, flavor, instanceName string, apply bool) (WarmDrainResult, error)
- func (l *Incus) GetInstance(ctx context.Context, instanceName string) (commonParams.ProviderInstance, error)
- func (l *Incus) GetVersion(ctx context.Context) string
- func (l *Incus) ListInstances(ctx context.Context, poolID string) ([]commonParams.ProviderInstance, error)
- func (l *Incus) Probe(ctx context.Context, profile string) (CompatibilityProbe, error)
- func (l *Incus) ReconcileMaintenanceLeases(ctx context.Context, apply bool) (providerjournal.MaintenanceReconcileResult, error)
- func (l *Incus) ReconcileWarm(ctx context.Context, flavor string, apply bool) (WarmPoolResult, error)
- func (l *Incus) RemoveAllInstances(ctx context.Context) error
- func (l *Incus) Start(ctx context.Context, instance string) error
- func (l *Incus) Stop(ctx context.Context, instance string, force bool) error
- type InstanceServerInterface
- type MockIncusServer
- func (m *MockIncusServer) CreateInstance(instance api.InstancesPost) (op incus.Operation, err error)
- func (m *MockIncusServer) CreateInstanceFile(name, path string, file incus.InstanceFileArgs) error
- func (m *MockIncusServer) DeleteInstance(name string) (op incus.Operation, err error)
- func (m *MockIncusServer) GetClusterMemberState(name string) (state *api.ClusterMemberState, ETag string, err error)
- func (m *MockIncusServer) GetClusterMembers() (members []api.ClusterMember, err error)
- func (m *MockIncusServer) GetImage(name string) (image *api.Image, ETag string, err error)
- func (m *MockIncusServer) GetImageAliasArchitectures(imageType string, name string) (entries map[string]*api.ImageAliasesEntry, err error)
- func (m *MockIncusServer) GetInstanceFile(name, path string) (io.ReadCloser, *incus.InstanceFileResponse, error)
- func (m *MockIncusServer) GetInstanceFull(name string) (instance *api.InstanceFull, ETag string, err error)
- func (m *MockIncusServer) GetInstancesFull(instanceType api.InstanceType) (instances []api.InstanceFull, err error)
- func (m *MockIncusServer) GetProfileNames() (profiles []string, err error)
- func (m *MockIncusServer) GetProject(name string) (project *api.Project, ETag string, err error)
- func (m *MockIncusServer) GetServer() (server *api.Server, ETag string, err error)
- func (m *MockIncusServer) UpdateInstance(name string, instance api.InstancePut, etag string) (op incus.Operation, err error)
- func (m *MockIncusServer) UpdateInstanceState(name string, state api.InstanceStatePut, ETag string) (op incus.Operation, err error)
- func (m *MockIncusServer) UseProject(name string) (client incus.InstanceServer)
- type MockOperation
- func (m *MockOperation) AddHandler(handler func(api.Operation)) (target *incus.EventTarget, err error)
- func (m *MockOperation) Cancel() error
- func (m *MockOperation) Get() api.Operation
- func (m *MockOperation) GetWebsocket(secret string) (conn *websocket.Conn, err error)
- func (m *MockOperation) Refresh() error
- func (m *MockOperation) RemoveHandler(target *incus.EventTarget) error
- func (o *MockOperation) Wait() error
- func (m *MockOperation) WaitContext(ctx context.Context) error
- type ToolFetchFunc
- type WarmDrainResult
- type WarmPoolResult
Constants ¶
const ( DefaultProjectDescription = "This project was created automatically by garm to be used for github ephemeral action runners." DefaultProjectName = "garm-project" )
const IncusSDKVersion = "v7.3.0"
Variables ¶
var ( DefaultToolFetch ToolFetchFunc = util.GetTools DefaultGetCloudconfig GetCloudConfigFunc = cloudconfig.GetCloudConfig )
var Commit = "unknown"
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 (*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 ¶
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 ¶
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 ¶
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 ¶
RemoveAllInstances will remove all instances created by this provider.
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 ¶
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) 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 (*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 ¶
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 ToolFetchFunc ¶
type ToolFetchFunc func(osType commonParams.OSType, osArch commonParams.OSArch, tools []commonParams.RunnerApplicationDownload) (commonParams.RunnerApplicationDownload, error)
type WarmDrainResult ¶
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"`
}