{"record":{"id":"eb8c798f2824a67f","repo":"kubernetes/kops","slug":"unable-to-find-manifest-s","errorCode":null,"errorMessage":"unable to find manifest %s","messagePattern":"unable to find manifest (.+?)","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"upup/pkg/fi/cloudup/bootstrapchannelbuilder/bootstrapchannelbuilder.go","lineNumber":126,"sourceCode":"\t}\n}\n\n// Build is responsible for adding the addons to the channel.\nfunc (b *BootstrapChannelBuilder) Build(c *fi.CloudupModelBuilderContext) error {\n\taddons, serviceAccounts, err := b.buildAddons(c)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tfor _, addon := range addons.Items {\n\t\t// Addons with a preset source do not have a template.\n\t\tif addon.Source != nil {\n\t\t\tcontinue\n\t\t}\n\t\tmanifestPath := \"addons/\" + *addon.Spec.Manifest\n\t\tmanifestResource := b.templates.Find(manifestPath)\n\t\tif manifestResource == nil {\n\t\t\treturn fmt.Errorf(\"unable to find manifest %s\", manifestPath)\n\t\t}\n\t\taddon.Source = manifestResource\n\t\taddon.SkipRender = !b.templates.IsTemplate(manifestPath)\n\t}\n\n\tif featureflag.UseAddonOperators.Enabled() {\n\t\tob := &wellknownoperators.Builder{\n\t\t\tVFSContext: vfs.Context,\n\t\t\tCluster:    b.Cluster,\n\t\t}\n\n\t\taddonPackages, clusterAddons, err := ob.Build(b.ClusterAddons)\n\t\tif err != nil {\n\t\t\treturn fmt.Errorf(\"error building well-known operators: %v\", err)\n\t\t}\n\t\tb.ClusterAddons = clusterAddons\n\n\t\tfor _, pkg := range addonPackages {","sourceCodeStart":108,"sourceCodeEnd":144,"githubUrl":"https://github.com/kubernetes/kops/blob/4c8573c808a73d578c5eadc86d410646ea0b0d73/upup/pkg/fi/cloudup/bootstrapchannelbuilder/bootstrapchannelbuilder.go#L108-L144","documentation":"During BootstrapChannelBuilder.Build, each addon spec that lacks an inline Source is resolved from the embedded addon templates via b.templates.Find(\"addons/<manifest>\"). If the template file is not found (nil), the build aborts because the addon cannot be rendered or copied into the channel.","triggerScenarios":"An addon entry in Cluster.Spec.Addons (or channel addons) references a Spec.Manifest path that does not exist under 'addons/' in the kops embedded templates; building with a kops version where the addon was removed or renamed.","commonSituations":"Pinning a cluster manifest to a newer kops addon version than the binary ships; typos in the manifest path; using externally-provided addon channels whose manifest files were deleted; downgrading kops so embedded manifests vanish.","solutions":["Check the manifest path exists: the error names the missing 'addons/...' path","Align the addon version in the cluster spec with the kops binary version","Fix typos in spec.addons[*].manifest","Upgrade or downgrade kops so the embedded template set matches the channel","Remove the stale addon entry from the cluster spec"],"exampleFix":"// before (cluster.yaml)\naddons:\n- manifest: addons/dns-controller/1.99.0.yaml\n// after: use a version bundled with your kops build\naddons:\n- manifest: addons/dns-controller/1.28.0.yaml","handlingStrategy":"validation","validationCode":"// Ensure the manifest exists in embedded templates before building\npath := \"addons/\" + *addon.Spec.Manifest\nif b.templates.Find(path) == nil {\n    return fmt.Errorf(\"addon manifest %s not present in this kops version\", path)\n}","typeGuard":null,"tryCatchPattern":"if err := bcb.Build(addons); err != nil {\n    var missing string\n    if _, scanErr := fmt.Sscanf(err.Error(), \"unable to find manifest %s\", &missing); scanErr == nil {\n        // fix or remove the addon referencing `missing`\n    }\n    return err\n}","preventionTips":["Keep kops binary version in sync with cluster addon channel versions","Never hand-delete files under addons/ templates","Verify manifest paths with `kops get addons` or channel listing before upgrade","Avoid pinning addon versions newer than your kops build"],"tags":["addons","manifest","templates","kops"],"backgroundTag":"missing-manifest-file","analyzedSha":"4c8573c808a73d578c5eadc86d410646ea0b0d73","analyzedAt":"2026-09-05T04:13:19.212Z","contentChangedAt":"2026-09-05T04:13:19.212Z","schemaVersion":2},"datasetVersion":"2026-09-12T07:17:12.445Z"}