{"record":{"id":"6e119b0b91789e71","repo":"kubernetes/kops","slug":"cannot-parse-configbase-q-v","errorCode":null,"errorMessage":"cannot parse ConfigBase %q: %v","messagePattern":"cannot parse ConfigBase %q: (.+?)","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"upup/pkg/fi/nodeup/command.go","lineNumber":127,"sourceCode":"\t\treturn err\n\t}\n\n\tvar configBase vfs.Path\n\n\t// If we're using a config server instead of vfs, nodeConfig will hold our configuration\n\tvar nodeConfig *nodeup.NodeConfig\n\n\tif bootConfig.ConfigServer != nil && len(bootConfig.ConfigServer.Servers) > 0 {\n\t\tresponse, err := getNodeConfigFromServers(ctx, &bootConfig, region)\n\t\tif err != nil {\n\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 != \"\":","sourceCodeStart":109,"sourceCodeEnd":145,"githubUrl":"https://github.com/kubernetes/kops/blob/4c8573c808a73d578c5eadc86d410646ea0b0d73/upup/pkg/fi/nodeup/command.go#L109-L145","documentation":"When the node is configured with a ConfigBase (vfs path) instead of a config server, Run() parses that string into a vfs.Path via vfs.Context.BuildVfsPath. This error is thrown when the ConfigBase string is not a valid/recognized VFS path scheme (s3://, gs://, etc.) or cannot be constructed.","triggerScenarios":"NodeUp run with bootConfig.ConfigBase set to a malformed or unsupported URI — e.g. missing scheme, unknown scheme, typo like 's3:/bucket/path' — causing vfs.Context.BuildVfsPath to fail.","commonSituations":"Hand-edited node bootstrap config (nodeupconfig/igconfig spec) with a typo'd ConfigBase, cluster spec produced by an older kops version with an incompatible path format, or copying a ConfigBase between clouds with the wrong scheme (gs:// on AWS).","solutions":["Inspect bootConfig.ConfigBase and fix the URI scheme/format (must be a valid vfs path, e.g. s3://<bucket>/clusters.example.com).","Regenerate the bootstrap configuration with the same kops version used to create the cluster (kops update cluster / kops replace).","Verify the required VFS backend matches the environment (s3:// on AWS, gs:// on GCP) and that kops was built with that backend.","If config-server mode is available, switch to ConfigServer and leave ConfigBase empty."],"exampleFix":"// before\nConfigBase: \"s3:/my-bucket/clusters.example.com\"\n// after\nConfigBase: \"s3://my-bucket/clusters.example.com\"","handlingStrategy":"validation","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":["Copy ConfigBase verbatim from kops output; never retype it"],"tags":["go","nodeup","vfs","configuration"],"backgroundTag":"invalid-vfs-path","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"}