{"record":{"id":"a24f2df548d807b3","repo":"kubernetes/kops","slug":"error-hashing-manifest-location-v","errorCode":null,"errorMessage":"error hashing manifest location: %v","messagePattern":"error hashing manifest location: (.+?)","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"info","filePath":"channels/pkg/channels/addons.go","lineNumber":72,"sourceCode":"\t}\n\n\tapiObject := &api.Addons{}\n\tif len(objects) == 0 {\n\t\t// No objects (empty, whitespace, or comment-only content): nothing to apply.\n\t} else if gvk := objects[0].GroupVersionKind(); gvk.Kind == \"Addons\" && gvk.Group == \"\" && gvk.Version == \"\" {\n\t\t// Reuse the document already parsed by LoadObjectsFrom instead of parsing it again.\n\t\tif err := objects[0].Reparse(apiObject); err != nil {\n\t\t\treturn nil, fmt.Errorf(\"error parsing addons: %v\", err)\n\t\t}\n\t} else {\n\t\tmanifest := location.String()\n\t\tmanifestHash, err := utils.HashString(configString)\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"error hashing manifest: %v\", err)\n\t\t}\n\t\tmanifestLocationHash, err := utils.HashString(manifest)\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"error hashing manifest location: %v\", err)\n\t\t}\n\t\taddonName := \"manifest-\" + manifestLocationHash[:12]\n\t\taddonSpec := &api.AddonSpec{\n\t\t\tName:         &addonName,\n\t\t\tManifest:     &manifest,\n\t\t\tManifestHash: manifestHash,\n\t\t}\n\n\t\tapiObject.Kind = \"Addons\"\n\t\tapiObject.ObjectMeta.Name = addonName\n\t\tapiObject.Spec.Addons = []*api.AddonSpec{addonSpec}\n\t}\n\n\treturn &Addons{ChannelName: name, ChannelLocation: *location, APIObject: apiObject}, nil\n}\n\nfunc (a *Addons) GetCurrent(kubernetesVersion semver.Version) (*AddonMenu, error) {\n\tall, err := a.wrapInAddons()","sourceCodeStart":54,"sourceCodeEnd":90,"githubUrl":"https://github.com/kubernetes/kops/blob/4c8573c808a73d578c5eadc86d410646ea0b0d73/channels/pkg/channels/addons.go#L54-L90","documentation":"Same hashing step as error 36 but for the manifest location URL: ParseAddons hashes the location string to build the addon name 'manifest-<hash[:12]>'. The wrapped error from utils.HashString indicates an essentially impossible internal failure.","triggerScenarios":"LoadAddons -> ParseAddons else-branch with a non-Addons manifest where utils.HashString(manifest) fails. No realistic input causes this; it is defensive error handling.","commonSituations":"Not seen in real deployments; only plausible with memory corruption or OOM conditions.","solutions":["Retry the operation.","Rebuild/redeploy the binary.","File an upstream issue if reproducible, including the manifest location string."],"exampleFix":null,"handlingStrategy":"fallback","validationCode":null,"typeGuard":null,"tryCatchPattern":"addons, err := channels.ParseAddons(name, location, data)\nif err != nil {\n\tif strings.Contains(err.Error(), \"error hashing manifest location\") {\n\t\tretryWithBackoff(2, func() error { _, err = channels.ParseAddons(name, location, data); return err })\n\t}\n\treturn err\n}","preventionTips":["Use official kops builds.","Report reproducible occurrences upstream with the location string."],"tags":["hashing","defensive","unreachable"],"backgroundTag":"manifest-hash-failed","analyzedSha":"4c8573c808a73d578c5eadc86d410646ea0b0d73","analyzedAt":"2026-09-05T04:13:19.212Z","contentChangedAt":"2026-09-05T04:13:19.212Z","schemaVersion":2},"datasetVersion":"2026-09-12T12:17:11.808Z"}