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

This commit is contained in:
2021-09-05 22:04:48 +02:00
parent cc249e8187
commit ec40d88134
15 changed files with 41 additions and 82 deletions
+1 -4
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"))
+1 -5
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 {
+1 -5
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 {
+1 -5
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)
+1 -5
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 {
+1 -5
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 {
+1 -5
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 {
+1 -5
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
+1 -4
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"))
+1 -4
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"))
+5 -16
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)
+1 -5
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 {
+2 -5
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)
+2 -9
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)
+21
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
}