{"record":{"id":"601a747870b9388c","repo":"kubernetes/kops","slug":"error-parsing-bootconfig-config-response-v","errorCode":null,"errorMessage":"error parsing BootConfig config response: %v","messagePattern":"error parsing BootConfig config response: (.+?)","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"upup/pkg/fi/nodeup/command.go","lineNumber":138,"sourceCode":"\t\t\treturn fmt.Errorf(\"failed to get node config from server: %w\", err)\n\t\t}\n\t\tnodeConfig = response.NodeConfig\n\t} else if fi.ValueOf(bootConfig.ConfigBase) != \"\" {\n\t\tvar err error\n\t\tconfigBase, err = vfs.Context.BuildVfsPath(*bootConfig.ConfigBase)\n\t\tif err != nil {\n\t\t\treturn fmt.Errorf(\"cannot parse ConfigBase %q: %v\", *bootConfig.ConfigBase, err)\n\t\t}\n\t} else {\n\t\treturn fmt.Errorf(\"ConfigBase or ConfigServer is required\")\n\t}\n\n\tvar nodeupConfig nodeup.Config\n\tvar nodeupConfigHash [32]byte\n\tswitch {\n\tcase nodeConfig != nil:\n\t\tif err := utils.YamlUnmarshal([]byte(nodeConfig.NodeupConfig), &nodeupConfig); err != nil {\n\t\t\treturn fmt.Errorf(\"error parsing BootConfig config response: %v\", err)\n\t\t}\n\t\tnodeupConfigHash = sha256.Sum256([]byte(nodeConfig.NodeupConfig))\n\t\tif nodeupConfig.CAs == nil {\n\t\t\tnodeupConfig.CAs = make(map[string]string)\n\t\t}\n\t\tnodeupConfig.CAs[fi.CertificateIDCA] = bootConfig.ConfigServer.CACertificates\n\tcase bootConfig.InstanceGroupName != \"\":\n\t\tnodeupConfigLocation := configBase.Join(\"igconfig\", bootConfig.InstanceGroupRole.ToLowerString(), bootConfig.InstanceGroupName, \"nodeupconfig.yaml\")\n\n\t\tb, err := nodeupConfigLocation.ReadFile(ctx)\n\t\tif err != nil {\n\t\t\treturn fmt.Errorf(\"error loading NodeupConfig %q: %v\", nodeupConfigLocation, err)\n\t\t}\n\n\t\tif err = utils.YamlUnmarshal(b, &nodeupConfig); err != nil {\n\t\t\treturn fmt.Errorf(\"error parsing NodeupConfig %q: %v\", nodeupConfigLocation, err)\n\t\t}\n\t\tnodeupConfigHash = sha256.Sum256(b)","sourceCodeStart":120,"sourceCodeEnd":156,"githubUrl":"https://github.com/kubernetes/kops/blob/4c8573c808a73d578c5eadc86d410646ea0b0d73/upup/pkg/fi/nodeup/command.go#L120-L156","documentation":"When the node config came from a config server, Run() YAML-unmarshals nodeConfig.NodeupConfig into nodeup.Config. This error is thrown if that YAML is invalid or cannot be decoded into the nodeup.Config struct, so the node's provisioning config is unusable.","triggerScenarios":"getNodeConfigFromServers succeeded but response.NodeConfig.NodeupConfig contains invalid YAML, an unexpected schema, or an empty/garbage payload — YamlUnmarshal fails and Run wraps the parse error.","commonSituations":"Version skew: node binary older than the kops control plane emits/expects a different NodeupConfig schema; a bug or corruption in the config-server response; truncated payload from a proxy; manually editing cluster config and breaking YAML.","solutions":["Confirm kops/nodeup versions match the control plane; upgrade nodeup (kops update cluster / rolling-update) to eliminate schema skew.","Inspect the raw NodeupConfig served by the config server and validate it as YAML (yamllint / kops toolbox dump).","Re-push the cluster configuration (kops update cluster) so the server regenerates a valid NodeupConfig.","If a proxy/LB sits in front of the config server, check it is not truncating or rewriting the response body.","Roll back a recent manual cluster-spec edit that introduced a bad field."],"exampleFix":"// before: stale nodeup against newer control plane schema\nunknown field \"instanceGroupRoleOverride\" in nodeup.Config\n// after: match versions\nkops update cluster --yes && kops rolling-update cluster --yes","handlingStrategy":"validation","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":["Pin matching kops/nodeup versions"],"tags":["go","nodeup","yaml","schema"],"backgroundTag":"yaml-unmarshal-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"}