appconfig

package
v0.2.42 Latest Latest
Warning

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

Go to latest
Published: Apr 24, 2024 License: Apache-2.0 Imports: 34 Imported by: 0

Documentation

Overview

Package appconfig implements functionality related to reading and writing app configuration files.

Index

Constants

View Source
const (
	// DefaultConfigFileName denotes the default application configuration file name.
	DefaultConfigFileName = "fly.toml"
)

Variables

View Source
var (
	ValidationError          = errors.New("invalid app configuration")
	MachinesDeployStrategies = []string{"canary", "rolling", "immediate", "bluegreen"}
)

Functions

func ConfigFileExistsAtPath

func ConfigFileExistsAtPath(p string) (bool, error)

func NameFromContext

func NameFromContext(ctx context.Context) string

NameFromContext returns the app name ctx carries or an empty string.

func ResolveConfigFileFromPath

func ResolveConfigFileFromPath(p string) (string, error)

func WithConfig

func WithConfig(ctx context.Context, cfg *Config) context.Context

WithConfig derives a context that carries cfg from ctx.

func WithName

func WithName(ctx context.Context, name string) context.Context

WithName derives a context that carries the given app name from ctx.

Types

type Build

type Build struct {
	Builder           string            `toml:"builder,omitempty" json:"builder,omitempty"`
	Args              map[string]string `toml:"args,omitempty" json:"args,omitempty"`
	Buildpacks        []string          `toml:"buildpacks,omitempty" json:"buildpacks,omitempty"`
	Image             string            `toml:"image,omitempty" json:"image,omitempty"`
	Settings          map[string]any    `toml:"settings,omitempty" json:"settings,omitempty"`
	Builtin           string            `toml:"builtin,omitempty" json:"builtin,omitempty"`
	Dockerfile        string            `toml:"dockerfile,omitempty" json:"dockerfile,omitempty"`
	Ignorefile        string            `toml:"ignorefile,omitempty" json:"ignorefile,omitempty"`
	DockerBuildTarget string            `toml:"build-target,omitempty" json:"build-target,omitempty"`
}

type Compute added in v0.1.122

type Compute struct {
	Size              string `json:"size,omitempty" toml:"size,omitempty"`
	Memory            string `json:"memory,omitempty" toml:"memory,omitempty"`
	*fly.MachineGuest `toml:",inline" json:",inline"`
	Processes         []string `json:"processes,omitempty" toml:"processes,omitempty"`
}

type Config

type Config struct {
	AppName        string        `toml:"app,omitempty" json:"app,omitempty"`
	PrimaryRegion  string        `toml:"primary_region,omitempty" json:"primary_region,omitempty"`
	KillSignal     *string       `toml:"kill_signal,omitempty" json:"kill_signal,omitempty"`
	KillTimeout    *fly.Duration `toml:"kill_timeout,omitempty" json:"kill_timeout,omitempty"`
	SwapSizeMB     *int          `toml:"swap_size_mb,omitempty" json:"swap_size_mb,omitempty"`
	ConsoleCommand string        `toml:"console_command,omitempty" json:"console_command,omitempty"`

	// Sections that are typically short and benefit from being on top
	Experimental *Experimental     `toml:"experimental,omitempty" json:"experimental,omitempty"`
	Build        *Build            `toml:"build,omitempty" json:"build,omitempty"`
	Deploy       *Deploy           `toml:"deploy,omitempty" json:"deploy,omitempty"`
	Env          map[string]string `toml:"env,omitempty" json:"env,omitempty"`

	// Fields that are process group aware must come after Processes
	Processes        map[string]string         `toml:"processes,omitempty" json:"processes,omitempty"`
	Mounts           []Mount                   `toml:"mounts,omitempty" json:"mounts,omitempty"`
	HTTPService      *HTTPService              `toml:"http_service,omitempty" json:"http_service,omitempty"`
	Services         []Service                 `toml:"services,omitempty" json:"services,omitempty"`
	Checks           map[string]*ToplevelCheck `toml:"checks,omitempty" json:"checks,omitempty"`
	Files            []File                    `toml:"files,omitempty" json:"files,omitempty"`
	HostDedicationID string                    `toml:"host_dedication_id,omitempty" json:"host_dedication_id,omitempty"`

	Restart []Restart `toml:"restart,omitempty" json:"restart,omitempty"`

	Compute []*Compute `toml:"vm,omitempty" json:"vm,omitempty"`

	// Others, less important.
	Statics []Static   `toml:"statics,omitempty" json:"statics,omitempty"`
	Metrics []*Metrics `toml:"metrics,omitempty" json:"metrics,omitempty"`

	// MergedFiles is a list of files that have been merged from the app config and flags.
	MergedFiles []*fly.File `toml:"-" json:"-"`
	// contains filtered or unexported fields
}

