From 3381b8936d9f9c720f55b1cf395933d0cf259f48 Mon Sep 17 00:00:00 2001 From: decentral1se Date: Thu, 24 Feb 2022 15:57:52 +0100 Subject: [PATCH] fix: better error handling & proper context deletion for server rm --- cli/internal/validate.go | 19 ++++++++++++++---- cli/server/remove.go | 42 ++++++++++++++++++++-------------------- 2 files changed, 36 insertions(+), 25 deletions(-) diff --git a/cli/internal/validate.go b/cli/internal/validate.go index 8a6eda0f..a60ccf89 100644 --- a/cli/internal/validate.go +++ b/cli/internal/validate.go @@ -185,12 +185,12 @@ func ValidateSubCmdFlags(c *cli.Context) bool { } // ValidateServer ensures the server name arg is valid. -func ValidateServer(c *cli.Context) (string, error) { +func ValidateServer(c *cli.Context) string { serverName := c.Args().First() serverNames, err := config.ReadServerNames() if err != nil { - return serverName, err + logrus.Fatal(err) } if serverName == "" && !NoInput { @@ -199,17 +199,28 @@ func ValidateServer(c *cli.Context) (string, error) { Options: serverNames, } if err := survey.AskOne(prompt, &serverName); err != nil { - return serverName, err + logrus.Fatal(err) } } + matched := false + for _, name := range serverNames { + if name == serverName { + matched = true + } + } + + if !matched { + ShowSubcommandHelpAndError(c, errors.New("server doesn't exist?")) + } + if serverName == "" { ShowSubcommandHelpAndError(c, errors.New("no server provided")) } logrus.Debugf("validated %s as server argument", serverName) - return serverName, nil + return serverName } // EnsureDNSProvider ensures a DNS provider is chosen. diff --git a/cli/server/remove.go b/cli/server/remove.go index daabe291..b3e0dc3a 100644 --- a/cli/server/remove.go +++ b/cli/server/remove.go @@ -126,21 +126,24 @@ like tears in rain. }, Before: internal.SubCommandBefore, Action: func(c *cli.Context) error { - serverName := c.Args().Get(1) - if serverName != "" { - var err error - serverName, err = internal.ValidateServer(c) - if err != nil { - logrus.Fatal(err) - } - } + serverName := internal.ValidateServer(c) + + warnMsg := `Did not pass -s/--server for actual server deletion, prompting! + +Abra doesn't currently know if it helped you create this server with one of the +3rd party integrations (e.g. Capsul). You have a choice here to actually, +really and finally destroy this server using those integrations. If you want to +do this, choose Yes. + +If you just want to remove the server config files & context, choose No. +` if !rmServer { - logrus.Warn("did not pass -s/--server for actual server deletion, prompting") + logrus.Warn(fmt.Sprintf(warnMsg)) response := false prompt := &survey.Confirm{ - Message: "prompt to actual server deletion?", + Message: "delete actual live server?", } if err := survey.AskOne(prompt, &response); err != nil { logrus.Fatal(err) @@ -164,21 +167,18 @@ like tears in rain. logrus.Fatal(err) } } - } - if serverName != "" { - if err := client.DeleteContext(serverName); err != nil { - logrus.Fatal(err) - } - - if err := os.RemoveAll(filepath.Join(config.SERVERS_DIR, serverName)); err != nil { - logrus.Fatal(err) - } - - logrus.Infof("server at %s has been lost in time, like tears in rain", serverName) + if err := client.DeleteContext(serverName); err != nil { + logrus.Fatal(err) } + if err := os.RemoveAll(filepath.Join(config.SERVERS_DIR, serverName)); err != nil { + logrus.Fatal(err) + } + + logrus.Infof("server at %s has been lost in time, like tears in rain", serverName) + return nil }, }