kubernetes/kops · error

error parsing configStore.base %q: %v

Error message

error parsing configStore.base %q: %v

What it means

NewNodeUpConfigBuilder resolves cluster.Spec.ConfigStore.Base into a VFS path. If the base URI cannot be parsed into a valid vfs location (bad scheme, malformed path), this error is returned. NodeUp config generation cannot proceed without a valid config store.

Source

Thrown at pkg/nodemodel/nodeupconfigbuilder.go:55

	"k8s.io/kops/upup/pkg/fi"
	"k8s.io/kops/util/pkg/architectures"
	"k8s.io/kops/util/pkg/vfs"
)

type nodeUpConfigBuilder struct {
	assetBuilder               *assets.AssetBuilder
	channelsManifest           string
	configBase                 vfs.Path
	cluster                    *kops.Cluster
	etcdManifests              map[string][]string
	images                     map[kops.InstanceGroupRole]map[architectures.Architecture][]*nodeup.Image
	encryptionConfigSecretHash string
}

func NewNodeUpConfigBuilder(cluster *kops.Cluster, assetBuilder *assets.AssetBuilder, encryptionConfigSecretHash string) (model.NodeUpConfigBuilder, error) {
	configBase, err := vfs.Context.BuildVfsPath(cluster.Spec.ConfigStore.Base)
	if err != nil {
		return nil, fmt.Errorf("error parsing configStore.base %q: %v", cluster.Spec.ConfigStore.Base, err)
	}

	// Must match channelsManifestPath in pkg/model/components/channels/model.go.
	channelsManifest := configBase.Join("manifests/channels/kops-channels.yaml").Path()

	etcdManifests := map[string][]string{}
	images := map[kops.InstanceGroupRole]map[architectures.Architecture][]*nodeup.Image{}

	for _, role := range kops.AllInstanceGroupRoles {
		isMaster := role.HasControlPlane()
		isAPIServer := role.HasAPIServer()

		images[role] = make(map[architectures.Architecture][]*nodeup.Image)
		if kopsmodel.IsBaseURL(cluster.Spec.KubernetesVersion) {
			// When using a custom version, we want to preload the images over http
			components := []string{"kube-proxy"}
			if isMaster {
				components = append(components, "kube-apiserver", "kube-controller-manager", "kube-scheduler")

View on GitHub (pinned to 4c8573c808)

Solutions

  1. Fix cluster.Spec.ConfigStore.Base to a valid URI like 's3://<bucket>/prefix' matching --state on other kOps commands
  2. Check for typos/empty values in the state store configuration (KOPS_STATE_STORE)
  3. Run 'kops get clusters' with the same state store to verify the URI works before creating nodeup config

Example fix

// before
spec:
  configStore:
    base: "my-bucket/cluster" // missing scheme
// after
spec:
  configStore:
    base: "s3://my-bucket/cluster"
Defensive patterns

Strategy: validation

Validate before calling

base := cluster.Spec.ConfigStore.Base
if base == "" {
    return fmt.Errorf("configStore.base is empty")
}
if !strings.Contains(base, "://") {
    return fmt.Errorf("configStore.base %q missing scheme (e.g. s3://)", base)
}

Prevention

When it happens

Trigger: Cluster spec has a configStore.base that vfs.Context.BuildVfsPath cannot parse (e.g. missing scheme, unknown scheme, invalid S3/GS/OSS URI).

Common situations: Typo in the state store URI (s3:// misspelled, empty string); migrating clusters between state stores; hand-edited cluster spec; environment where the object-store scheme is unavailable.

Related errors


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