kubernetes/kops · critical

error parsing configStore.base %q: %v

Error message

error parsing configStore.base %q: %v

What it means

Run() converts cluster.Spec.ConfigStore.Base into a VFS path via BuildVfsPath. If the base string is malformed for the backing store (state store URI syntax wrong, missing/invalid bucket name, bad scheme), the parse fails and Run returns this wrapped error. The cluster cannot be located, so nothing proceeds.

Source

Thrown at upup/pkg/fi/cloudup/apply_cluster.go:274

	if err != nil {
		return nil, err
	}

	err = c.validateKopsVersion()
	if err != nil {
		return nil, err
	}

	err = c.validateKubernetesVersion()
	if err != nil {
		return nil, err
	}

	cluster := c.Cluster

	configBase, err := c.Clientset.VFSContext().BuildVfsPath(cluster.Spec.ConfigStore.Base)
	if err != nil {
		return nil, fmt.Errorf("error parsing configStore.base %q: %v", cluster.Spec.ConfigStore.Base, err)
	}

	if !c.AllowKopsDowngrade {
		kopsVersionUpdatedBytes, err := configBase.Join(registry.PathKopsVersionUpdated).ReadFile(ctx)
		if err == nil {
			kopsVersionUpdated := strings.TrimSpace(string(kopsVersionUpdatedBytes))
			version, err := semver.Parse(kopsVersionUpdated)
			if err != nil {
				return nil, fmt.Errorf("error parsing last kops version updated: %v", err)
			}
			if version.GT(semver.MustParse(kopsbase.Version)) {
				fmt.Printf("\n")
				fmt.Printf("%s\n", starline)
				fmt.Printf("\n")
				fmt.Printf("The cluster was last updated by kops version %s\n", kopsVersionUpdated)
				fmt.Printf("To permit updating by the older version %s, run with the --allow-kops-downgrade flag\n", kopsbase.Version)
				fmt.Printf("\n")
				fmt.Printf("%s\n", starline)

View on GitHub (pinned to 4c8573c808)

Solutions

  1. Fix cluster.Spec.ConfigStore.Base with `kops edit cluster` so it is a valid state store path (e.g. s3://<bucket>/<prefix>).
  2. Verify the underlying store URI works: `kops get clusters --state <base>` using the same value.
  3. If the spec itself was corrupted, recreate it from a known-good export (kops get -o yaml) or from the state store backup.

Example fix

// before (invalid)
ConfigStore: { Base: "s3://" }
// after
ConfigStore: { Base: "s3://my-kops-state.example.com/cluster.example.com" }
Defensive patterns

Strategy: validation

Validate before calling

_, err := vfs.Context.BuildVfsPath(cluster.Spec.ConfigStore.Base)
if err != nil {
    return fmt.Errorf("invalid configStore.base %q: %w", cluster.Spec.ConfigStore.Base, err)
}

Prevention

When it happens

Trigger: Updating a cluster whose ConfigStore.Base is an unparseable path, e.g. a typo'd s3:// URI, an empty base, or a base with characters/scheme BuildVfsPath does not accept (commonly after hand-editing the cluster spec or migrating state stores).

Common situations: Hand-edited cluster spec after `kops edit cluster`; migrating from one state store (S3) to another (GCS/etcd) and leaving a stale base; creating a cluster spec manually with a missing s3 bucket portion.

Related errors


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