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
- Fix the value to a valid size string such as `capacity_min = "5GiB"`
- Read the underlying error after the prefix for the specific parse failure
- Ensure capacity_min <= capacity_max if both are set
- 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
- Use accepted unit suffixes exactly (e.g. GiB, not gib)
- Ensure capacity_min <= capacity_max
- Omit capacity_min entirely if a minimum is not required
- Add a pre-submit validation step for all capacity fields
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
- invalid capacity: %v
- invalid capacity_max: %v
- <combined HCL diagnostics from str.String()>
- invalid variables limit: %v
- %s must be integer; got (%T) %[2]v
AI-assisted analysis of hashicorp/nomad@482b49bf1a (2026-09-04).
Data as JSON: /api/errors/8af986f5e6c0a946.
Report an issue: GitHub.