{"record":{"id":"2d33e9bb70caeb06","repo":"hashicorp/nomad","slug":"invalid-capacity-max-v","errorCode":null,"errorMessage":"invalid capacity_max: %v","messagePattern":"invalid capacity_max: (.+?)","errorType":"console","errorClass":null,"httpStatus":null,"severity":"error","filePath":"command/volume_create_host.go","lineNumber":252,"sourceCode":"\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}\n\n\treturn vol, nil\n}\n\nfunc parseHostVolumeCapabilities(result *[]*api.HostVolumeCapability, list *ast.ObjectList) error {","sourceCodeStart":234,"sourceCodeEnd":270,"githubUrl":"https://github.com/hashicorp/nomad/blob/482b49bf1aec006f089bcfc7e632d8f6ac303e5e/command/volume_create_host.go#L234-L270","documentation":"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`.","triggerScenarios":"`nomad volume create` (host) with a spec containing `capacity_max` that cannot be parsed as a byte size (bad unit, negative value, empty string).","commonSituations":"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.","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"],"exampleFix":"// before\ncapacity_max = \"20 giga\"\n\n// after\ncapacity_max = \"20GB\"","handlingStrategy":"validation","validationCode":"func validCapacityMax(s string, min int64) error {\n\tv, err := units.RAMInBytes(s)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"capacity_max %q invalid: %v\", s, err)\n\t}\n\tif min > 0 && v < min {\n\t\treturn fmt.Errorf(\"capacity_max %d is below capacity_min %d\", v, min)\n\t}\n\treturn nil\n}","typeGuard":null,"tryCatchPattern":"if err != nil {\n\treturn fmt.Errorf(\"capacity_max must be a byte size like 20GiB: %v\", err)\n}","preventionTips":["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"],"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"}