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
- Check whether the object actually has managedFields: `kubectl get <obj> -o yaml --show-managed-fields`.
- If the object legitimately has no managed fields, skip migration for it — server-side apply will establish fresh ownership.
- 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
- Check len(obj.GetManagedFields()) before invoking migration helpers.
- Guard grouping code so empty groups are skipped, never passed down.
- Treat objects created pre-1.18 (no managedFields) as already-migrated.
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
- failed to create managed-fields patch: %w
- failed to patch object managed-fields for %q: %w
- failed to marsal %q into json: %w
- cannot merge ManagedFieldsEntry apiVersion %q with apiVersio
- error adding needs-update label: %v
AI-assisted analysis of kubernetes/kops@4c8573c808 (2026-09-05).
Data as JSON: /api/errors/6af86576e5492d9c.
Report an issue: GitHub.