{"record":{"id":"6af86576e5492d9c","repo":"kubernetes/kops","slug":"no-managed-fields-supplied","errorCode":null,"errorMessage":"no managed fields supplied","messagePattern":"no managed fields supplied","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"pkg/applylib/applyset/managedfields.go","lineNumber":159,"sourceCode":"\t\t\tfieldSet, err := mergeManagedFields(managers)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\tencoded, err := fieldSet.ToJSON()\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\tmanagers[0].FieldsV1.Raw = encoded\n\t\t}\n\t\tresult = append(result, managers[0])\n\t}\n\treturn result, nil\n}\n\n// mergeManagedFields merges a set of ManagedFieldEntry managed fields, that are expected to have the same key.\nfunc mergeManagedFields(managedFields []metav1.ManagedFieldsEntry) (*fieldpath.Set, error) {\n\tif len(managedFields) == 0 {\n\t\treturn nil, fmt.Errorf(\"no managed fields supplied\")\n\t}\n\n\tunion, err := toFieldPathSet(&managedFields[0])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tfor i := range managedFields {\n\t\tif i == 0 {\n\t\t\tcontinue\n\t\t}\n\t\tm := &managedFields[i]\n\t\tif managedFields[0].APIVersion != m.APIVersion {\n\t\t\treturn nil, fmt.Errorf(\"cannot merge ManagedFieldsEntry apiVersion %q with apiVersion %q\", managedFields[0].APIVersion, m.APIVersion)\n\t\t}\n\n\t\tset, err := toFieldPathSet(m)\n\t\tif err != nil {","sourceCodeStart":141,"sourceCodeEnd":177,"githubUrl":"https://github.com/kubernetes/kops/blob/4c8573c808a73d578c5eadc86d410646ea0b0d73/pkg/applylib/applyset/managedfields.go#L141-L177","documentation":"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.","triggerScenarios":"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.","commonSituations":"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.","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."],"exampleFix":"null","handlingStrategy":"validation","validationCode":"if len(managedFields) == 0 {\n    return nil // skip merge entirely; nothing to migrate\n}\n// safe to call mergeManagedFields now","typeGuard":null,"tryCatchPattern":"if err := migrate(ctx, obj); err != nil && err.Error() == \"no managed fields supplied\" {\n    return nil // object has no managed fields; skip\n}","preventionTips":["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."],"tags":["kubernetes","managed-fields","merge","migration"],"backgroundTag":"no-managed-fields","analyzedSha":"4c8573c808a73d578c5eadc86d410646ea0b0d73","analyzedAt":"2026-09-05T04:13:19.212Z","contentChangedAt":"2026-09-05T04:13:19.212Z","schemaVersion":2},"datasetVersion":"2026-09-12T12:17:11.808Z"}