k3s-io/k3s · error

missing argument; 'token delete' is missing token

Error message

missing argument; 'token delete' is missing token

What it means

`k3s token delete` requires at least one bootstrap token (full token or token ID) as a positional argument. The check runs before any kubeconfig or API work, so the command never reaches the cluster with zero args.

Source

Thrown at pkg/cli/token/token.go:105

	if err != nil {
		return err
	}

	fmt.Println(token)
	return nil
}

func Delete(app *cli.Context) error {
	if err := cmds.InitLogging(); err != nil {
		return err
	}
	return deleteToken(app, &cmds.TokenConfig)
}

func deleteToken(app *cli.Context, cfg *cmds.Token) error {
	args := app.Args()
	if args.Len() < 1 {
		return errors.New("missing argument; 'token delete' is missing token")
	}

	cfg.Kubeconfig = util.GetKubeConfigPath(cfg.Kubeconfig)
	client, err := util.GetClientSet(cfg.Kubeconfig)
	if err != nil {
		return err
	}

	for _, token := range args.Slice() {
		if !bootstraputil.IsValidBootstrapTokenID(token) {
			bts, err := kubeadm.NewBootstrapTokenString(token)
			if err != nil {
				return fmt.Errorf("given token didn't match pattern %q or %q", bootstrapapi.BootstrapTokenIDPattern, bootstrapapi.BootstrapTokenPattern)
			}
			token = bts.ID
		}
		secretName := bootstraputil.BootstrapTokenSecretName(token)
		if err := client.CoreV1().Secrets(metav1.NamespaceSystem).Delete(app.Context, secretName, metav1.DeleteOptions{}); err != nil {

View on GitHub (pinned to 6ba341e396)

Solutions

  1. List then delete: `k3s token list` followed by `k3s token delete <token-id>` (e.g. `k3s token delete abcdef.0123456789abcdef`)
  2. Quote and default-check variables in scripts: `[ -n "$TOKEN_ID" ] || exit 1` before invoking
  3. Use `k3s token delete --help` to confirm the expected positional format

Example fix

# before
k3s token delete

# after
k3s token delete abcdef.0123456789abcdef
Defensive patterns

Strategy: validation

Validate before calling

#!/bin/sh
# wrap token deletion
[ "$#" -ge 1 ] || { echo "usage: $0 <token-id>..."; exit 1; }
exec k3s token delete "$@"

Prevention

When it happens

Trigger: Running `k3s token delete` with no arguments; wrapping scripts that pass an unset variable (e.g. `k3s token delete "$TOKEN_ID"` where TOKEN_ID is empty and unquoted expansion drops the arg).

Common situations: Shell scripts deleting expired tokens where the variable is empty; CI jobs parameterized by token ID that received no value.

Related errors


AI-assisted analysis of k3s-io/k3s@6ba341e396 (2026-08-15). Data as JSON: /api/errors/5b7adddd42e24d48. Report an issue: GitHub.