{"record":{"id":"77f9bb47afc0ba9d","repo":"hashicorp/nomad","slug":"invalid-capacity-max-v-77f9bb","errorCode":null,"errorMessage":"invalid capacity_max: %v","messagePattern":"invalid capacity_max: (.+?)","errorType":"console","errorClass":null,"httpStatus":null,"severity":"error","filePath":"command/volume_register_csi.go","lineNumber":83,"sourceCode":"\tdelete(m, \"capacity_max\")\n\tdelete(m, \"capacity_min\")\n\tdelete(m, \"topology_request\")\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\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.RequestedCapacityMin = 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.RequestedCapacityMax = capacityMax\n\n\tcapObj := list.Filter(\"capability\")\n\tif len(capObj.Items) > 0 {\n\n\t\tfor _, o := range capObj.Elem().Items {\n\t\t\tvalid := []string{\"access_mode\", \"attachment_mode\"}\n\t\t\tif err := helper.CheckHCLKeys(o.Val, valid); err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\n\t\t\tot, ok := o.Val.(*ast.ObjectType)\n\t\t\tif !ok {\n\t\t\t\tbreak\n\t\t\t}\n\n\t\t\tvar m map[string]any","sourceCodeStart":65,"sourceCodeEnd":101,"githubUrl":"https://github.com/hashicorp/nomad/blob/482b49bf1aec006f089bcfc7e632d8f6ac303e5e/command/volume_register_csi.go#L65-L101","documentation":"Identical to the capacity_min case but for the `capacity_max` field: parseCapacityBytes failed on the value of `capacity_max` in the volume spec, and csiDecodeVolume wraps the failure as `invalid capacity_max: <reason>`. The value must be a byte size string or empty.","triggerScenarios":"`nomad volume register` with a spec containing capacity_max values humanize.ParseBytes rejects, e.g. \"unlimited\", \"2TBx\", \"5 gb\" with odd spacing like \"5 g b\".","commonSituations":"Assuming \"unlimited\" or \"-1\" are accepted; typo'd unit suffixes; pasting values with surrounding non-numeric text.","solutions":["Use a valid size string such as \"10GiB\", \"2000MB\", or a raw byte integer for capacity_max.","Ensure capacity_max >= capacity_min semantics on the storage backend if both are set.","Omit capacity_max (or leave it empty) when no maximum is needed."],"exampleFix":"// before\ncapacity_max = \"unlimited\"\n// after\ncapacity_max = \"100GiB\"","handlingStrategy":"validation","validationCode":"func validCapacityMax(v string, min string) error {\n\tif v == \"\" { return nil }\n\tb, err := humanize.ParseBytes(strings.Trim(v, \"\\\"\"))\n\tif err != nil { return fmt.Errorf(\"capacity_max %q invalid: %v\", v, err) }\n\tm, _ := humanize.ParseBytes(strings.Trim(min, \"\\\"\"))\n\tif b < m { return fmt.Errorf(\"capacity_max < capacity_min\") }\n\treturn nil\n}","typeGuard":null,"tryCatchPattern":"if err != nil {\n\tif strings.HasPrefix(err.Error(), \"invalid capacity_max\") {\n\t\treturn fmt.Errorf(\"fix capacity_max to e.g. 100GiB: %v\", err)\n\t}\n\treturn err\n}","preventionTips":["Never write \"unlimited\" or \"-1\" for capacity_max; omit the key instead.","Keep capacity_max >= capacity_min.","Share a validated spec template across the team."],"tags":["hcl","csi","validation","nomad-cli"],"backgroundTag":"invalid-capacity-value","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"}