hashicorp/nomad · error

invalid capacity_min: %v

Error message

invalid capacity_min: %v

What it means

decodeHostVolume parses the optional `capacity_min` attribute with parseCapacityBytes; any failure is wrapped as `invalid capacity_min: %v`. This field sets RequestedCapacityMinBytes for host volumes and follows the same byte-size grammar as `capacity`.

Source

Thrown at command/volume_create_host.go:247

	delete(m, "capacity")
	delete(m, "capacity_max")
	delete(m, "capacity_min")
	delete(m, "type")

	// Decode the rest
	err = mapstructure.WeakDecode(m, vol)
	if err != nil {
		return nil, err
	}

	capacity, err := parseCapacityBytes(list.Filter("capacity"))
	if err != nil {
		return nil, fmt.Errorf("invalid capacity: %v", err)
	}
	vol.CapacityBytes = capacity
	capacityMin, err := parseCapacityBytes(list.Filter("capacity_min"))
	if err != nil {
		return nil, fmt.Errorf("invalid capacity_min: %v", err)
	}
	vol.RequestedCapacityMinBytes = capacityMin
	capacityMax, err := parseCapacityBytes(list.Filter("capacity_max"))
	if err != nil {
		return nil, fmt.Errorf("invalid capacity_max: %v", err)
	}
	vol.RequestedCapacityMaxBytes = capacityMax

	if o := list.Filter("constraint"); len(o.Items) > 0 {
		if err := parseConstraints(&vol.Constraints, o); err != nil {
			return nil, fmt.Errorf("invalid constraint: %v", err)
		}
	}
	if o := list.Filter("capability"); len(o.Items) > 0 {
		if err := parseHostVolumeCapabilities(&vol.RequestedCapabilities, o); err != nil {
			return nil, fmt.Errorf("invalid capability: %v", err)
		}
	}

View on GitHub (pinned to 482b49bf1a)

Solutions

  1. Fix the value to a valid size string such as `capacity_min = "5GiB"`
  2. Read the underlying error after the prefix for the specific parse failure
  3. Ensure capacity_min <= capacity_max if both are set
  4. Remove the attribute if a minimum is not required

Example fix

// before
capacity_min = "5gib"

// after
capacity_min = "5GiB"
Defensive patterns

Strategy: validation

Validate before calling

func validCapacityMin(s string, cap int64) error {
	v, err := units.RAMInBytes(s)
	if err != nil {
		return fmt.Errorf("capacity_min %q invalid: %v", s, err)
	}
	if cap > 0 && v > cap {
		return fmt.Errorf("capacity_min %d exceeds capacity %d", v, cap)
	}
	return nil
}

Try / catch

if err != nil {
	return fmt.Errorf("capacity_min must be a byte size like 5GiB: %v", err)
}

Prevention

When it happens

Trigger: `nomad volume create` (host) with a spec where `capacity_min` exists but holds an unparsable byte size, a negative number, or an empty value.

Common situations: Same unit typos as capacity ("5gib" vs "5GiB"), copy-pasting a value with a trailing character, or mixing up ordering so capacity_min > capacity_max.

Related errors


AI-assisted analysis of hashicorp/nomad@482b49bf1a (2026-09-04). Data as JSON: /api/errors/8af986f5e6c0a946. Report an issue: GitHub.