From 198d0c14e79c59d3f0e8a573d6d4e8a3dd6fe86c Mon Sep 17 00:00:00 2001 From: Jason-ZW Date: Sun, 27 Sep 2020 11:01:24 +0800 Subject: [PATCH] feat(alibaba): delete command asks the user for confirmation Signed-off-by: Jason-ZW --- pkg/providers/alibaba/alibaba.go | 26 +++++++++++++++++--------- pkg/utils/util.go | 23 +++++++++++++++++++++++ 2 files changed, 40 insertions(+), 9 deletions(-) diff --git a/pkg/providers/alibaba/alibaba.go b/pkg/providers/alibaba/alibaba.go index f718929f..d4a5940f 100644 --- a/pkg/providers/alibaba/alibaba.go +++ b/pkg/providers/alibaba/alibaba.go @@ -297,18 +297,26 @@ func (p *Alibaba) Rollback() error { } func (p *Alibaba) DeleteK3sNode(f bool) error { - p.logger = common.NewLogger(common.Debug) - p.logger.Infof("[%s] executing delete cluster logic...\n", p.GetProviderName()) + isConfirmed := true - if err := p.generateClientSDK(); err != nil { - return err + if !f { + isConfirmed = utils.AskForConfirmation(fmt.Sprintf("[%s] are you sure to delete cluster %s", p.GetProviderName(), p.Name)) } - if err := p.deleteCluster(f); err != nil { - return err - } + if isConfirmed { + p.logger = common.NewLogger(common.Debug) + p.logger.Infof("[%s] executing delete cluster logic...\n", p.GetProviderName()) - p.logger.Infof("[%s] successfully excuted delete cluster logic\n", p.GetProviderName()) + if err := p.generateClientSDK(); err != nil { + return err + } + + if err := p.deleteCluster(f); err != nil { + return err + } + + p.logger.Infof("[%s] successfully excuted delete cluster logic\n", p.GetProviderName()) + } return nil } @@ -450,6 +458,7 @@ func (p *Alibaba) deleteCluster(f bool) error { if err == nil && len(ids) > 0 { p.logger.Debugf("[%s] cluster %s will be deleted\n", p.GetProviderName(), p.Name) + p.releaseEipAddresses(false) request := ecs.CreateDeleteInstancesRequest() @@ -460,7 +469,6 @@ func (p *Alibaba) deleteCluster(f bool) error { request.TerminateSubscription = requests.NewBoolean(true) _, err := p.c.DeleteInstances(request) - if err != nil { return fmt.Errorf("[%s] calling deleteInstance error, msg: [%v]", p.GetProviderName(), err) } diff --git a/pkg/utils/util.go b/pkg/utils/util.go index dd8983b3..1f811df9 100644 --- a/pkg/utils/util.go +++ b/pkg/utils/util.go @@ -1,8 +1,14 @@ package utils import ( + "bufio" "crypto/rand" "encoding/hex" + "fmt" + "os" + "strings" + + "github.com/sirupsen/logrus" ) func RandomToken(size int) (string, error) { @@ -30,3 +36,20 @@ func UniqueArray(origin []string) (unique []string) { } return } + +func AskForConfirmation(s string) bool { + reader := bufio.NewReader(os.Stdin) + for { + fmt.Printf("%s [y/n]: ", s) + response, err := reader.ReadString('\n') + if err != nil { + logrus.Fatal(err) + } + response = strings.ToLower(strings.TrimSpace(response)) + if response == "y" || response == "yes" { + return true + } else if response == "n" || response == "no" { + return false + } + } +}