provisioner

package
v0.412.1 Latest Latest
Warning

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

Go to latest
Published: Dec 16, 2024 License: Apache-2.0 Imports: 45 Imported by: 0

README

FTL Provisioner

FTL Provisioner will be responsible for creating any infrastructure required by deployments, as well as orchestrating deployments, and keeping track of the state of the underlying infrastructure.

This is still a WIP and should not be used yet.

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func ProvisionMySQLForTest

func ProvisionMySQLForTest(ctx context.Context, moduleName string, id string) (string, error)

func ProvisionPostgresForTest

func ProvisionPostgresForTest(ctx context.Context, moduleName string, id string) (string, error)

func RunMySQLMigration

func RunMySQLMigration(ctx context.Context, dsn string, moduleDir string, name string) error

func RunPostgresMigration

func RunPostgresMigration(ctx context.Context, dsn string, moduleDir string, name string) error

func Start

func Start(
	ctx context.Context,
	config Config,
	registry *ProvisionerRegistry,
	controllerClient ftlv1connect.ControllerServiceClient,
) error

Start the Provisioner. Blocks until the context is cancelled.

Types

type CommonProvisionerConfig

type CommonProvisionerConfig struct {
	PluginConfigFile *os.File `name:"provisioner-plugin-config" help:"Path to the plugin configuration file." env:"FTL_PROVISIONER_PLUGIN_CONFIG_FILE"`
}

CommonProvisionerConfig is shared config between the production controller and development server.

type Config

type Config struct {
	Bind               *url.URL `help:"Socket to bind to." default:"http://127.0.0.1:8893" env:"FTL_BIND"`
	ControllerEndpoint *url.URL `name:"ftl-endpoint" help:"Controller endpoint." env:"FTL_ENDPOINT" default:"http://127.0.0.1:8892"`
	CommonProvisionerConfig
}

func (*Config) SetDefaults

func (c *Config) SetDefaults()

type Deployment

type Deployment struct {
	Tasks []*Task
	// TODO: Merge runtimes at creation time
	Module   *schema.Module
	Previous *schema.Module
}

Deployment is a single deployment of resources for a single module

func (*Deployment) Progress

func (d *Deployment) Progress(ctx context.Context) (bool, error)

Progress the deployment. Returns true if there are still tasks running or pending.

func (*Deployment) State

func (d *Deployment) State() *DeploymentState

type DeploymentState

type DeploymentState struct {
	Pending []*Task
	Running *Task
	Failed  *Task
	Done    []*Task
}

type InMemProvisioner

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

InMemProvisioner for running an in memory provisioner, constructing all resources concurrently

It spawns a separate goroutine for each resource to be provisioned, and finishes the task when all resources are provisioned or an error occurs.

func NewControllerProvisioner

func NewControllerProvisioner(client ftlv1connect.ControllerServiceClient) *InMemProvisioner

NewControllerProvisioner creates a new provisioner that uses the FTL controller to provision modules

func NewDevProvisioner

func NewDevProvisioner(postgresPort int, mysqlPort int, recreate bool) *InMemProvisioner

NewDevProvisioner creates a new provisioner that provisions resources locally when running FTL in dev mode

func NewRunnerScalingProvisioner

func NewRunnerScalingProvisioner(runners scaling.RunnerScaling) *InMemProvisioner

func NewSQLMigrationProvisioner

func NewSQLMigrationProvisioner(storage *artefacts.OCIArtefactService) *InMemProvisioner

NewSQLMigrationProvisioner creates a new provisioner that provisions database migrations

type InMemResourceProvisionerFn

type InMemResourceProvisionerFn func(ctx context.Context, module string, resource schema.Provisioned) (*RuntimeEvent, error)

type NoopProvisioner

type NoopProvisioner struct{}

NoopProvisioner is a provisioner that does nothing

type ProvisionerBinding

type ProvisionerBinding struct {
	Provisioner provisionerconnect.ProvisionerPluginServiceClient
	ID          string
	Types       []schema.ResourceType
}

ProvisionerBinding is a Provisioner and the types it supports

func (ProvisionerBinding) String

func (p ProvisionerBinding) String() string

type ProvisionerRegistry

type ProvisionerRegistry struct {
	Bindings []*ProvisionerBinding
}

ProvisionerRegistry contains all known resource handlers in the order they should be executed

func RegistryFromConfigFile

func RegistryFromConfigFile(ctx context.Context, file *os.File, controller ftlv1connect.ControllerServiceClient, scaling scaling.RunnerScaling) (*ProvisionerRegistry, error)

func (*ProvisionerRegistry) CreateDeployment

func (reg *ProvisionerRegistry) CreateDeployment(ctx context.Context, desiredModule, existingModule *schema.Module) *Deployment

CreateDeployment to take the system to the desired state

func (*ProvisionerRegistry) Register

Register to the registry, to be executed after all the previously added handlers

type RuntimeEvent

type RuntimeEvent struct {
	Module   schema.ModuleRuntimeEvent
	Database *schema.DatabaseRuntimeEvent
	Topic    *schema.TopicRuntimeEvent
	Verb     *schema.VerbRuntimeEvent
}

RuntimeEvent is a union type of all runtime events TODO: Remove once we have fully typed provisioners

type Service

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

func New

func New(
	ctx context.Context,
	config Config,
	controllerClient ftlv1connect.ControllerServiceClient,
	registry *ProvisionerRegistry,
) (*Service, error)

type Task

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

Task is a unit of work for a deployment

func (*Task) Progress

func (t *Task) Progress(ctx context.Context) error

func (*Task) Start

func (t *Task) Start(ctx context.Context) error

type TaskState

type TaskState string
const (
	TaskStatePending TaskState = ""
	TaskStateRunning TaskState = "running"
	TaskStateDone    TaskState = "done"
	TaskStateFailed  TaskState = "failed"
)

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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