hashicorp/nomad · error
invalid capacity_max: %v
Error message
invalid capacity_max: %v
What it means
decodeHostVolume parses the optional `capacity_max` attribute with parseCapacityBytes and wraps any failure as `invalid capacity_max: %v`, setting RequestedCapacityMaxBytes on the HostVolume. Same byte-size grammar as `capacity`/`capacity_min`.
Source
Thrown at command/volume_create_host.go:252
// 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)
}
}
return vol, nil
}
func parseHostVolumeCapabilities(result *[]*api.HostVolumeCapability, list *ast.ObjectList) error {View on GitHub (pinned to 482b49bf1a)
Solutions
- Set a valid size string, e.g. `capacity_max = "20GiB"`
- Inspect the inner error after `invalid capacity_max:` for the exact reason
- Ensure capacity_max >= capacity_min
- Delete the attribute if a maximum is not needed
Example fix
// before capacity_max = "20 giga" // after capacity_max = "20GB"
Defensive patterns
Strategy: validation
Validate before calling
func validCapacityMax(s string, min int64) error {
v, err := units.RAMInBytes(s)
if err != nil {
return fmt.Errorf("capacity_max %q invalid: %v", s, err)
}
if min > 0 && v < min {
return fmt.Errorf("capacity_max %d is below capacity_min %d", v, min)
}
return nil
} Try / catch
if err != nil {
return fmt.Errorf("capacity_max must be a byte size like 20GiB: %v", err)
} Prevention
- Use recognized size strings (e.g. 20GiB, 20GB)
- Ensure capacity_max >= capacity_min
- Do not use percentages or relative sizes
- Validate the full spec before running volume create
When it happens
Trigger: `nomad volume create` (host) with a spec containing `capacity_max` that cannot be parsed as a byte size (bad unit, negative value, empty string).
Common situations: Typos like "20giga", locale-formatted numbers, or values pasted with units Nomad doesn't recognize; also forgetting that capacity_max must still be a size, not a percentage.
Related errors
- invalid capacity: %v
- invalid capacity_min: %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/2d33e9bb70caeb06.
Report an issue: GitHub.