kubernetes/kops · error

error marshaling yaml: %v

Error message

error marshaling yaml: %v

What it means

marshalYaml converts a runtime.Object to versioned YAML via kopscodecs.ToVersionedYaml; a conversion or serialization failure (unsupported object, bad GVK, unmarshalable field) is wrapped as "error marshaling yaml". It backs the -o yaml output of `kops get`.

Source

Thrown at cmd/kops/get.go:108

type marshalFunc func(obj runtime.Object) ([]byte, error)

func marshalToWriter(obj runtime.Object, marshal marshalFunc, w io.Writer) error {
	b, err := marshal(obj)
	if err != nil {
		return err
	}
	_, err = w.Write(b)
	if err != nil {
		return fmt.Errorf("error writing to stdout: %v", err)
	}
	return nil
}

// obj must be a pointer to a marshalable object
func marshalYaml(obj runtime.Object) ([]byte, error) {
	y, err := kopscodecs.ToVersionedYaml(obj)
	if err != nil {
		return nil, fmt.Errorf("error marshaling yaml: %v", err)
	}
	return y, nil
}

// obj must be a pointer to a marshalable object
func marshalJSON(obj runtime.Object) ([]byte, error) {
	j, err := kopscodecs.ToVersionedJSON(obj)
	if err != nil {
		return nil, fmt.Errorf("error marshaling json: %v", err)
	}
	return j, nil
}

View on GitHub (pinned to 4c8573c808)

Solutions

  1. Read the wrapped %v detail to find the offending field/type and fix the stored object (kops get -o json often still works for diagnosis)
  2. Align the kops CLI version with the cluster's state-store version (upgrade/downgrade the binary)
  3. Use -o json output as a fallback and convert to YAML yourself with yq
  4. Repair or remove the corrupt manifest in the state store (S3/object store) if a single object is broken

Example fix

// before
kops get instancegroup nodes -o yaml   # codec conversion fails on new field
// after (workaround)
kops get instancegroup nodes -o json | yq -P '.' 
Defensive patterns

Strategy: try-catch

Validate before calling

// probe with JSON first; JSON marshal failures predict YAML failures
if _, err := kopscodecs.ToVersionedYaml(obj); err != nil {
    return fmt.Errorf("object not serializable to yaml: %w", err)
}

Try / catch

y, err := marshalYaml(obj)
if err != nil {
    if strings.Contains(err.Error(), "error marshaling yaml") {
        // fall back to JSON output: b, jerr := marshalJSON(obj)
    }
}

Prevention

When it happens

Trigger: `kops get -o yaml` on an object the codec cannot convert to the versioned YAML shape — e.g. an internal-typed object lacking a registered conversion, or an object containing fields the yaml serializer cannot represent.

Common situations: Version skew between kops CLI and state-store objects (newer fields from a newer kops not convertible by the current codec); a corrupted or hand-edited manifest in the state store; fetching resources whose scheme registration is missing in the CLI build.

Related errors


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