kubernetes/kops · error

error parsing BootConfig config response: %v

Error message

error parsing BootConfig config response: %v

What it means

When the node config came from a config server, Run() YAML-unmarshals nodeConfig.NodeupConfig into nodeup.Config. This error is thrown if that YAML is invalid or cannot be decoded into the nodeup.Config struct, so the node's provisioning config is unusable.

Source

Thrown at upup/pkg/fi/nodeup/command.go:138

			return fmt.Errorf("failed to get node config from server: %w", err)
		}
		nodeConfig = response.NodeConfig
	} else if fi.ValueOf(bootConfig.ConfigBase) != "" {
		var err error
		configBase, err = vfs.Context.BuildVfsPath(*bootConfig.ConfigBase)
		if err != nil {
			return fmt.Errorf("cannot parse ConfigBase %q: %v", *bootConfig.ConfigBase, err)
		}
	} else {
		return fmt.Errorf("ConfigBase or ConfigServer is required")
	}

	var nodeupConfig nodeup.Config
	var nodeupConfigHash [32]byte
	switch {
	case nodeConfig != nil:
		if err := utils.YamlUnmarshal([]byte(nodeConfig.NodeupConfig), &nodeupConfig); err != nil {
			return fmt.Errorf("error parsing BootConfig config response: %v", err)
		}
		nodeupConfigHash = sha256.Sum256([]byte(nodeConfig.NodeupConfig))
		if nodeupConfig.CAs == nil {
			nodeupConfig.CAs = make(map[string]string)
		}
		nodeupConfig.CAs[fi.CertificateIDCA] = bootConfig.ConfigServer.CACertificates
	case bootConfig.InstanceGroupName != "":
		nodeupConfigLocation := configBase.Join("igconfig", bootConfig.InstanceGroupRole.ToLowerString(), bootConfig.InstanceGroupName, "nodeupconfig.yaml")

		b, err := nodeupConfigLocation.ReadFile(ctx)
		if err != nil {
			return fmt.Errorf("error loading NodeupConfig %q: %v", nodeupConfigLocation, err)
		}

		if err = utils.YamlUnmarshal(b, &nodeupConfig); err != nil {
			return fmt.Errorf("error parsing NodeupConfig %q: %v", nodeupConfigLocation, err)
		}
		nodeupConfigHash = sha256.Sum256(b)

View on GitHub (pinned to 4c8573c808)

Solutions

  1. Confirm kops/nodeup versions match the control plane; upgrade nodeup (kops update cluster / rolling-update) to eliminate schema skew.
  2. Inspect the raw NodeupConfig served by the config server and validate it as YAML (yamllint / kops toolbox dump).
  3. Re-push the cluster configuration (kops update cluster) so the server regenerates a valid NodeupConfig.
  4. If a proxy/LB sits in front of the config server, check it is not truncating or rewriting the response body.
  5. Roll back a recent manual cluster-spec edit that introduced a bad field.

Example fix

// before: stale nodeup against newer control plane schema
unknown field "instanceGroupRoleOverride" in nodeup.Config
// after: match versions
kops update cluster --yes && kops rolling-update cluster --yes
Defensive patterns

Strategy: validation

Prevention

When it happens

Trigger: getNodeConfigFromServers succeeded but response.NodeConfig.NodeupConfig contains invalid YAML, an unexpected schema, or an empty/garbage payload — YamlUnmarshal fails and Run wraps the parse error.

Common situations: Version skew: node binary older than the kops control plane emits/expects a different NodeupConfig schema; a bug or corruption in the config-server response; truncated payload from a proxy; manually editing cluster config and breaking YAML.

Related errors


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