Skip to content

Commit

Permalink
fly launch works for machines!
Browse files Browse the repository at this point in the history
  • Loading branch information
tvdfly authored and dangra committed Jan 25, 2023
1 parent 26422c2 commit 7696d3e
Show file tree
Hide file tree
Showing 5 changed files with 40 additions and 22 deletions.
27 changes: 15 additions & 12 deletions internal/app/app.go
Original file line number Diff line number Diff line change
Expand Up @@ -178,8 +178,9 @@ type Check struct {
Headers map[string]string `json:"headers,omitempty" toml:"headers,omitempty"`
}

func (c *Check) ToMachineCheck() (*api.MachineCheck, error) {
if c.GracePeriod != nil {
func (c *Check) toMachineCheck(launching bool) (*api.MachineCheck, error) {
// don't error when launching; it's a bad experience!
if !launching && c.GracePeriod != nil {
return nil, fmt.Errorf("checks for machines do not yet support grace_period")
}
if c.RestartLimit != 0 {
Expand Down Expand Up @@ -222,8 +223,9 @@ func (c *Check) String() string {
}
}

func (hc *HttpCheck) ToMachineCheck(port int) (*api.MachineCheck, error) {
if hc.GracePeriod != nil {
func (hc *HttpCheck) toMachineCheck(port int, launching bool) (*api.MachineCheck, error) {
// don't error when launching; it's a bad experience!
if !launching && hc.GracePeriod != nil {
return nil, fmt.Errorf("checks for machines do not yet support grace_period")
}
if hc.RestartLimit != 0 {
Expand All @@ -250,8 +252,9 @@ func (hc *HttpCheck) String(port int) string {
return fmt.Sprintf("http-%d-%s", port, hc.HTTPMethod)
}

func (tc *TcpCheck) ToMachineCheck(port int) (*api.MachineCheck, error) {
if tc.GracePeriod != nil {
func (tc *TcpCheck) toMachineCheck(port int, launching bool) (*api.MachineCheck, error) {
// don't error when launching; it's a bad experience!
if !launching && tc.GracePeriod != nil {
return nil, fmt.Errorf("checks for machines do not yet support grace_period")
}
if tc.RestartLimit != 0 {
Expand Down Expand Up @@ -662,7 +665,7 @@ type ProcessConfig struct {
MachineChecks map[string]api.MachineCheck
}

func (c *Config) GetProcessConfigs() (map[string]ProcessConfig, error) {
func (c *Config) GetProcessConfigs(appLaunching bool) (map[string]ProcessConfig, error) {
res := make(map[string]ProcessConfig)
processCount := 0
if c.Processes != nil {
Expand Down Expand Up @@ -698,7 +701,7 @@ func (c *Config) GetProcessConfigs() (map[string]ProcessConfig, error) {
}
for checkName, check := range c.Checks {
fullCheckName := fmt.Sprintf("chk-%s-%s", checkName, check.String())
machineCheck, err := check.ToMachineCheck()
machineCheck, err := check.toMachineCheck(appLaunching)
if err != nil {
return nil, err
}
Expand Down Expand Up @@ -728,15 +731,15 @@ func (c *Config) GetProcessConfigs() (map[string]ProcessConfig, error) {
procConfigToUpdate.MachineServices = append(procConfigToUpdate.MachineServices, *service.ToMachineService())
for _, httpCheck := range service.HttpChecks {
checkName := fmt.Sprintf("svcchk-%s", httpCheck.String(service.InternalPort))
machineCheck, err := httpCheck.ToMachineCheck(service.InternalPort)
machineCheck, err := httpCheck.toMachineCheck(service.InternalPort, appLaunching)
if err != nil {
return nil, err
}
procConfigToUpdate.MachineChecks[checkName] = *machineCheck
}
for _, tcpCheck := range service.TcpChecks {
checkName := fmt.Sprintf("svcchk-%s", tcpCheck.String(service.InternalPort))
machineCheck, err := tcpCheck.ToMachineCheck(service.InternalPort)
machineCheck, err := tcpCheck.toMachineCheck(service.InternalPort, appLaunching)
if err != nil {
return nil, err
}
Expand All @@ -752,15 +755,15 @@ func (c *Config) GetProcessConfigs() (map[string]ProcessConfig, error) {
procConfigToUpdate.MachineServices = append(procConfigToUpdate.MachineServices, *service.ToMachineService())
for _, httpCheck := range service.HttpChecks {
checkName := fmt.Sprintf("svcchk-%s", httpCheck.String(service.InternalPort))
machineCheck, err := httpCheck.ToMachineCheck(service.InternalPort)
machineCheck, err := httpCheck.toMachineCheck(service.InternalPort, appLaunching)
if err != nil {
return nil, err
}
procConfigToUpdate.MachineChecks[checkName] = *machineCheck
}
for _, tcpCheck := range service.TcpChecks {
checkName := fmt.Sprintf("svcchk-%s", tcpCheck.String(service.InternalPort))
machineCheck, err := tcpCheck.ToMachineCheck(service.InternalPort)
machineCheck, err := tcpCheck.toMachineCheck(service.InternalPort, appLaunching)
if err != nil {
return nil, err
}
Expand Down
3 changes: 2 additions & 1 deletion internal/command/deploy/deploy.go
Original file line number Diff line number Diff line change
Expand Up @@ -174,6 +174,7 @@ func DeployWithConfig(ctx context.Context, appConfig *app.Config, args DeployWit
md, err := NewMachineDeployment(ctx, MachineDeploymentArgs{
DeploymentImage: img,
Strategy: flag.GetString(ctx, "strategy"),
Launching: args.Launching,
EnvFromFlags: flag.GetStringSlice(ctx, "env"),
PrimaryRegionFlag: flag.GetString(ctx, flag.RegionName),
AutoConfirmMigration: flag.GetBool(ctx, "auto-confirm"),
Expand Down Expand Up @@ -241,7 +242,7 @@ func useMachines(ctx context.Context, appConfig app.Config, appBasic *api.AppBas
return appBasic.PlatformVersion == app.MachinesPlatform, nil
}
// statics are not supported in Apps v2 yet
if appConfig.Statics != nil {
if len(appConfig.Statics) > 0 {
return false, nil
}
// if running automated, stay on nomad platform for now
Expand Down
5 changes: 4 additions & 1 deletion internal/command/deploy/machines.go
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ type MachineDeployment interface {
type MachineDeploymentArgs struct {
DeploymentImage *imgsrc.DeploymentImage
Strategy string
Launching bool
EnvFromFlags []string
PrimaryRegionFlag string
AutoConfirmMigration bool
Expand All @@ -61,6 +62,7 @@ type machineDeployment struct {
strategy string
releaseId string
releaseVersion int
launching bool
autoConfirmAppsV2Migration bool
skipHealthChecks bool
restartOnly bool
Expand Down Expand Up @@ -507,7 +509,7 @@ func NewMachineDeployment(ctx context.Context, args MachineDeploymentArgs) (Mach
if waitTimeout != DefaultWaitTimeout || leaseTimeout != DefaultLeaseTtl || args.WaitTimeout == 0 || args.LeaseTimeout == 0 {
terminal.Infof("Using wait timeout: %s and lease timeout: %s\n", waitTimeout, leaseTimeout)
}
processConfigs, err := appConfig.GetProcessConfigs()
processConfigs, err := appConfig.GetProcessConfigs(args.Launching)
if err != nil {
return nil, err
}
Expand All @@ -521,6 +523,7 @@ func NewMachineDeployment(ctx context.Context, args MachineDeploymentArgs) (Mach
appConfig: appConfig,
processConfigs: processConfigs,
img: args.DeploymentImage,
launching: args.Launching,
autoConfirmAppsV2Migration: args.AutoConfirmMigration,
skipHealthChecks: args.SkipHealthChecks,
restartOnly: args.RestartOnly,
Expand Down
25 changes: 18 additions & 7 deletions internal/command/launch/launch.go
Original file line number Diff line number Diff line change
Expand Up @@ -90,12 +90,11 @@ func New() (cmd *cobra.Command) {
Description: "Use the Apps v2 platform built with Machines",
Default: false,
},
// FIXME: pipe this through
// flag.Int{
// Name: "internal-port",
// Description: "Set internal_port for all services in the generated fly.toml",
// Default: 8080,
// },
flag.Int{
Name: "internal-port",
Description: "Set internal_port for all services in the generated fly.toml",
Default: -1,
},
)

return
Expand Down Expand Up @@ -319,6 +318,11 @@ func run(ctx context.Context) (err error) {
appConfig.AppName = createdApp.Name
ctx = app.WithName(ctx, appConfig.AppName)

internalPortFromFlag := flag.GetInt(ctx, "internal-port")
if internalPortFromFlag > 0 {
appConfig.SetInternalPort(internalPortFromFlag)
}

if srcInfo != nil {

if srcInfo.Port > 0 {
Expand Down Expand Up @@ -464,9 +468,16 @@ func run(ctx context.Context) (err error) {

// Finally, write the config

if err = appConfig.WriteToDisk(ctx, filepath.Join(workingDir, "fly.toml")); err != nil {
flyTomlPath := filepath.Join(workingDir, "fly.toml")
if err = appConfig.WriteToDisk(ctx, flyTomlPath); err != nil {
return err
}
// round trip config, because some magic happens to populate stuff like services
reloadedAppConfig, err := app.LoadConfig(ctx, flyTomlPath)
if err != nil {
return err
}
ctx = app.WithConfig(ctx, reloadedAppConfig)

if srcInfo == nil {
return nil
Expand Down
2 changes: 1 addition & 1 deletion internal/command/machine/clone.go
Original file line number Diff line number Diff line change
Expand Up @@ -100,7 +100,7 @@ func runMachineClone(ctx context.Context) (err error) {

targetConfig := source.Config
if targetProcessGroup := flag.GetString(ctx, "process-group"); targetProcessGroup != "" {
allProcessConfigs, err := appConfig.GetProcessConfigs()
allProcessConfigs, err := appConfig.GetProcessConfigs(false)
if err != nil {
return err
}
Expand Down

0 comments on commit 7696d3e

Please sign in to comment.