kubernetes/kops · error
unable to find manifest %s
Error message
unable to find manifest %s
What it means
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.
Source
Thrown at upup/pkg/fi/cloudup/bootstrapchannelbuilder/bootstrapchannelbuilder.go:126
}
}
// Build is responsible for adding the addons to the channel.
func (b *BootstrapChannelBuilder) Build(c *fi.CloudupModelBuilderContext) error {
addons, serviceAccounts, err := b.buildAddons(c)
if err != nil {
return err
}
for _, addon := range addons.Items {
// Addons with a preset source do not have a template.
if addon.Source != nil {
continue
}
manifestPath := "addons/" + *addon.Spec.Manifest
manifestResource := b.templates.Find(manifestPath)
if manifestResource == nil {
return fmt.Errorf("unable to find manifest %s", manifestPath)
}
addon.Source = manifestResource
addon.SkipRender = !b.templates.IsTemplate(manifestPath)
}
if featureflag.UseAddonOperators.Enabled() {
ob := &wellknownoperators.Builder{
VFSContext: vfs.Context,
Cluster: b.Cluster,
}
addonPackages, clusterAddons, err := ob.Build(b.ClusterAddons)
if err != nil {
return fmt.Errorf("error building well-known operators: %v", err)
}
b.ClusterAddons = clusterAddons
for _, pkg := range addonPackages {View on GitHub (pinned to 4c8573c808)
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
Example fix
// before (cluster.yaml) addons: - manifest: addons/dns-controller/1.99.0.yaml // after: use a version bundled with your kops build addons: - manifest: addons/dns-controller/1.28.0.yaml
Defensive patterns
Strategy: validation
Validate before calling
// Ensure the manifest exists in embedded templates before building
path := "addons/" + *addon.Spec.Manifest
if b.templates.Find(path) == nil {
return fmt.Errorf("addon manifest %s not present in this kops version", path)
} Try / catch
if err := bcb.Build(addons); err != nil {
var missing string
if _, scanErr := fmt.Sscanf(err.Error(), "unable to find manifest %s", &missing); scanErr == nil {
// fix or remove the addon referencing `missing`
}
return err
} Prevention
- 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
When it happens
Trigger: 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.
Common situations: 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.
Related errors
- error visiting containers: %w
- failed to parse manifest: %w
- error loading channel %q: %v
- unhandled kind %q in %s
- cannot specify additional objects when multiple clusters are
AI-assisted analysis of kubernetes/kops@4c8573c808 (2026-09-05).
Data as JSON: /api/errors/eb8c798f2824a67f.
Report an issue: GitHub.