lima-vm/lima · error

field `probe[%d].file.digest` support is not yet implemented

Error message

field `probe[%d].file.digest` support is not yet implemented

What it means

A probe entry declares a `file.digest`, which is parsed but not yet implemented; probe file verification is currently unsupported.

Source

Thrown at pkg/limayaml/validate.go:295

	needsContainerdArchives := (y.Containerd.User != nil && *y.Containerd.User) || (y.Containerd.System != nil && *y.Containerd.System)
	if needsContainerdArchives {
		if len(y.Containerd.Archives) == 0 {
			errs = errors.Join(errs, errors.New("field `containerd.archives` must be provided"))
		}
		for i, f := range y.Containerd.Archives {
			err := validateFileObject(f, fmt.Sprintf("containerd.archives[%d]", i))
			if err != nil {
				errs = errors.Join(errs, err)
			}
		}
	}
	for i, p := range y.Probes {
		if p.File != nil {
			if p.File.URL != "" {
				errs = errors.Join(errs, fmt.Errorf("field `probe[%d].file.url` must be empty during validation (script should already be embedded)", i))
			}
			if p.File.Digest != nil {
				errs = errors.Join(errs, fmt.Errorf("field `probe[%d].file.digest` support is not yet implemented", i))
			}
		}
		if p.Script != nil && !strings.HasPrefix(*p.Script, "#!") {
			errs = errors.Join(errs, fmt.Errorf("field `probe[%d].script` must start with a '#!' line", i))
		}
		switch p.Mode {
		case limatype.ProbeModeReadiness:
		default:
			errs = errors.Join(errs, fmt.Errorf("field `probe[%d].mode` can only be %#q", i, limatype.ProbeModeReadiness))
		}
	}
	for i, rule := range y.PortForwards {
		field := fmt.Sprintf("portForwards[%d]", i)
		if *rule.GuestIPMustBeZero && !rule.GuestIP.Equal(net.IPv4zero) {
			errs = errors.Join(errs, fmt.Errorf("field `%s.guestIPMustBeZero` can only be true when field `%s.guestIP` is 0.0.0.0", field, field))
		}
		if rule.GuestPort != 0 {
			if rule.GuestSocket != "" {

View on GitHub (pinned to dd909d0973)

Solutions

  1. Remove the `digest:` field from the probe's `file` entry
  2. Embed the script inline via `script:` with a `#!` shebang instead of using file+digest

Example fix

// before
probes:
- file:
    url: https://example.com/check.sh
    digest: sha256:abc...
// after
probes:
- script: |
    #!/bin/sh
    echo ok
Defensive patterns

Strategy: validation

Validate before calling

for i, p := range cfg.Probes {
    if p.File != nil && p.File.Digest != nil {
        return fmt.Errorf("probe[%d].file.digest is unsupported; remove it", i)
    }
}

Type guard

func probeHasDigest(p limatype.Probe) bool {
    return p.File != nil && p.File.Digest != nil
}

Prevention

When it happens

Trigger: Calling limactl validate/start/etc. with a probe entry whose `file:` object includes a `digest:` field.

Common situations: Copying a file object with digest from `containerd.archives` or `additionalDisks`-style examples into a probe; hoping to verify an integrity-checked probe script.

Related errors


AI-assisted analysis of lima-vm/lima@dd909d0973 (2026-09-01). Data as JSON: /api/errors/049678732c8c4d7d. Report an issue: GitHub.