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
- List then delete: `k3s token list` followed by `k3s token delete <token-id>` (e.g. `k3s token delete abcdef.0123456789abcdef`)
- Quote and default-check variables in scripts: `[ -n "$TOKEN_ID" ] || exit 1` before invoking
- 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
- Check positional args in wrapper scripts before exec'ing k3s
- Use `k3s token list` output piped (never hand-typed) into delete
- Set `set -u` in shell wrappers so unset vars fail loudly
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
- --token is required
- invalid output format: {cfg.Output}
- --server is required
- service %s is not recognized
- no snapshots given for removal
AI-assisted analysis of k3s-io/k3s@6ba341e396 (2026-08-15).
Data as JSON: /api/errors/5b7adddd42e24d48.
Report an issue: GitHub.