Config wraps the properties of app configuration. NOTE: If you any new setting here, please also add a value for it at testdata/rull-reference.toml

func ConfigFromContext

func ConfigFromContext(ctx context.Context) *Config

ConfigFromContext returns the Config ctx carries.

func FromAppAndMachineSet

func FromAppAndMachineSet(ctx context.Context, appName string, machines machine.MachineSet) (*Config, string, error)

func FromDefinition

func FromDefinition(definition *fly.Definition) (*Config, error)

func FromRemoteApp added in v0.0.479

func FromRemoteApp(ctx context.Context, appName string) (*Config, error)

func LoadConfig

func LoadConfig(path string) (cfg *Config, err error)

LoadConfig loads the app config at the given path.

func NewConfig

func NewConfig() *Config

func (*Config) AllServices added in v0.0.514

func (c *Config) AllServices() (services []Service)

func (*Config) BuildStrategies added in v0.0.500

func (cfg *Config) BuildStrategies() []string

func (*Config) ComputeForGroup added in v0.2.3

func (c *Config) ComputeForGroup(groupName string) *Compute

ComputeForGroup finds the most specific VM compute requirements for this process group In reality there are only four valid cases:

  1. No [[vm]] section
  2. One [[vm]] section with `processes = [groupName]`
  3. Previous case plus global [[compute]] without processes
  4. Only a [[vm]] section without processes set which applies to all groups

func (*Config) ConfigFilePath

func (c *Config) ConfigFilePath() string

func (*Config) DefaultProcessName added in v0.0.489

func (c *Config) DefaultProcessName() string

DefaultProcessName returns: * "app" when no processes are defined * "app" if present in the processes map * The first process name in ascending lexicographical order

func (*Config) DockerBuildTarget

func (c *Config) DockerBuildTarget() string

func (*Config) Dockerfile

func (c *Config) Dockerfile() string

func (*Config) Flatten added in v0.0.514

func (c *Config) Flatten(groupName string) (*Config, error)

Flatten generates a machine config specific to a process_group.

Only services, mounts, checks, metrics, files and restarts specific to the provided process group will be in the returned config.

func (*Config) FormatProcessNames added in v0.0.509

func (c *Config) FormatProcessNames() string

FormatProcessNames formats the process group list like `['foo', 'bar']`

func (*Config) HasNonHttpAndHttpsStandardServices

func (c *Config) HasNonHttpAndHttpsStandardServices() bool

func (*Config) HasUdpService

func (c *Config) HasUdpService() bool

func (*Config) Ignorefile

func (c *Config) Ignorefile() string

func (*Config) InitCmd added in v0.0.514

func (c *Config) InitCmd(groupName string) ([]string, error)

func (*Config) InternalPort added in v0.0.500

func (c *Config) InternalPort() int

func (*Config) IsUsingGPU added in v0.2.23

func (c *Config) IsUsingGPU() bool

IsUsingGPU returns true if any VMs have a gpu-kind set.

func (*Config) MarshalJSON added in v0.0.508

func (c *Config) MarshalJSON() ([]byte, error)

MarshalJSON implements the json.Marshaler interface

func (*Config) MergeFiles added in v0.1.64

func (cfg *Config) MergeFiles(files []*fly.File) error

MergeFiles merges the provided files with the files in the config wherein the provided files take precedence.

func (*Config) ProcessNames added in v0.0.509

func (c *Config) ProcessNames() []string

