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

  1. Fix the configStore.base URI to a valid vfs path (e.g. azureblob://account/container)
  2. Check the wrapped inner error to identify the parse failure
  3. 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

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


AI-assisted analysis of kubernetes/kops@4c8573c808 (2026-09-05). Data as JSON: /api/errors/b9c5104c46bf9737. Report an issue: GitHub.