Skip to content

Commit

Permalink
Support for backup regions
Browse files Browse the repository at this point in the history
This adds backup regions to `flyctl region list` output,
and adds `flyctl regions backup [region]` for setting backup regions.
  • Loading branch information
mrkurt committed Aug 4, 2020
1 parent a718206 commit 2f653fc
Show file tree
Hide file tree
Showing 4 changed files with 74 additions and 23 deletions.
22 changes: 15 additions & 7 deletions api/resource_regions.go
@@ -1,13 +1,17 @@
package api

func (c *Client) ConfigureRegions(input ConfigureRegionsInput) ([]Region, error) {
func (c *Client) ConfigureRegions(input ConfigureRegionsInput) ([]Region, []Region, error) {
query := `
mutation ($input: ConfigureRegionsInput!) {
configureRegions(input: $input) {
regions {
code
name
}
backupRegions{
code
name
}
}
}
`
Expand All @@ -18,17 +22,21 @@ func (c *Client) ConfigureRegions(input ConfigureRegionsInput) ([]Region, error)

data, err := c.Run(req)
if err != nil {
return nil, err
return nil, nil, err
}

return data.ConfigureRegions.Regions, nil
return data.ConfigureRegions.Regions, data.ConfigureRegions.BackupRegions, nil
}

func (c *Client) ListAppRegions(appName string) ([]Region, error) {
func (c *Client) ListAppRegions(appName string) ([]Region, []Region, error) {
query := `
query ($appName: String!) {
app(name: $appName) {
regions {
regions{
code
name
}
backupRegions{
code
name
}
Expand All @@ -42,8 +50,8 @@ func (c *Client) ListAppRegions(appName string) ([]Region, error) {

data, err := c.Run(req)
if err != nil {
return nil, err
return nil, nil, err
}

return *data.App.Regions, nil
return *data.App.Regions, *data.App.BackupRegions, nil
}
13 changes: 8 additions & 5 deletions api/types.go
Expand Up @@ -90,8 +90,9 @@ type Query struct {
}

ConfigureRegions struct {
App App
Regions []Region
App App
Regions []Region
BackupRegions []Region
}

ResumeApp struct {
Expand Down Expand Up @@ -147,6 +148,7 @@ type App struct {
Autoscaling *AutoscalingConfig
VMSize VMSize
Regions *[]Region
BackupRegions *[]Region
}

type AppCertsCompact struct {
Expand Down Expand Up @@ -523,9 +525,10 @@ type BuildArgInput struct {
}

type ConfigureRegionsInput struct {
AppID string `json:"appId"`
AllowRegions []string `json:"allowRegions"`
DenyRegions []string `json:"denyRegions"`
AppID string `json:"appId"`
AllowRegions []string `json:"allowRegions"`
DenyRegions []string `json:"denyRegions"`
BackupRegions []string `json:"backupRegions"`
}

type Errors []Error
Expand Down
56 changes: 45 additions & 11 deletions cmd/regions.go
@@ -1,9 +1,10 @@
package cmd

import (
"github.com/superfly/flyctl/cmdctx"
"os"

"github.com/superfly/flyctl/cmdctx"

"github.com/superfly/flyctl/api"
"github.com/superfly/flyctl/docstrings"

Expand Down Expand Up @@ -33,6 +34,10 @@ func newRegionsCommand() *Command {
setCmd := BuildCommand(cmd, runRegionsSet, setStrings.Usage, setStrings.Short, setStrings.Long, os.Stdout, requireSession, requireAppName)
setCmd.Args = cobra.MinimumNArgs(1)

setBackupStrings := docstrings.Get("regions.backup")
setBackupCmd := BuildCommand(cmd, runBackupRegionsSet, setBackupStrings.Usage, setBackupStrings.Short, setBackupStrings.Long, os.Stdout, requireSession, requireAppName)
setBackupCmd.Args = cobra.MinimumNArgs(1)

listStrings := docstrings.Get("regions.list")
BuildCommand(cmd, runRegionsList, listStrings.Usage, listStrings.Short, listStrings.Long, os.Stdout, requireSession, requireAppName)

Expand All @@ -45,12 +50,12 @@ func runRegionsAdd(ctx *cmdctx.CmdContext) error {
AllowRegions: ctx.Args,
}

regions, err := ctx.Client.API().ConfigureRegions(input)
regions, backupRegions, err := ctx.Client.API().ConfigureRegions(input)
if err != nil {
return err
}

printRegions(ctx, regions)
printRegions(ctx, regions, backupRegions)

return nil
}
Expand All @@ -61,12 +66,12 @@ func runRegionsRemove(ctx *cmdctx.CmdContext) error {
DenyRegions: ctx.Args,
}

regions, err := ctx.Client.API().ConfigureRegions(input)
regions, backupRegions, err := ctx.Client.API().ConfigureRegions(input)
if err != nil {
return err
}

printRegions(ctx, regions)
printRegions(ctx, regions, backupRegions)

return nil
}
Expand All @@ -76,7 +81,7 @@ func runRegionsSet(ctx *cmdctx.CmdContext) error {
delList := make([]string, 0)

// Get the Region List
regions, err := ctx.Client.API().ListAppRegions(ctx.AppName)
regions, backupRegions, err := ctx.Client.API().ListAppRegions(ctx.AppName)
if err != nil {
return err
}
Expand Down Expand Up @@ -113,28 +118,44 @@ func runRegionsSet(ctx *cmdctx.CmdContext) error {
DenyRegions: delList,
}

newregions, err := ctx.Client.API().ConfigureRegions(input)
newregions, backupRegions, err := ctx.Client.API().ConfigureRegions(input)
if err != nil {
return err
}

printRegions(ctx, newregions)
printRegions(ctx, newregions, backupRegions)

return nil
}

func runRegionsList(ctx *cmdctx.CmdContext) error {
regions, err := ctx.Client.API().ListAppRegions(ctx.AppName)
regions, backupRegions, err := ctx.Client.API().ListAppRegions(ctx.AppName)
if err != nil {
return err
}

printRegions(ctx, regions)
printRegions(ctx, regions, backupRegions)

return nil
}

func printRegions(ctx *cmdctx.CmdContext, regions []api.Region) {
func runBackupRegionsSet(ctx *cmdctx.CmdContext) error {
input := api.ConfigureRegionsInput{
AppID: ctx.AppName,
BackupRegions: ctx.Args,
}

regions, backupRegions, err := ctx.Client.API().ConfigureRegions(input)
if err != nil {
return err
}

printRegions(ctx, regions, backupRegions)

return nil
}

func printRegions(ctx *cmdctx.CmdContext, regions []api.Region, backupRegions []api.Region) {

if ctx.OutputJSON() {
ctx.WriteJSON(regions)
Expand All @@ -157,4 +178,17 @@ func printRegions(ctx *cmdctx.CmdContext, regions []api.Region) {
}
}

if verbose {
ctx.Status("backupRegions", cmdctx.STITLE, "Current Backup Region Pool:")
} else {
ctx.Status("backupRegions", cmdctx.STITLE, "Backup Region: ")
}

for _, r := range backupRegions {
if verbose {
ctx.Statusf("backupRegions", cmdctx.SINFO, " %s %s\n", r.Code, r.Name)
} else {
ctx.Status("backupRegions", cmdctx.SINFO, r.Code)
}
}
}
6 changes: 6 additions & 0 deletions helpgen/flyctlhelp.toml
Expand Up @@ -433,6 +433,12 @@ shortHelp="Sets the region pool with provided regions"
longHelp="""Sets the region pool with provided regions
"""

[regions.backup]
usage="backup REGION ..."
shortHelp="Sets the backup region pool with provided regions"
longHelp="""Sets the backup region pool with provided regions
"""

[regions.list]
usage="list"
shortHelp="Shows the list if regions the app is allowed to run in"
Expand Down

0 comments on commit 2f653fc

Please sign in to comment.