ProcessNames lists each key of c.Processes, sorted lexicographically If c.Processes == nil, returns ["app"]

func (*Config) SetConcurrency

func (c *Config) SetConcurrency(soft int, hard int)

func (*Config) SetConfigFilePath added in v0.0.540

func (c *Config) SetConfigFilePath(configFilePath string)

func (*Config) SetDockerCommand

func (c *Config) SetDockerCommand(cmd string)

func (*Config) SetDockerEntrypoint

func (c *Config) SetDockerEntrypoint(entrypoint string)

func (*Config) SetEnvVariable

func (c *Config) SetEnvVariable(name, value string)

func (*Config) SetEnvVariables

func (c *Config) SetEnvVariables(vals map[string]string)

func (*Config) SetHttpCheck

func (c *Config) SetHttpCheck(path string, headers map[string]string)

func (*Config) SetInternalPort

func (c *Config) SetInternalPort(port int)

func (*Config) SetKillSignal

func (c *Config) SetKillSignal(signal string)

func (*Config) SetMachinesPlatform

func (c *Config) SetMachinesPlatform() error

SetMachinesPlatform informs the TOML marshaller that this config is for the machines platform

func (*Config) SetMounts added in v0.0.522

func (c *Config) SetMounts(volumes []Mount)

func (*Config) SetProcess

func (c *Config) SetProcess(name, value string)

func (*Config) SetReleaseCommand

func (c *Config) SetReleaseCommand(cmd string)

func (*Config) SetStatics

func (c *Config) SetStatics(statics []Static)

func (*Config) ToConsoleMachineConfig added in v0.0.557

func (c *Config) ToConsoleMachineConfig() (*fly.MachineConfig, error)

func (*Config) ToDefinition

func (c *Config) ToDefinition() (*fly.Definition, error)

func (*Config) ToMachineConfig added in v0.0.510

func (c *Config) ToMachineConfig(processGroup string, src *fly.MachineConfig) (*fly.MachineConfig, error)

func (*Config) ToReleaseMachineConfig added in v0.0.510

func (c *Config) ToReleaseMachineConfig() (*fly.MachineConfig, error)

func (*Config) URL added in v0.0.533

func (cfg *Config) URL() *url.URL

func (*Config) Validate

func (cfg *Config) Validate(ctx context.Context) (err error, extra_info string)

func (*Config) ValidateGroups added in v0.1.120

func (cfg *Config) ValidateGroups(ctx context.Context, groups []string) (err error, extraInfo string)

func (*Config) WriteTo added in v0.0.508

func (c *Config) WriteTo(w io.Writer) (int64, error)

func (*Config) WriteToDisk

func (c *Config) WriteToDisk(ctx context.Context, path string) (err error)

func (*Config) WriteToFile

func (c *Config) WriteToFile(filename string) (err error)

type Deploy

type Deploy struct {
	ReleaseCommand        string        `toml:"release_command,omitempty" json:"release_command,omitempty"`
	ReleaseCommandTimeout *fly.Duration `toml:"release_command_timeout,omitempty" json:"release_command_timeout,omitempty"`
	Strategy              string        `toml:"strategy,omitempty" json:"strategy,omitempty"`
	MaxUnavailable        *float64      `toml:"max_unavailable,omitempty" json:"max_unavailable,omitempty"`
	WaitTimeout           *fly.Duration `toml:"wait_timeout,omitempty" json:"wait_timeout,omitempty"`
}

type Experimental

type Experimental struct {
	Cmd            []string `toml:"cmd,omitempty" json:"cmd,omitempty"`
	Entrypoint     []string `toml:"entrypoint,omitempty" json:"entrypoint,omitempty"`
	Exec           []string `toml:"exec,omitempty" json:"exec,omitempty"`
	AutoRollback   bool     `toml:"auto_rollback,omitempty" json:"auto_rollback,omitempty"`
	EnableConsul   bool     `toml:"enable_consul,omitempty" json:"enable_consul,omitempty"`
	EnableEtcd     bool     `toml:"enable_etcd,omitempty" json:"enable_etcd,omitempty"`
	LazyLoadImages bool     `toml:"lazy_load_images,omitempty" json:"lazy_load_images,omitempty"`
}

