{"record":{"id":"ca2809c73a17be83","repo":"kubernetes/kops","slug":"error-building-loader-v","errorCode":null,"errorMessage":"error building loader: %v","messagePattern":"error building loader: (.+?)","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"upup/pkg/fi/nodeup/command.go","lineNumber":341,"sourceCode":"\tloader.Builders = append(loader.Builders, &model.WarmPoolBuilder{NodeupModelContext: modelContext})\n\tloader.Builders = append(loader.Builders, &model.PrefixBuilder{NodeupModelContext: modelContext})\n\tloader.Builders = append(loader.Builders, &model.NerdctlBuilder{NodeupModelContext: modelContext})\n\tloader.Builders = append(loader.Builders, &model.CrictlBuilder{NodeupModelContext: modelContext})\n\t// Cloud-specific configuration\n\tloader.Builders = append(loader.Builders, &model.AzureBuilder{NodeupModelContext: modelContext})\n\tloader.Builders = append(loader.Builders, &model.LinodeBuilder{NodeupModelContext: modelContext})\n\n\tloader.Builders = append(loader.Builders, &networking.CommonBuilder{NodeupModelContext: modelContext})\n\tloader.Builders = append(loader.Builders, &networking.CalicoBuilder{NodeupModelContext: modelContext})\n\tloader.Builders = append(loader.Builders, &networking.CiliumBuilder{NodeupModelContext: modelContext})\n\tloader.Builders = append(loader.Builders, &networking.KindnetBuilder{NodeupModelContext: modelContext})\n\tloader.Builders = append(loader.Builders, &networking.AmazonVPCRoutedENIBuilder{NodeupModelContext: modelContext})\n\tloader.Builders = append(loader.Builders, &networking.KuberouterBuilder{NodeupModelContext: modelContext})\n\n\tloader.Builders = append(loader.Builders, &model.BootstrapClientBuilder{NodeupModelContext: modelContext})\n\ttaskMap, err := loader.Build()\n\tif err != nil {\n\t\treturn fmt.Errorf(\"error building loader: %v\", err)\n\t}\n\n\tfor _, image := range nodeupConfig.Images[architecture] {\n\t\tif len(image.Sources) == 0 {\n\t\t\treturn fmt.Errorf(\"image has no sources: %v\", image)\n\t\t}\n\t\tu, err := url.Parse(image.Sources[0])\n\t\tif err != nil {\n\t\t\treturn fmt.Errorf(\"invalid image source URL %q: %w\", image.Sources[0], err)\n\t\t}\n\t\tkey := \"SideloadImage/\" + path.Base(u.Path)\n\t\tif _, ok := taskMap[key]; ok {\n\t\t\treturn fmt.Errorf(\"duplicate image task %q\", key)\n\t\t}\n\t\ttaskMap[key] = &nodetasks.LoadImageTask{\n\t\t\tSources: image.Sources,\n\t\t\tHash:    image.Hash,\n\t\t}","sourceCodeStart":323,"sourceCodeEnd":359,"githubUrl":"https://github.com/kubernetes/kops/blob/4c8573c808a73d578c5eadc86d410646ea0b0d73/upup/pkg/fi/nodeup/command.go#L323-L359","documentation":"Run() assembles a Loader with dozens of model builders (kubelet, containerd, networking, etc.) and calls loader.Build() to produce the task map. If any builder errors while generating its tasks (e.g. it fails to render templates, read config, or resolve assets), nodeup wraps it as \"error building loader\". This is a model/task-generation failure, not a runtime task-execution failure.","triggerScenarios":"loader.Build() returns an error after registering all builders — any Builder.Build() inside returns non-nil (bad NodeupModelContext state, unreadable keystore/secretstore data, invalid networking config, template render failure).","commonSituations":"Corrupt or missing keystore/secretstore VFS data; a networking option (Cilium/Calico/AmazonVPC) configured inconsistently in the cluster spec; nodeup config referencing assets that cannot be resolved; mismatch between cluster spec and nodeup config after an upgrade.","solutions":["Read the wrapped inner error (the %v suffix) — it names the specific builder or task that failed","Re-run `kops get cluster --full` / `kops replace` to regenerate a consistent nodeup config","Verify the keystore/secretstore VFS paths are readable from the node","Confirm the nodeup binary version matches the kops control-plane version that produced nodeupconfig"],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":null,"typeGuard":null,"tryCatchPattern":"if err := nodeupCmd.Run(ctx); err != nil {\n    if strings.Contains(err.Error(), \"error building loader\") {\n        log.Fatalf(\"nodeup model build failed: %v — inspect inner error and regenerate config\", err)\n    }\n    return err\n}","preventionTips":["Always regenerate nodeup config via `kops update cluster` instead of hand-editing","Keep nodeup binary version in lockstep with kops control-plane version","Validate cluster spec changes (networking choice, assets) in dryrun before applying","Ensure keystore/secretstore VFS paths are readable from nodes"],"tags":["nodeup","loader","task-generation"],"backgroundTag":"nodeup-model-build-failed","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"}