ports

package
v0.6.2 Latest Latest
Warning

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

Go to latest
Published: Jan 25, 2024 License: MPL-2.0 Imports: 5 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type Collection

type Collection struct {
	Repo              MicroVMRepository
	MicrovmProviders  map[string]MicroVMService
	EventService      EventService
	IdentifierService IDService
	NetworkService    NetworkService
	ImageService      ImageService
	DiskService       DiskService
	FileSystem        afero.Fs
	Clock             func() time.Time
}

type DeleteIfaceInput

type DeleteIfaceInput struct {
	// DeviceName is the name of the network interface to delete from the host.
	DeviceName string
}

type DiskCreateInput

type DiskCreateInput struct {
	//Path is the filesystem path of where to create the disk.
	Path string
	// Size is how big the disk should be. It uses human readable formats
	// such as 8Mb, 10Kb.
	Size string
	// VolumeName is the name to give to the volume.
	VolumeName string
	// Type is the type of disk to create.
	Type DiskType
	// Files are the files to create in the new disk.
	Files []DiskFile
	// Overwrite specifies if the image file already exists whether
	// we should overwrite it or return an error.
	Overwrite bool
}

DiskCreateInput are the input options for creating a disk.

type DiskFile

type DiskFile struct {
	// Path is the path in the disk image for the file.
	Path string
	// ContentBase64 is the content of the file encoded as base64.
	ContentBase64 string
}

DiskFile represents a file to create in a disk.

type DiskService

type DiskService interface {
	// Create will create a new disk.
	Create(ctx context.Context, input DiskCreateInput) error
}

DiskService is a port for a service that creates disk images.

type DiskType

type DiskType int

DiskType represents the type of disk.

const (
	// DiskTypeFat32 is a FAT32 compatible filesystem.
	DiskTypeFat32 DiskType = iota
	// DiskTypeISO9660 is an iso filesystem.
	DiskTypeISO9660
)

type EventEnvelope

type EventEnvelope struct {
	Timestamp time.Time
	Namespace string
	Topic     string
	Event     interface{}
}

type EventService

type EventService interface {
	// Publish will publish an event to a specific topic.
	Publish(ctx context.Context, topic string, eventToPublish interface{}) error
	// SubscribeTopic will subscribe to events on a named topic..
	SubscribeTopic(ctx context.Context, topic string) (ch <-chan *EventEnvelope, errs <-chan error)
	// SubscribeTopics will subscribe to events on a set of named topics.
	SubscribeTopics(ctx context.Context, topics []string) (ch <-chan *EventEnvelope, errs <-chan error)
	// Subscribe will subscribe to events on all topics
	Subscribe(ctx context.Context) (ch <-chan *EventEnvelope, errs <-chan error)
}

EventService is a port for a service that acts as a event bus.

type HasTime

type HasTime interface {
	SetClock(func() time.Time)
}

type IDService

type IDService interface {
	// GenerateRandom will create a random identifier.
	GenerateRandom() (string, error)
}

IDService is a port for a service for working with identifiers.

type IfaceCreateInput

type IfaceCreateInput struct {
	// DeviceName is the name of the network interface to create on the host.
	DeviceName string
	// Type is the type of network interface to create.
	Type models.IfaceType
	// MAC allows the specifying of a specific MAC address to use for the interface. If
	// not supplied a autogenerated MAC address will be used.
	MAC string
	// Attach indicates if this device should be attached to the parent bridge. Only applicable to TAP devices.
	Attach bool
	// BridgeName is the name of the bridge to attach to. Only if this is a tap device and attach is true.
	BridgeName string
}

type IfaceDetails

type IfaceDetails struct {
	// DeviceName is the name of the network interface created on the host.
	DeviceName string
	// Type is the type of network interface created.
	Type models.IfaceType
	// MAC is the MAC address of the created interface.
	MAC string
	// Index is the network interface index on the host.
	Index int
}

type ImageMountSpec

type ImageMountSpec struct {
	// ImageName is the name of the image to get.
	ImageName string
	// Owner is the name of the owner of the image.
	Owner string
	// Use is an indicator of what the image will be used for.
	Use models.ImageUse
	// OwnerUsageID is an identifier from the owner.
	OwnerUsageID string
}

ImageMountSpec is the declaration of an image that needs to be pulled and mounted.

type ImageService

type ImageService interface {
	// Pull will get (i.e. pull) the image for a specific owner.
	Pull(ctx context.Context, input *ImageSpec) error
	// PullAndMount will get (i.e. pull) the image for a specific owner and then
	// make it available via a mount point.
	PullAndMount(ctx context.Context, input *ImageMountSpec) ([]models.Mount, error)
	// Exists checks if the image already exists on the machine.
	Exists(ctx context.Context, input *ImageSpec) (bool, error)
	// IsMounted checks if the image is pulled and mounted.
	IsMounted(ctx context.Context, input *ImageMountSpec) (bool, error)
}

