From 8aeee521e60a4063d825e852e85bf0674d800123 Mon Sep 17 00:00:00 2001 From: Dave Chen Date: Wed, 6 Jul 2022 18:06:43 +0800 Subject: [PATCH] kubeadm: De-dup the confirmation on the interactive cmds Signed-off-by: Dave Chen --- cmd/kubeadm/app/cmd/phases/reset/preflight.go | 13 ++---------- cmd/kubeadm/app/cmd/upgrade/apply.go | 4 +++- cmd/kubeadm/app/cmd/upgrade/common.go | 19 ----------------- cmd/kubeadm/app/cmd/util/cmdutil.go | 21 +++++++++++++++++++ 4 files changed, 26 insertions(+), 31 deletions(-) diff --git a/cmd/kubeadm/app/cmd/phases/reset/preflight.go b/cmd/kubeadm/app/cmd/phases/reset/preflight.go index 227f8111a92..48cee968080 100644 --- a/cmd/kubeadm/app/cmd/phases/reset/preflight.go +++ b/cmd/kubeadm/app/cmd/phases/reset/preflight.go @@ -17,15 +17,14 @@ limitations under the License. package phases import ( - "bufio" "errors" "fmt" - "strings" "k8s.io/klog/v2" "k8s.io/kubernetes/cmd/kubeadm/app/cmd/options" "k8s.io/kubernetes/cmd/kubeadm/app/cmd/phases/workflow" + "k8s.io/kubernetes/cmd/kubeadm/app/cmd/util" "k8s.io/kubernetes/cmd/kubeadm/app/preflight" ) @@ -53,15 +52,7 @@ func runPreflight(c workflow.RunData) error { if !r.ForceReset() && !r.DryRun() { klog.Warning("[reset] WARNING: Changes made to this host by 'kubeadm init' or 'kubeadm join' will be reverted.") - fmt.Print("[reset] Are you sure you want to proceed? [y/N]: ") - s := bufio.NewScanner(r.InputReader()) - s.Scan() - if err := s.Err(); err != nil { - return err - } - if strings.ToLower(s.Text()) != "y" { - return errors.New("aborted reset operation") - } + return util.InteractivelyConfirmAction("reset", "Are you sure you want to proceed?", r.InputReader()) } fmt.Println("[preflight] Running pre-flight checks") diff --git a/cmd/kubeadm/app/cmd/upgrade/apply.go b/cmd/kubeadm/app/cmd/upgrade/apply.go index ee99707aa27..4687c5bcdd2 100644 --- a/cmd/kubeadm/app/cmd/upgrade/apply.go +++ b/cmd/kubeadm/app/cmd/upgrade/apply.go @@ -18,6 +18,7 @@ package upgrade import ( "fmt" + "os" "github.com/pkg/errors" "github.com/spf13/cobra" @@ -30,6 +31,7 @@ import ( kubeadmapi "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm" "k8s.io/kubernetes/cmd/kubeadm/app/cmd/options" + cmdutil "k8s.io/kubernetes/cmd/kubeadm/app/cmd/util" kubeadmconstants "k8s.io/kubernetes/cmd/kubeadm/app/constants" "k8s.io/kubernetes/cmd/kubeadm/app/features" "k8s.io/kubernetes/cmd/kubeadm/app/phases/upgrade" @@ -133,7 +135,7 @@ func runApply(flags *applyFlags, args []string) error { // If the current session is interactive, ask the user whether they really want to upgrade. if flags.sessionIsInteractive() { - if err := InteractivelyConfirmUpgrade("Are you sure you want to proceed with the upgrade?"); err != nil { + if err := cmdutil.InteractivelyConfirmAction("upgrade", "Are you sure you want to proceed?", os.Stdin); err != nil { return err } } diff --git a/cmd/kubeadm/app/cmd/upgrade/common.go b/cmd/kubeadm/app/cmd/upgrade/common.go index 98421c8a8c8..d2eed654281 100644 --- a/cmd/kubeadm/app/cmd/upgrade/common.go +++ b/cmd/kubeadm/app/cmd/upgrade/common.go @@ -19,7 +19,6 @@ package upgrade import ( "bufio" "bytes" - "fmt" "io" "os" "strings" @@ -321,21 +320,3 @@ func getWaiter(dryRun bool, client clientset.Interface, timeout time.Duration) a } return apiclient.NewKubeWaiter(client, timeout, os.Stdout) } - -// InteractivelyConfirmUpgrade asks the user whether they _really_ want to upgrade. -func InteractivelyConfirmUpgrade(question string) error { - - fmt.Printf("[upgrade/confirm] %s [y/N]: ", question) - - scanner := bufio.NewScanner(os.Stdin) - scanner.Scan() - if err := scanner.Err(); err != nil { - return errors.Wrap(err, "couldn't read from standard input") - } - answer := scanner.Text() - if strings.ToLower(answer) == "y" || strings.ToLower(answer) == "yes" { - return nil - } - - return errors.New("won't proceed; the user didn't answer (Y|y) in order to continue") -} diff --git a/cmd/kubeadm/app/cmd/util/cmdutil.go b/cmd/kubeadm/app/cmd/util/cmdutil.go index 7144b062708..45e28eeea72 100644 --- a/cmd/kubeadm/app/cmd/util/cmdutil.go +++ b/cmd/kubeadm/app/cmd/util/cmdutil.go @@ -17,6 +17,11 @@ limitations under the License. package util import ( + "bufio" + "fmt" + "io" + "strings" + "github.com/pkg/errors" "github.com/spf13/cobra" "github.com/spf13/pflag" @@ -100,3 +105,19 @@ func DefaultInitConfiguration() *kubeadmapiv1.InitConfiguration { } return initCfg } + +// InteractivelyConfirmAction asks the user whether they _really_ want to take the action. +func InteractivelyConfirmAction(action, question string, r io.Reader) error { + fmt.Printf("[%s] %s [y/N]: ", action, question) + scanner := bufio.NewScanner(r) + scanner.Scan() + if err := scanner.Err(); err != nil { + return errors.Wrap(err, "couldn't read from standard input") + } + answer := scanner.Text() + if strings.ToLower(answer) == "y" || strings.ToLower(answer) == "yes" { + return nil + } + + return errors.New("won't proceed; the user didn't answer (Y|y) in order to continue") +}