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

  1. Answer the prompt with `y` or `yes`.
  2. Pass the non-interactive confirm flag for the command (e.g. `kubeadm reset --yes` or `--force`, depending on the subcommand) to skip the prompt.
  3. 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

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


AI-assisted analysis of kubernetes/kubernetes@b882c60b40 (2026-08-07). Data as JSON: /api/errors/d6e8c5f2b85cc5f5. Report an issue: GitHub.