kubernetes/kubernetes · warning
won't proceed; the user didn't answer (Y|y) in order to cont
Error message
won't proceed; the user didn't answer (Y|y) in order to continue
What it means
Returned by `InteractivelyConfirmAction` (cmdutil.go:99-112) when the user's response to the `[action] question [y/N]:` prompt is not `y` or `yes` (case-insensitive). This is the deliberate safety gate for destructive operations like `kubeadm reset`.
Source
Thrown at cmd/kubeadm/app/cmd/util/cmdutil.go:111
criSocket, options.NodeCRISocket, *criSocket,
"Path to the CRI socket to connect. If empty kubeadm will try to auto-detect this value; use this option only if you have more than one CRI installed or if you have non-standard CRI socket.",
)
}
// 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.EqualFold(answer, "y") || strings.EqualFold(answer, "yes") {
return nil
}
return errors.New("won't proceed; the user didn't answer (Y|y) in order to continue")
}
// ValueFromFlagsOrConfig checks if the "name" flag has been set. If yes, it returns the value of the flag, otherwise it returns the value from config.
func ValueFromFlagsOrConfig(flagSet *pflag.FlagSet, name string, cfgValue interface{}, flagValue interface{}) interface{} {
if flagSet.Changed(name) {
return flagValue
}
// covert the nil to false if this is a bool, this will help to get rid of nil dereference error.
cfg, ok := cfgValue.(*bool)
if ok && cfg == nil {
return ptr.To(false)
}
// assume config has all the defaults set correctly.
return cfgValue
}
View on GitHub (pinned to b882c60b40)
Solutions
- Answer the prompt with `y` or `yes`.
- Pass the non-interactive confirm flag for the command (e.g. `kubeadm reset --yes` or `--force`, depending on the subcommand) to skip the prompt.
- Pipe an affirmative: `echo y | kubeadm reset` (only in trusted automation).
Example fix
# before kubeadm reset # then press Enter at prompt # after kubeadm reset --yes
Defensive patterns
Strategy: validation
Validate before calling
// in non-interactive runs, pass the confirm flag and skip InteractivelyConfirmAction
if nonInteractive {
// use --yes / --force instead of relying on stdin
} else {
// ensure stdin will receive 'y'
} Type guard
func isAffirmative(answer string) bool {
a := strings.ToLower(strings.TrimSpace(answer))
return a == "y" || a == "yes"
} Prevention
- Pass --yes / --force in CI and scripts to avoid stdin dependence.
- Document that empty input defaults to No.
- When piping, guarantee an affirmative 'y' is the first stdin line.
When it happens
Trigger: Any kubeadm command that calls `InteractivelyConfirmAction` (reset, certain init/upgrade confirmations) where stdin receives anything other than `y`/`yes` — including `n`, empty input, EOF, or piped non-affirmative content.
Common situations: Operators pressing Enter (empty = default N), typing `no`, or piping a script's stdout into kubeadm's stdin that does not contain `y`. Also when running kubeadm non-interactively without `--yes`/`-y`/`--force` so stdin is a TTY returning EOF.
Related errors
- shell not specified
- too many arguments. expected only the shell type
- the --old-config flag is mandatory
- cannot use --certificate-key without --print-join-command
- empty manifest path
AI-assisted analysis of kubernetes/kubernetes@b882c60b40 (2026-08-07).
Data as JSON: /api/errors/d6e8c5f2b85cc5f5.
Report an issue: GitHub.