refactor: centralise app name validation
continuous-integration/drone/push Build is passing Details

This commit is contained in:
decentral1se 2021-09-05 22:04:48 +02:00
parent cc249e8187
commit ec40d88134
No known key found for this signature in database
GPG Key ID: 5E2EF5A63E3718CC
15 changed files with 41 additions and 82 deletions

View File

@ -31,10 +31,7 @@ var appBackupCommand = &cli.Command{
Flags: []cli.Flag{backupAllServicesFlag}, Flags: []cli.Flag{backupAllServicesFlag},
ArgsUsage: "<service>", ArgsUsage: "<service>",
Action: func(c *cli.Context) error { Action: func(c *cli.Context) error {
appName := c.Args().First() appName := internal.ValidateAppNameArg(c)
if appName == "" {
internal.ShowSubcommandHelpAndError(c, errors.New("no app name provided"))
}
if c.Args().Get(1) != "" && backupAllServices { if c.Args().Get(1) != "" && backupAllServices {
internal.ShowSubcommandHelpAndError(c, errors.New("cannot use '<service>' and '--all' together")) internal.ShowSubcommandHelpAndError(c, errors.New("cannot use '<service>' and '--all' together"))

View File

@ -1,7 +1,6 @@
package app package app
import ( import (
"errors"
"os" "os"
"path" "path"
"strings" "strings"
@ -18,10 +17,7 @@ var appCheckCommand = &cli.Command{
Aliases: []string{"c"}, Aliases: []string{"c"},
ArgsUsage: "<service>", ArgsUsage: "<service>",
Action: func(c *cli.Context) error { Action: func(c *cli.Context) error {
appName := c.Args().First() appName := internal.ValidateAppNameArg(c)
if appName == "" {
internal.ShowSubcommandHelpAndError(c, errors.New("no app name provided"))
}
appFiles, err := config.LoadAppFiles("") appFiles, err := config.LoadAppFiles("")
if err != nil { if err != nil {

View File

@ -1,7 +1,6 @@
package app package app
import ( import (
"errors"
"os" "os"
"os/exec" "os/exec"
@ -17,10 +16,7 @@ var appConfigCommand = &cli.Command{
Aliases: []string{"c"}, Aliases: []string{"c"},
Usage: "Edit app config", Usage: "Edit app config",
Action: func(c *cli.Context) error { Action: func(c *cli.Context) error {
appName := c.Args().First() appName := internal.ValidateAppNameArg(c)
if appName == "" {
internal.ShowSubcommandHelpAndError(c, errors.New("no app name provided"))
}
appFiles, err := config.LoadAppFiles("") appFiles, err := config.LoadAppFiles("")
if err != nil { if err != nil {

View File

@ -2,7 +2,6 @@ package app
import ( import (
"context" "context"
"errors"
"fmt" "fmt"
"os" "os"
"strings" "strings"
@ -23,10 +22,7 @@ var appCpCommand = &cli.Command{
ArgsUsage: "<src> <dst>", ArgsUsage: "<src> <dst>",
Usage: "Copy files to/from a running app service", Usage: "Copy files to/from a running app service",
Action: func(c *cli.Context) error { Action: func(c *cli.Context) error {
appName := c.Args().First() appName := internal.ValidateAppNameArg(c)
if appName == "" {
internal.ShowSubcommandHelpAndError(c, errors.New("no app name provided"))
}
src := c.Args().Get(1) src := c.Args().Get(1)
dst := c.Args().Get(2) dst := c.Args().Get(2)

View File

@ -1,7 +1,6 @@
package app package app
import ( import (
"errors"
"fmt" "fmt"
"coopcloud.tech/abra/cli/internal" "coopcloud.tech/abra/cli/internal"
@ -17,10 +16,7 @@ var appDeployCommand = &cli.Command{
Aliases: []string{"d"}, Aliases: []string{"d"},
Usage: "Deploy an app", Usage: "Deploy an app",
Action: func(c *cli.Context) error { Action: func(c *cli.Context) error {
appName := c.Args().First() appName := internal.ValidateAppNameArg(c)
if appName == "" {
internal.ShowSubcommandHelpAndError(c, errors.New("no app name provided"))
}
appFiles, err := config.LoadAppFiles("") appFiles, err := config.LoadAppFiles("")
if err != nil { if err != nil {

View File

@ -2,7 +2,6 @@ package app
import ( import (
"context" "context"
"errors"
"fmt" "fmt"
"io" "io"
"os" "os"
@ -64,10 +63,7 @@ var appLogsCommand = &cli.Command{
ArgsUsage: "[<service>]", ArgsUsage: "[<service>]",
Usage: "Tail app logs", Usage: "Tail app logs",
Action: func(c *cli.Context) error { Action: func(c *cli.Context) error {
appName := c.Args().First() appName := internal.ValidateAppNameArg(c)
if appName == "" {
internal.ShowSubcommandHelpAndError(c, errors.New("no app name provided"))
}
appFiles, err := config.LoadAppFiles("") appFiles, err := config.LoadAppFiles("")
if err != nil { if err != nil {

View File

@ -2,7 +2,6 @@ package app
import ( import (
"context" "context"
"errors"
"strings" "strings"
abraFormatter "coopcloud.tech/abra/cli/formatter" abraFormatter "coopcloud.tech/abra/cli/formatter"
@ -21,10 +20,7 @@ var appPsCommand = &cli.Command{
Usage: "Check app status", Usage: "Check app status",
Aliases: []string{"p"}, Aliases: []string{"p"},
Action: func(c *cli.Context) error { Action: func(c *cli.Context) error {
appName := c.Args().First() appName := internal.ValidateAppNameArg(c)
if appName == "" {
internal.ShowSubcommandHelpAndError(c, errors.New("no app name provided"))
}
appFiles, err := config.LoadAppFiles("") appFiles, err := config.LoadAppFiles("")
if err != nil { if err != nil {

View File

@ -2,7 +2,6 @@ package app
import ( import (
"context" "context"
"errors"
"fmt" "fmt"
"os" "os"
@ -35,10 +34,7 @@ var appRemoveCommand = &cli.Command{
internal.ForceFlag, internal.ForceFlag,
}, },
Action: func(c *cli.Context) error { Action: func(c *cli.Context) error {
appName := c.Args().First() appName := internal.ValidateAppNameArg(c)
if appName == "" {
internal.ShowSubcommandHelpAndError(c, errors.New("no app name provided"))
}
if !internal.Force { if !internal.Force {
response := false response := false

View File

@ -31,10 +31,7 @@ var appRestoreCommand = &cli.Command{
Flags: []cli.Flag{restoreAllServicesFlag}, Flags: []cli.Flag{restoreAllServicesFlag},
ArgsUsage: "<service> [<backup file>]", ArgsUsage: "<service> [<backup file>]",
Action: func(c *cli.Context) error { Action: func(c *cli.Context) error {
appName := c.Args().First() appName := internal.ValidateAppNameArg(c)
if appName == "" {
internal.ShowSubcommandHelpAndError(c, errors.New("no app name provided"))
}
if c.Args().Len() > 1 && restoreAllServices { if c.Args().Len() > 1 && restoreAllServices {
internal.ShowSubcommandHelpAndError(c, errors.New("cannot use <service>/<backup file> and '--all' together")) internal.ShowSubcommandHelpAndError(c, errors.New("cannot use <service>/<backup file> and '--all' together"))

View File

@ -40,10 +40,7 @@ var appRunCommand = &cli.Command{
ArgsUsage: "<service> <args>...", ArgsUsage: "<service> <args>...",
Usage: "Run a command in a service container", Usage: "Run a command in a service container",
Action: func(c *cli.Context) error { Action: func(c *cli.Context) error {
appName := c.Args().First() appName := internal.ValidateAppNameArg(c)
if appName == "" {
internal.ShowSubcommandHelpAndError(c, errors.New("no app name provided"))
}
if c.Args().Len() < 2 { if c.Args().Len() < 2 {
internal.ShowSubcommandHelpAndError(c, errors.New("no <service> provided")) internal.ShowSubcommandHelpAndError(c, errors.New("no <service> provided"))

View File

@ -32,10 +32,7 @@ var appSecretGenerateCommand = &cli.Command{
ArgsUsage: "<secret> <version>", ArgsUsage: "<secret> <version>",
Flags: []cli.Flag{allSecretsFlag, internal.PassFlag}, Flags: []cli.Flag{allSecretsFlag, internal.PassFlag},
Action: func(c *cli.Context) error { Action: func(c *cli.Context) error {
appName := c.Args().First() appName := internal.ValidateAppNameArg(c)
if appName == "" {
internal.ShowSubcommandHelpAndError(c, errors.New("no app name provided"))
}
if c.Args().Get(1) != "" && allSecrets { if c.Args().Get(1) != "" && allSecrets {
internal.ShowSubcommandHelpAndError(c, errors.New("cannot use '<secret> <version>' and '--all' together")) internal.ShowSubcommandHelpAndError(c, errors.New("cannot use '<secret> <version>' and '--all' together"))
@ -91,10 +88,7 @@ var appSecretInsertCommand = &cli.Command{
Flags: []cli.Flag{internal.PassFlag}, Flags: []cli.Flag{internal.PassFlag},
ArgsUsage: "<secret> <version> <data>", ArgsUsage: "<secret> <version> <data>",
Action: func(c *cli.Context) error { Action: func(c *cli.Context) error {
appName := c.Args().First() appName := internal.ValidateAppNameArg(c)
if appName == "" {
internal.ShowSubcommandHelpAndError(c, errors.New("no app name provided"))
}
if c.Args().Len() != 4 { if c.Args().Len() != 4 {
internal.ShowSubcommandHelpAndError(c, errors.New("missing arguments?")) internal.ShowSubcommandHelpAndError(c, errors.New("missing arguments?"))
@ -137,10 +131,7 @@ var appSecretRmCommand = &cli.Command{
Flags: []cli.Flag{allSecretsFlag, internal.PassFlag}, Flags: []cli.Flag{allSecretsFlag, internal.PassFlag},
ArgsUsage: "<secret>", ArgsUsage: "<secret>",
Action: func(c *cli.Context) error { Action: func(c *cli.Context) error {
appName := c.Args().First() appName := internal.ValidateAppNameArg(c)
if appName == "" {
internal.ShowSubcommandHelpAndError(c, errors.New("no app name provided"))
}
if c.Args().Get(1) != "" && allSecrets { if c.Args().Get(1) != "" && allSecrets {
internal.ShowSubcommandHelpAndError(c, errors.New("cannot use '<secret>' and '--all' together")) internal.ShowSubcommandHelpAndError(c, errors.New("cannot use '<secret>' and '--all' together"))
@ -210,10 +201,8 @@ var appSecretLsCommand = &cli.Command{
Usage: "List all secrets", Usage: "List all secrets",
Aliases: []string{"ls"}, Aliases: []string{"ls"},
Action: func(c *cli.Context) error { Action: func(c *cli.Context) error {
appName := c.Args().First() appName := internal.ValidateAppNameArg(c)
if appName == "" {
internal.ShowSubcommandHelpAndError(c, errors.New("no app name provided"))
}
appFiles, err := config.LoadAppFiles("") appFiles, err := config.LoadAppFiles("")
if err != nil { if err != nil {
logrus.Fatal(err) logrus.Fatal(err)

View File

@ -2,7 +2,6 @@ package app
import ( import (
"context" "context"
"errors"
"coopcloud.tech/abra/cli/internal" "coopcloud.tech/abra/cli/internal"
"coopcloud.tech/abra/pkg/client" "coopcloud.tech/abra/pkg/client"
@ -22,10 +21,7 @@ vigilant, as your swarm installation will consider any previously attached
volumes as eligiblef or pruning once undeployed. volumes as eligiblef or pruning once undeployed.
`, `,
Action: func(c *cli.Context) error { Action: func(c *cli.Context) error {
appName := c.Args().First() appName := internal.ValidateAppNameArg(c)
if appName == "" {
internal.ShowSubcommandHelpAndError(c, errors.New("no app name provided"))
}
appFiles, err := config.LoadAppFiles("") appFiles, err := config.LoadAppFiles("")
if err != nil { if err != nil {

View File

@ -1,7 +1,6 @@
package app package app
import ( import (
"errors"
"fmt" "fmt"
"sort" "sort"
"strings" "strings"
@ -46,10 +45,8 @@ var appVersionCommand = &cli.Command{
Aliases: []string{"v"}, Aliases: []string{"v"},
Usage: "Show version of all services in app", Usage: "Show version of all services in app",
Action: func(c *cli.Context) error { Action: func(c *cli.Context) error {
appName := c.Args().First() appName := internal.ValidateAppNameArg(c)
if appName == "" {
internal.ShowSubcommandHelpAndError(c, errors.New("no app name provided"))
}
appFiles, err := config.LoadAppFiles("") appFiles, err := config.LoadAppFiles("")
if err != nil { if err != nil {
logrus.Fatal(err) logrus.Fatal(err)

View File

@ -2,7 +2,6 @@ package app
import ( import (
"context" "context"
"errors"
abraFormatter "coopcloud.tech/abra/cli/formatter" abraFormatter "coopcloud.tech/abra/cli/formatter"
"coopcloud.tech/abra/cli/internal" "coopcloud.tech/abra/cli/internal"
@ -34,10 +33,7 @@ var appVolumeListCommand = &cli.Command{
Usage: "list volumes associated with an app", Usage: "list volumes associated with an app",
Aliases: []string{"ls"}, Aliases: []string{"ls"},
Action: func(c *cli.Context) error { Action: func(c *cli.Context) error {
appName := c.Args().First() appName := internal.ValidateAppNameArg(c)
if appName == "" {
internal.ShowSubcommandHelpAndError(c, errors.New("no app name provided!"))
}
ctx := context.Background() ctx := context.Background()
server := getAppServer(appName) server := getAppServer(appName)
@ -68,10 +64,7 @@ var appVolumeRemoveCommand = &cli.Command{
internal.ForceFlag, internal.ForceFlag,
}, },
Action: func(c *cli.Context) error { Action: func(c *cli.Context) error {
appName := c.Args().First() appName := internal.ValidateAppNameArg(c)
if appName == "" {
internal.ShowSubcommandHelpAndError(c, errors.New("no app name provided!"))
}
server := getAppServer(appName) server := getAppServer(appName)
ctx := context.Background() ctx := context.Background()
volumeList, err := client.GetVolumes(ctx, server, appName) volumeList, err := client.GetVolumes(ctx, server, appName)

View File

@ -3,6 +3,7 @@ package internal
import ( import (
"errors" "errors"
"coopcloud.tech/abra/pkg/config"
"coopcloud.tech/abra/pkg/recipe" "coopcloud.tech/abra/pkg/recipe"
"github.com/sirupsen/logrus" "github.com/sirupsen/logrus"
"github.com/urfave/cli/v2" "github.com/urfave/cli/v2"
@ -22,3 +23,23 @@ func ValidateRecipeArg(c *cli.Context) string {
return recipeName return recipeName
} }
// ValidateAppNameArg ensures the app name arg is valid.
func ValidateAppNameArg(c *cli.Context) string {
appName := c.Args().First()
if appName == "" {
ShowSubcommandHelpAndError(c, errors.New("no app provided"))
}
appFiles, err := config.LoadAppFiles("")
if err != nil {
logrus.Fatal(err)
}
if _, ok := appFiles[appName]; !ok {
logrus.Fatalf("'%s' doesn't exist?", appName)
}
return appName
}