forked from toolshed/abra
		
	refactor: centralise app name validation
This commit is contained in:
		@ -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,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,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 {
 | 
			
		||||
 | 
			
		||||
@ -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,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 {
 | 
			
		||||
 | 
			
		||||
@ -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 {
 | 
			
		||||
 | 
			
		||||
@ -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 {
 | 
			
		||||
 | 
			
		||||
@ -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
 | 
			
		||||
 | 
			
		||||
@ -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"))
 | 
			
		||||
 | 
			
		||||
@ -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"))
 | 
			
		||||
 | 
			
		||||
@ -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)
 | 
			
		||||
 | 
			
		||||
@ -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 {
 | 
			
		||||
 | 
			
		||||
@ -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,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)
 | 
			
		||||
 | 
			
		||||
@ -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
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user