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},
ArgsUsage: "<service>",
Action: func(c *cli.Context) error {
appName := c.Args().First()
if appName == "" {
internal.ShowSubcommandHelpAndError(c, errors.New("no app name provided"))
}
appName := internal.ValidateAppNameArg(c)
if c.Args().Get(1) != "" && backupAllServices {
internal.ShowSubcommandHelpAndError(c, errors.New("cannot use '<service>' and '--all' together"))

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -31,10 +31,7 @@ var appRestoreCommand = &cli.Command{
Flags: []cli.Flag{restoreAllServicesFlag},
ArgsUsage: "<service> [<backup file>]",
Action: func(c *cli.Context) error {
appName := c.Args().First()
if appName == "" {
internal.ShowSubcommandHelpAndError(c, errors.New("no app name provided"))
}
appName := internal.ValidateAppNameArg(c)
if c.Args().Len() > 1 && restoreAllServices {
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>...",
Usage: "Run a command in a service container",
Action: func(c *cli.Context) error {
appName := c.Args().First()
if appName == "" {
internal.ShowSubcommandHelpAndError(c, errors.New("no app name provided"))
}
appName := internal.ValidateAppNameArg(c)
if c.Args().Len() < 2 {
internal.ShowSubcommandHelpAndError(c, errors.New("no <service> provided"))

View File

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

View File

@ -2,7 +2,6 @@ package app
import (
"context"
"errors"
"coopcloud.tech/abra/cli/internal"
"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.
`,
Action: func(c *cli.Context) error {
appName := c.Args().First()
if appName == "" {
internal.ShowSubcommandHelpAndError(c, errors.New("no app name provided"))
}
appName := internal.ValidateAppNameArg(c)
appFiles, err := config.LoadAppFiles("")
if err != nil {

View File

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

View File

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

View File

@ -3,6 +3,7 @@ package internal
import (
"errors"
"coopcloud.tech/abra/pkg/config"
"coopcloud.tech/abra/pkg/recipe"
"github.com/sirupsen/logrus"
"github.com/urfave/cli/v2"
@ -22,3 +23,23 @@ func ValidateRecipeArg(c *cli.Context) string {
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
}