ImageService is a port for a service that interacts with OCI images.

type ImageSpec

type ImageSpec struct {
	// ImageName is the name of the image to get.
	ImageName string
	// Owner is the name of the owner of the image.
	Owner string
}

type MachineMetrics

type MachineMetrics interface {
	ToPrometheus() []byte
}

MachineMetrics is a metrics interface for providers.

type MicroVMCommandUseCases

type MicroVMCommandUseCases interface {
	// CreateMicroVM is a use case for creating a microvm.
	CreateMicroVM(ctx context.Context, mvm *models.MicroVM) (*models.MicroVM, error)
	// DeleteMicroVM is a use case for deleting a microvm.
	DeleteMicroVM(ctx context.Context, vmid string) error
}

MicroVMCommandUseCases is the interface for uses cases that are actions (a.k.a commands) against a microvm.

type MicroVMGRPCService

type MicroVMGRPCService interface {
	mvmv1.MicroVMServer
}

MicroVMGRPCService is a port for a microvm grpc service.

type MicroVMQueryUseCases

type MicroVMQueryUseCases interface {
	// GetMicroVM is a use case for getting details of a specific microvm.
	GetMicroVM(ctx context.Context, vmid string) (*models.MicroVM, error)
	// GetAllMicroVM is a use case for getting details of all microvms in a given namespace.
	GetAllMicroVM(ctx context.Context, query models.ListMicroVMQuery) ([]*models.MicroVM, error)
}

MicroVMQueryUseCases is the interface for uses cases that are queries for microvms.

type MicroVMRepository

type MicroVMRepository interface {
	// Save will save the supplied microvm spec.
	Save(ctx context.Context, microvm *models.MicroVM) (*models.MicroVM, error)
	// Delete will delete the supplied microvm.
	Delete(ctx context.Context, microvm *models.MicroVM) error
	// Get will get the microvm spec with the given name/namespace.
	Get(ctx context.Context, options RepositoryGetOptions) (*models.MicroVM, error)
	// GetAll will get a list of microvm details. If namespace is an empty string all
	// details of microvms will be returned.
	GetAll(ctx context.Context, query models.ListMicroVMQuery) ([]*models.MicroVM, error)
	// Exists checks to see if the microvm spec exists in the repo.
	Exists(ctx context.Context, vmid models.VMID) (bool, error)
	// ReleaseLease will release the supplied lease.
	ReleaseLease(ctx context.Context, microvm *models.MicroVM) error
}

MicroVMRepository is the port definition for a microvm repository.

type MicroVMService

type MicroVMService interface {
	// Capabilities returns a list of the capabilities the provider supports.
	Capabilities() models.Capabilities

	// Create will create a new microvm.
	Create(ctx context.Context, vm *models.MicroVM) error
	// Delete will delete a VM and its runtime state.
	Delete(ctx context.Context, id string) error
	// Start will start a created microvm.
	Start(ctx context.Context, vm *models.MicroVM) error
	// State returns the state of a microvm.
	State(ctx context.Context, id string) (MicroVMState, error)
	// Metrics returns with the metrics of a microvm.
	Metrics(ctx context.Context, id models.VMID) (MachineMetrics, error)
}

MicroVMService is the port definition for a microvm service.

type MicroVMState

type MicroVMState string

This state represents the state of the Firecracker MVM process itself The state for the entire Flintlock MVM is represented in models.MicroVMState.

const (
	MicroVMStateUnknown    MicroVMState = "unknown"
	MicroVMStatePending    MicroVMState = "pending"
	MicroVMStateConfigured MicroVMState = "configured"
	MicroVMStateRunning    MicroVMState = "running"
)

type NetworkService

type NetworkService interface {
	// IfaceCreate will create the network interface.
	IfaceCreate(ctx context.Context, input IfaceCreateInput) (*IfaceDetails, error)
	// IfaceDelete is used to delete a network interface
	IfaceDelete(ctx context.Context, input DeleteIfaceInput) error
	// IfaceExists will check if an interface with the given name exists
	IfaceExists(ctx context.Context, name string) (bool, error)
	// IfaceDetails will get the details of the supplied network interface.
	IfaceDetails(ctx context.Context, name string) (*IfaceDetails, error)
}

NetworkService is a port for a service that interacts with the network stack on the host machine.

type ReconcileMicroVMsUseCase

type ReconcileMicroVMsUseCase interface {
	// ReconcileMicroVM is a use case for reconciling a specific microvm.
	ReconcileMicroVM(ctx context.Context, vmid models.VMID) error
}

ReconcileMicroVMsUseCase is the interface for use cases that are related to reconciling microvms.

type RepositoryGetOptions

type RepositoryGetOptions struct {
	Name      string
	Namespace string
	Version   string
	UID       string
}

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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