kubernetes/kops · error

no managed fields supplied

Error message

no managed fields supplied

What it means

mergeManagedFields merges a slice of metav1.ManagedFieldsEntry that are expected to share the same key (manager, operation, apiVersion). If it is called with an empty slice there is nothing to merge, so it returns the sentinel error "no managed fields supplied". Callers (mergeFieldManagers) should pre-group entries so each call gets at least one.

Source

Thrown at pkg/applylib/applyset/managedfields.go:159

			fieldSet, err := mergeManagedFields(managers)
			if err != nil {
				return nil, err
			}
			encoded, err := fieldSet.ToJSON()
			if err != nil {
				return nil, err
			}
			managers[0].FieldsV1.Raw = encoded
		}
		result = append(result, managers[0])
	}
	return result, nil
}

// mergeManagedFields merges a set of ManagedFieldEntry managed fields, that are expected to have the same key.
func mergeManagedFields(managedFields []metav1.ManagedFieldsEntry) (*fieldpath.Set, error) {
	if len(managedFields) == 0 {
		return nil, fmt.Errorf("no managed fields supplied")
	}

	union, err := toFieldPathSet(&managedFields[0])
	if err != nil {
		return nil, err
	}

	for i := range managedFields {
		if i == 0 {
			continue
		}
		m := &managedFields[i]
		if managedFields[0].APIVersion != m.APIVersion {
			return nil, fmt.Errorf("cannot merge ManagedFieldsEntry apiVersion %q with apiVersion %q", managedFields[0].APIVersion, m.APIVersion)
		}

		set, err := toFieldPathSet(m)
		if err != nil {

View on GitHub (pinned to 4c8573c808)

Solutions

  1. Check whether the object actually has managedFields: `kubectl get <obj> -o yaml --show-managed-fields`.
  2. If the object legitimately has no managed fields, skip migration for it — server-side apply will establish fresh ownership.
  3. Fix the grouping logic upstream so mergeManagedFields is never called with an empty slice; treat this as a programming-error sentinel.

Example fix

null
Defensive patterns

Strategy: validation

Validate before calling

if len(managedFields) == 0 {
    return nil // skip merge entirely; nothing to migrate
}
// safe to call mergeManagedFields now

Try / catch

if err := migrate(ctx, obj); err != nil && err.Error() == "no managed fields supplied" {
    return nil // object has no managed fields; skip
}

Prevention

When it happens

Trigger: mergeFieldManagers groups the object's managedFields by key and calls mergeManagedFields with an empty group — which occurs when an entry list is filtered to nothing (e.g. all entries excluded by manager/operation filters) or the object has no managedFields at all.

Common situations: Migrating an object created before managedFields tracking (API servers < 1.18) or with managedFields stripped; filtering out the kops client-side manager leaves zero entries for a key.

Related errors


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