{"record":{"id":"8af986f5e6c0a946","repo":"hashicorp/nomad","slug":"invalid-capacity-min-v","errorCode":null,"errorMessage":"invalid capacity_min: %v","messagePattern":"invalid capacity_min: (.+?)","errorType":"console","errorClass":null,"httpStatus":null,"severity":"error","filePath":"command/volume_create_host.go","lineNumber":247,"sourceCode":"\tdelete(m, \"capacity\")\n\tdelete(m, \"capacity_max\")\n\tdelete(m, \"capacity_min\")\n\tdelete(m, \"type\")\n\n\t// Decode the rest\n\terr = mapstructure.WeakDecode(m, vol)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tcapacity, err := parseCapacityBytes(list.Filter(\"capacity\"))\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"invalid capacity: %v\", err)\n\t}\n\tvol.CapacityBytes = capacity\n\tcapacityMin, err := parseCapacityBytes(list.Filter(\"capacity_min\"))\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"invalid capacity_min: %v\", err)\n\t}\n\tvol.RequestedCapacityMinBytes = capacityMin\n\tcapacityMax, err := parseCapacityBytes(list.Filter(\"capacity_max\"))\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"invalid capacity_max: %v\", err)\n\t}\n\tvol.RequestedCapacityMaxBytes = capacityMax\n\n\tif o := list.Filter(\"constraint\"); len(o.Items) > 0 {\n\t\tif err := parseConstraints(&vol.Constraints, o); err != nil {\n\t\t\treturn nil, fmt.Errorf(\"invalid constraint: %v\", err)\n\t\t}\n\t}\n\tif o := list.Filter(\"capability\"); len(o.Items) > 0 {\n\t\tif err := parseHostVolumeCapabilities(&vol.RequestedCapabilities, o); err != nil {\n\t\t\treturn nil, fmt.Errorf(\"invalid capability: %v\", err)\n\t\t}\n\t}","sourceCodeStart":229,"sourceCodeEnd":265,"githubUrl":"https://github.com/hashicorp/nomad/blob/482b49bf1aec006f089bcfc7e632d8f6ac303e5e/command/volume_create_host.go#L229-L265","documentation":"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`.","triggerScenarios":"`nomad volume create` (host) with a spec where `capacity_min` exists but holds an unparsable byte size, a negative number, or an empty value.","commonSituations":"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.","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"],"exampleFix":"// before\ncapacity_min = \"5gib\"\n\n// after\ncapacity_min = \"5GiB\"","handlingStrategy":"validation","validationCode":"func validCapacityMin(s string, cap int64) error {\n\tv, err := units.RAMInBytes(s)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"capacity_min %q invalid: %v\", s, err)\n\t}\n\tif cap > 0 && v > cap {\n\t\treturn fmt.Errorf(\"capacity_min %d exceeds capacity %d\", v, cap)\n\t}\n\treturn nil\n}","typeGuard":null,"tryCatchPattern":"if err != nil {\n\treturn fmt.Errorf(\"capacity_min must be a byte size like 5GiB: %v\", err)\n}","preventionTips":["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"],"tags":["hcl","nomad","validation","bytes"],"backgroundTag":"invalid-capacity-string","analyzedSha":"482b49bf1aec006f089bcfc7e632d8f6ac303e5e","analyzedAt":"2026-09-04T07:54:14.808Z","contentChangedAt":"2026-09-04T07:54:14.808Z","schemaVersion":2},"datasetVersion":"2026-09-08T10:18:20.063Z"}