kubernetes/kops · error
error reading addon %q manifest: %v
Error message
error reading addon %q manifest: %v
What it means
AddonManifest.Normalize reads the addon's manifest resource into bytes using fi.ResourceAsBytes; this error wraps any failure from that read. It means kOps could not obtain the manifest content (whether embedded bytes, a file, or a fetched URL) for the named addon and cannot proceed to render/remap/hash it.
Source
Thrown at upup/pkg/fi/cloudup/bootstrapchannelbuilder/addonmanifest.go:86
if isAddonTask(task) {
continue
}
dependencies = append(dependencies, task)
}
return dependencies
}
func (a *AddonManifest) Normalize(c *fi.CloudupContext) error {
if a.addonSpec == nil {
return fmt.Errorf("addon spec is not configured for %q", fi.ValueOf(a.Name))
}
if a.source == nil {
return fmt.Errorf("addon source is not configured for %q", fi.ValueOf(a.Name))
}
manifestBytes, err := fi.ResourceAsBytes(a.source)
if err != nil {
return fmt.Errorf("error reading addon %q manifest: %v", fi.ValueOf(a.Name), err)
}
if !a.skipRender && a.addonRenderer != nil {
manifestBytes, err = a.addonRenderer.RenderTemplate(fi.ValueOf(a.Location), manifestBytes, tasksVisibleToAddons(c.AllTasks()))
if err != nil {
return fmt.Errorf("error rendering addon %q template: %w", fi.ValueOf(a.Name), err)
}
}
if !a.skipRemap {
manifestBytes, err = addonmanifests.RemapAddonManifest(a.addonSpec, a.modelContext, a.assetBuilder, manifestBytes, a.serviceAccounts)
if err != nil {
klog.Infof("invalid manifest: %s", string(manifestBytes))
return fmt.Errorf("error remapping manifest %s: %v", fi.ValueOf(a.Location), err)
}
}
manifestBytes = []byte(strings.TrimSpace(string(manifestBytes)))View on GitHub (pinned to 4c8573c808)
Solutions
- Read the wrapped inner error (%v) in the message to see the underlying cause (404, file not found, connection error)
- If the source is a URL, verify it is reachable (curl it) and that the channel addon's manifest/version path is correct
- If it is a local file path, confirm the file exists in your kOps checkout / image-bundle and the path matches the repo layout
- If offline, pre-populate the manifest in your image bundle or vendor the file before running kOps
- Retry after fixing network issues if the cause was transient connectivity
Example fix
// before (bad channel entry) manifest: https://example.invalid/addons/coredns/v1.2.3.yaml // after manifest: https://storage.googleapis.com/kubernetes-addons/manifests/coredns/v1.2.3.yaml
Defensive patterns
Strategy: try-catch
Validate before calling
if src, ok := a.source.(fi.HasContents); ok {
if _, err := src.Contents(); err != nil {
return fmt.Errorf("addon source unavailable: %w", err)
}
} Try / catch
err := task.Normalize(ctx)
if err != nil && strings.Contains(err.Error(), "error reading addon") {
// check network / channel URL, then retry or fix the manifest path
log.Printf("addon manifest unreadable: %v", err)
} Prevention
- Verify every channel addon manifest URL is reachable before running kops update (curl --head)
- For air-gapped installs, pre-populate image-bundle/vendor paths for all addon manifests
- Pin addon versions to tags that exist upstream; avoid moving/latest URLs
When it happens
Trigger: Normalize runs with addonSpec and source set, but fi.ResourceAsBytes(a.source) returns an error — e.g. a URL resource that fails to download, a file resource whose path does not exist, or a reader-based resource that errors — and the error is wrapped via fmt.Errorf with the addon name.
Common situations: The addon manifest URL in the channel is unreachable (offline build, bad network, deleted upstream release tag); a custom channel points at a typo'd or 404 path; an image-bundle/file path changed after a kOps version bump; the manifest file was moved in the repo.
Related errors
- addon spec is not configured for %q
- addon source is not configured for %q
- error rendering addon %q template: %w
- error remapping manifest %s: %v
- failed to configure pruning for %s: %w
AI-assisted analysis of kubernetes/kops@4c8573c808 (2026-09-05).
Data as JSON: /api/errors/9c7e9860fd944762.
Report an issue: GitHub.