type File added in v0.1.64

type File struct {
	GuestPath  string   `toml:"guest_path,omitempty" json:"guest_path,omitempty" validate:"required"`
	LocalPath  string   `toml:"local_path,omitempty" json:"local_path,omitempty"`
	SecretName string   `toml:"secret_name,omitempty" json:"secret_name,omitempty"`
	RawValue   string   `toml:"raw_value,omitempty" json:"raw_value,omitempty"`
	Processes  []string `json:"processes,omitempty" toml:"processes,omitempty"`
}

type HTTPService

type HTTPService struct {
	InternalPort int  `json:"internal_port,omitempty" toml:"internal_port,omitempty" validate:"required,numeric"`
	ForceHTTPS   bool `toml:"force_https,omitempty" json:"force_https,omitempty"`
	// AutoStopMachines and AutoStartMachines should not have omitempty for TOML; see the note in Service.
	AutoStopMachines   *bool                          `json:"auto_stop_machines,omitempty" toml:"auto_stop_machines"`
	AutoStartMachines  *bool                          `json:"auto_start_machines,omitempty" toml:"auto_start_machines"`
	MinMachinesRunning *int                           `json:"min_machines_running,omitempty" toml:"min_machines_running,omitempty"`
	Processes          []string                       `json:"processes,omitempty" toml:"processes,omitempty"`
	Concurrency        *fly.MachineServiceConcurrency `toml:"concurrency,omitempty" json:"concurrency,omitempty"`
	TLSOptions         *fly.TLSOptions                `json:"tls_options,omitempty" toml:"tls_options,omitempty"`
	HTTPOptions        *fly.HTTPOptions               `json:"http_options,omitempty" toml:"http_options,omitempty"`
	HTTPChecks         []*ServiceHTTPCheck            `json:"checks,omitempty" toml:"checks,omitempty"`
}

func (*HTTPService) ToService added in v0.0.514

func (s *HTTPService) ToService() *Service

type Metrics added in v0.1.93

type Metrics struct {
	*fly.MachineMetrics
	Processes []string `json:"processes,omitempty" toml:"processes,omitempty"`
}

type Mount added in v0.0.522

type Mount struct {
	Source                  string   `toml:"source,omitempty" json:"source,omitempty"`
	Destination             string   `toml:"destination,omitempty" json:"destination,omitempty"`
	InitialSize             string   `toml:"initial_size,omitempty" json:"initial_size,omitempty"`
	AutoExtendSizeThreshold int      `toml:"auto_extend_size_threshold,omitempty" json:"auto_extend_size_threshold,omitempty"`
	AutoExtendSizeIncrement string   `toml:"auto_extend_size_increment,omitempty" json:"auto_extend_size_increment,omitempty"`
	AutoExtendSizeLimit     string   `toml:"auto_extend_size_limit,omitempty" json:"auto_extend_size_limit,omitempty"`
	Processes               []string `toml:"processes,omitempty" json:"processes,omitempty"`
}

type Restart added in v0.2.28

type Restart struct {
	Policy     RestartPolicy `toml:"policy,omitempty" json:"policy,omitempty"`
	MaxRetries int           `toml:"retries,omitempty" json:"retries,omitempty"`
	Processes  []string      `json:"processes,omitempty" toml:"processes,omitempty"`
}

type RestartPolicy added in v0.2.28

type RestartPolicy string
const (
	RestartPolicyAlways    RestartPolicy = "always"
	RestartPolicyNever     RestartPolicy = "never"
	RestartPolicyOnFailure RestartPolicy = "on-failure"
)

type Service

