kubernetes/kops · error
parsing configStore.base %q: %w
Error message
parsing configStore.base %q: %w
What it means
After confirming the backupStore is an azureblob:// path, resolveAzureBackupStore also parses configStore.base (the etcd config store) to read the storage account name. If BuildVfsPath fails on the configStore.base string, the error is wrapped as 'parsing configStore.base'.
Source
Thrown at pkg/model/components/etcdmanager/model.go:74
// not, since validation already enforces account uniformity.
//
// TODO: remove once etcd-manager is bumped to a release whose vendored VFS
// understands azureblob://<account>/<container>/<key>.
func resolveAzureBackupStore(configStoreBase, backupStore string) (legacyURL string, storageAccount string, err error) {
if !strings.HasPrefix(backupStore, "azureblob://") {
return backupStore, "", nil
}
bp, err := vfs.Context.BuildVfsPath(backupStore)
if err != nil {
return "", "", fmt.Errorf("parsing etcd backup-store %q: %w", backupStore, err)
}
bpAzure, ok := bp.(*vfs.AzureBlobPath)
if !ok {
return "", "", fmt.Errorf("expected azureblob:// backup-store, got %q", backupStore)
}
csp, err := vfs.Context.BuildVfsPath(configStoreBase)
if err != nil {
return "", "", fmt.Errorf("parsing configStore.base %q: %w", configStoreBase, err)
}
csAzure, ok := csp.(*vfs.AzureBlobPath)
if !ok {
return "", "", fmt.Errorf("backup-store %q is azureblob:// but configStore.base %q is not", backupStore, configStoreBase)
}
legacy := "azureblob://" + bpAzure.Container()
if bpAzure.Key() != "" {
legacy += "/" + bpAzure.Key()
}
return legacy, csAzure.Account(), nil
}
// EtcdManagerBuilder builds the manifest for the etcd-manager
type EtcdManagerBuilder struct {
*model.KopsModelContext
Lifecycle fi.Lifecycle
AssetBuilder *assets.AssetBuilder
}View on GitHub (pinned to 4c8573c808)
Solutions
- Fix the configStore.base URI to a valid vfs path (e.g. azureblob://account/container)
- Check the wrapped inner error to identify the parse failure
- Ensure configStore.base and backupStore use consistent, valid Azure blob paths
Example fix
// before configStore: base: "azureblob:/wrong" // after configStore: base: "azureblob://myaccount/etcd-events-config"
Defensive patterns
Strategy: validation
Validate before calling
if configStoreBase == "" || !strings.Contains(configStoreBase, "://") {
return fmt.Errorf("configStore.base must be a valid vfs path, got %q", configStoreBase)
} Type guard
null
Try / catch
legacy, account, err := resolveAzureBackupStore(configStoreBase, backupStore)
if err != nil {
if strings.Contains(err.Error(), "parsing configStore.base") {
// fix configStore.base URI and retry
}
return err
} Prevention
- Keep configStore.base and backupStore formats aligned
- Validate the full etcd spec with kops before apply
- Avoid hand-editing base URIs; regenerate via kops
When it happens
Trigger: Etcd cluster configStore.base on Azure that is malformed or uses a scheme BuildVfsPath cannot parse, while resolving the backup store during buildPod.
Common situations: Invalid or hand-edited configStore base URI; scheme not registered in VFS; typo in container/account name.
Related errors
- parsing etcd backup-store %q: %w
- failed to parse %q: %s
- no storage account specified in %q; expected azureblob://<ac
- no container specified in %q; expected azureblob://<account>
- error parsing path for etcd manifest %s: %v
AI-assisted analysis of kubernetes/kops@4c8573c808 (2026-09-05).
Data as JSON: /api/errors/b9c5104c46bf9737.
Report an issue: GitHub.