{"record":{"id":"92bf209cff9efaae","repo":"kubernetes/kops","slug":"building-s-v","errorCode":null,"errorMessage":"building %s: %v","messagePattern":"building (.+?): (.+?)","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"upup/pkg/fi/nodeup/loader.go","lineNumber":39,"sourceCode":"\t\"reflect\"\n\n\t\"k8s.io/kops/upup/pkg/fi\"\n)\n\ntype Loader struct {\n\tBuilders []fi.NodeupModelBuilder\n}\n\n// Build is responsible for running the build tasks for nodeup\nfunc (l *Loader) Build() (map[string]fi.NodeupTask, error) {\n\ttasks := make(map[string]fi.NodeupTask)\n\tfor _, builder := range l.Builders {\n\t\tcontext := &fi.NodeupModelBuilderContext{\n\t\t\tTasks: tasks,\n\t\t}\n\t\terr := builder.Build(context)\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"building %s: %v\", reflect.TypeOf(builder), err)\n\t\t}\n\t\ttasks = context.Tasks\n\t}\n\n\treturn tasks, nil\n}\n","sourceCodeStart":21,"sourceCodeEnd":46,"githubUrl":"https://github.com/kubernetes/kops/blob/4c8573c808a73d578c5eadc86d410646ea0b0d73/upup/pkg/fi/nodeup/loader.go#L21-L46","documentation":"The nodeup loader runs each NodeupModelBuilder's Build() to produce the task map. If any builder returns an error, Build wraps it with the builder's reflect.TypeOf name so you know which model builder failed. This is a generic aggregator — the root cause is inside the named builder's error text.","triggerScenarios":"Any fi.NodeupModelBuilder.Build returning a non-nil error during nodeup model construction — e.g. missing cluster spec fields, invalid instance group config, failed asset resolution.","commonSituations":"Cluster spec/channel incompatibilities after kOps upgrade; missing required fields in the nodeup config (NodeupConfig proto mismatch); bad instance-group settings (e.g. invalid containerd/kubelet config).","solutions":["Read the wrapped %v text after \"building <type>\" to find the failing builder and root cause","Ensure nodeup binary version matches the kOps cluster version used to generate NodeupConfig","Re-run `kops update cluster --yes` so the nodeup config on the node matches the current cluster spec","Check for recent cluster spec changes (channel, kubernetes version) that the builder validates"],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":"// validate NodeupConfig completeness before Build\nif cfg.ClusterName == \"\" || len(cfg.ApiserverAdditionalIPs) < 0 { /* schema-check via proto */ }\n// assert nodeup binary version matches cluster kops version\nif nodeupVersion != kopsVersion { return errors.New(\"nodeup/kops version mismatch\") }","typeGuard":null,"tryCatchPattern":"tasks, err := loader.Build(ctx, bootConfig)\nif err != nil {\n  var berr *reflect.TypeName // the wrapped builder type appears in message\n  klog.Errorf(\"model build failed: %v — inspect builder name after 'building '\", err)\n  return err\n}","preventionTips":["Keep nodeup binary and kOps controller versions in lockstep","Regenerate NodeupConfig via `kops update cluster` after any spec change","Run `kops toolbox template`/dry-runs in CI to exercise builders","Read the reflect.TypeOf(builder) in the message to jump straight to the failing builder"],"tags":["nodeup","model-builder","configuration"],"backgroundTag":"model-builder-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"}