type Service struct {
	Protocol     string `json:"protocol,omitempty" toml:"protocol"`
	InternalPort int    `json:"internal_port,omitempty" toml:"internal_port"`
	// AutoStopMachines and AutoStartMachines should not have omitempty for TOML. The encoder
	// already omits nil since it can't be represented, and omitempty makes it omit false as well.
	AutoStopMachines   *bool                          `json:"auto_stop_machines,omitempty" toml:"auto_stop_machines"`
	AutoStartMachines  *bool                          `json:"auto_start_machines,omitempty" toml:"auto_start_machines"`
	MinMachinesRunning *int                           `json:"min_machines_running,omitempty" toml:"min_machines_running,omitempty"`
	Ports              []fly.MachinePort              `json:"ports,omitempty" toml:"ports"`
	Concurrency        *fly.MachineServiceConcurrency `json:"concurrency,omitempty" toml:"concurrency"`
	TCPChecks          []*ServiceTCPCheck             `json:"tcp_checks,omitempty" toml:"tcp_checks,omitempty"`
	HTTPChecks         []*ServiceHTTPCheck            `json:"http_checks,omitempty" toml:"http_checks,omitempty"`
	Processes          []string                       `json:"processes,omitempty" toml:"processes,omitempty"`
}

type ServiceHTTPCheck

type ServiceHTTPCheck struct {
	Interval    *fly.Duration `json:"interval,omitempty" toml:"interval,omitempty"`
	Timeout     *fly.Duration `json:"timeout,omitempty" toml:"timeout,omitempty"`
	GracePeriod *fly.Duration `toml:"grace_period,omitempty" json:"grace_period,omitempty"`

	// HTTP Specifics
	HTTPMethod        *string           `json:"method,omitempty" toml:"method,omitempty"`
	HTTPPath          *string           `json:"path,omitempty" toml:"path,omitempty"`
	HTTPProtocol      *string           `json:"protocol,omitempty" toml:"protocol,omitempty"`
	HTTPTLSSkipVerify *bool             `json:"tls_skip_verify,omitempty" toml:"tls_skip_verify,omitempty"`
	HTTPTLSServerName *string           `json:"tls_server_name,omitempty" toml:"tls_server_name,omitempty"`
	HTTPHeaders       map[string]string `json:"headers,omitempty" toml:"headers,omitempty"`
}

func (*ServiceHTTPCheck) String

func (chk *ServiceHTTPCheck) String(port int) string

type ServiceTCPCheck

type ServiceTCPCheck struct {
	Interval    *fly.Duration `json:"interval,omitempty" toml:"interval,omitempty"`
	Timeout     *fly.Duration `json:"timeout,omitempty" toml:"timeout,omitempty"`
	GracePeriod *fly.Duration `toml:"grace_period,omitempty" json:"grace_period,omitempty"`
}

func (*ServiceTCPCheck) String

func (chk *ServiceTCPCheck) String(port int) string

type Static

type Static struct {
	GuestPath    string `toml:"guest_path" json:"guest_path,omitempty" validate:"required"`
	UrlPrefix    string `toml:"url_prefix" json:"url_prefix,omitempty" validate:"required"`
	TigrisBucket string `toml:"tigris_bucket,omitempty" json:"tigris_bucket"`
}

type ToplevelCheck

type ToplevelCheck struct {
	Port              *int              `json:"port,omitempty" toml:"port,omitempty"`
	Type              *string           `json:"type,omitempty" toml:"type,omitempty"`
	Interval          *fly.Duration     `json:"interval,omitempty" toml:"interval,omitempty"`
	Timeout           *fly.Duration     `json:"timeout,omitempty" toml:"timeout,omitempty"`
	GracePeriod       *fly.Duration     `json:"grace_period,omitempty" toml:"grace_period,omitempty"`
	HTTPMethod        *string           `json:"method,omitempty" toml:"method,omitempty"`
	HTTPPath          *string           `json:"path,omitempty" toml:"path,omitempty"`
	HTTPProtocol      *string           `json:"protocol,omitempty" toml:"protocol,omitempty"`
	HTTPTLSSkipVerify *bool             `json:"tls_skip_verify,omitempty" toml:"tls_skip_verify,omitempty"`
	HTTPTLSServerName *string           `json:"tls_server_name,omitempty" toml:"tls_server_name,omitempty"`
	HTTPHeaders       map[string]string `json:"headers,omitempty" toml:"headers,omitempty"`
	Processes         []string          `json:"processes,omitempty" toml:"processes,omitempty"`
}

func (*ToplevelCheck) String

func (chk *ToplevelCheck) String() string

Jump to

Keyboard shortcuts

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