lima-vm/lima · error
field `provision[%d].overwrite` can only be set when mode is
Error message
field `provision[%d].overwrite` can only be set when mode is %#q
What it means
`overwrite` controls whether a data-mode file write replaces an existing file, so it is only valid when `mode` is "data". Setting it on script, boot, dependency, ansible, or yq entries is rejected by Validate() to keep per-mode field usage strict. The rendered message names `"data"` as the only allowed mode.
Source
Thrown at pkg/limayaml/validate.go:243
if p.Mode == limatype.ProvisionModeData && p.Content == nil {
errs = errors.Join(errs, fmt.Errorf("field `provision[%d].content` must not be empty when mode is %#q", i, p.Mode))
}
if p.Mode == limatype.ProvisionModeYQ && p.Expression == nil {
errs = errors.Join(errs, fmt.Errorf("field `provision[%d].expression` must not be empty when mode is %#q", i, p.Mode))
}
// FillDefaults makes sure that p.Permissions is not nil
if _, err := strconv.ParseInt(*p.Permissions, 8, 64); err != nil {
errs = errors.Join(errs, fmt.Errorf("field `provision[%d].permissions` must be an octal number: %w", i, err))
}
default:
if (p.Script == nil || *p.Script == "") && p.Mode != limatype.ProvisionModeAnsible {
errs = errors.Join(errs, fmt.Errorf("field `provision[%d].script` must not be empty", i))
}
if p.Content != nil {
errs = errors.Join(errs, fmt.Errorf("field `provision[%d].content` can only be set when mode is %#q", i, limatype.ProvisionModeData))
}
if p.Overwrite != nil {
errs = errors.Join(errs, fmt.Errorf("field `provision[%d].overwrite` can only be set when mode is %#q", i, limatype.ProvisionModeData))
}
if p.Owner != nil {
errs = errors.Join(errs, fmt.Errorf("field `provision[%d].owner` can only be set when mode is %#q", i, limatype.ProvisionModeData))
}
if p.Path != nil {
errs = errors.Join(errs, fmt.Errorf("field `provision[%d].path` can only be set when mode is %#q, or %#q", i, limatype.ProvisionModeData, limatype.ProvisionModeYQ))
}
if p.Permissions != nil {
errs = errors.Join(errs, fmt.Errorf("field `provision[%d].permissions` can only be set when mode is %#q, or %#q", i, limatype.ProvisionModeData, limatype.ProvisionModeYQ))
}
if p.Format != nil {
errs = errors.Join(errs, fmt.Errorf("field `provision[%d].format` can only be set when mode is %#q", i, limatype.ProvisionModeYQ))
}
}
if p.Playbook != "" {
if p.Mode != limatype.ProvisionModeAnsible {
errs = errors.Join(errs, fmt.Errorf("field `provision[%d].playbook can only be set when mode is %#q", i, limatype.ProvisionModeAnsible))
}View on GitHub (pinned to dd909d0973)
Solutions
- Add `mode: data` (with `path` and `content`) if overwrite semantics are needed
- Delete the `overwrite` field from non-data entries
- Split into two entries: one data entry for file writing, one script entry for commands
Example fix
# before
provision:
- mode: yq
path: /etc/foo.yaml
overwrite: true
expression: .x = 1
# after
provision:
- mode: yq
path: /etc/foo.yaml
expression: .x = 1 Defensive patterns
Strategy: validation
Validate before calling
// Go: overwrite is data-mode only
for i, p := range cfg.Provision {
mode := limatype.ProvisionModeSystem
if p.Mode != nil { mode = *p.Mode }
if p.Overwrite != nil && mode != limatype.ProvisionModeData {
return fmt.Errorf("provision[%d]: overwrite requires mode data", i)
}
} Type guard
func overwriteAllowed(p limatype.Provision) bool {
return p.Overwrite == nil || (p.Mode != nil && *p.Mode == limatype.ProvisionModeData)
} Prevention
- Only add overwrite to entries that also have `content` and `path`
- Do not assume yq entries overwrite in-place control via `overwrite`
- Run `limactl validate` before limactl create/edit
When it happens
Trigger: A provision entry with any mode other than data that sets `overwrite: true/false`, during create/start/restart/edit/apply/template validation.
Common situations: Adding overwrite to a yq entry expecting it to control in-place editing; bulk-copied data-entry keys applied to script entries; template tools emitting overwrite for all provision entries.
Related errors
- field `provision[%d].content` can only be set when mode is %
- field `provision[%d].owner` can only be set when mode is %#q
- field `provision[%d].path` can only be set when mode is %#q,
- field `provision[%d].permissions` can only be set when mode
- field `provision[%d].format` can only be set when mode is %#
AI-assisted analysis of lima-vm/lima@dd909d0973 (2026-09-01).
Data as JSON: /api/errors/c2c7a2ca34b1c5f2.
Report an issue: GitHub.