{"record":{"id":"8a64fde4fd43b190","repo":"kubernetes/kops","slug":"cannot-merge-managedfieldsentry-apiversion-q-with","errorCode":null,"errorMessage":"cannot merge ManagedFieldsEntry apiVersion %q with apiVersion %q","messagePattern":"cannot merge ManagedFieldsEntry apiVersion %q with apiVersion %q","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"pkg/applylib/applyset/managedfields.go","lineNumber":173,"sourceCode":"\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 {\n\t\t\treturn nil, err\n\t\t}\n\t\tunion = union.Union(set)\n\t}\n\treturn union, nil\n}\n\n// toFieldPathSet converts an encoded ManagedFieldsEntry to a set of managed fields (a fieldpath.Set)\nfunc toFieldPathSet(fields *metav1.ManagedFieldsEntry) (*fieldpath.Set, error) {\n\t// https://github.com/kubernetes/kubernetes/blob/v1.27.1/staging/src/k8s.io/client-go/util/csaupgrade/upgrade.go#L310-L315\n\tvar fieldSet fieldpath.Set\n\tif err := fieldSet.FromJSON(bytes.NewReader(fields.FieldsV1.Raw)); err != nil {\n\t\treturn nil, err\n\t}","sourceCodeStart":155,"sourceCodeEnd":191,"githubUrl":"https://github.com/kubernetes/kops/blob/4c8573c808a73d578c5eadc86d410646ea0b0d73/pkg/applylib/applyset/managedfields.go#L155-L191","documentation":"mergeManagedFields requires all ManagedFieldEntry values in a group to have the same apiVersion, since a single merged entry can only carry one. If a later entry's APIVersion differs from the first, merging would silently corrupt ownership, so it returns this error naming both apiVersions.","triggerScenarios":"An object's managedFields contain entries for the same manager key but recorded under different apiVersions — e.g. the object was applied both as v1beta1 and v1 (a CRD version bump), or a stored version changed after a CRD upgrade.","commonSituations":"CRD stored-version migration (v1beta1 -> v1) leaving mixed-version managedFields entries; tools applying the same object through different API versions over time.","solutions":["Inspect managedFields with `kubectl get <obj> -o yaml --show-managed-fields` to find the mixed apiVersion entries.","Remove the stale entry for the old apiVersion (apply the object once with server-side apply against the current version, or kubectl replace) and re-run migration.","Update the grouping in mergeFieldManagers to key on apiVersion as well, so entries of differing apiVersions merge separately."],"exampleFix":"// before: group key only by manager\nkey := entry.Manager\n// after: include apiVersion so versions never mix\nkey := entry.Manager + \"/\" + entry.APIVersion","handlingStrategy":"validation","validationCode":"versions := map[string]bool{}\nfor _, m := range entries {\n    versions[m.APIVersion] = true\n}\nif len(versions) > 1 {\n    return fmt.Errorf(\"mixed apiVersions in managedFields: %v\", versions)\n}","typeGuard":null,"tryCatchPattern":"if err := migrate(ctx, obj); err != nil && strings.Contains(err.Error(), \"cannot merge ManagedFieldsEntry apiVersion\") {\n    // drop stale old-version entries then retry\n    return stripStaleManagedFieldsAndRetry(ctx, obj)\n}","preventionTips":["Complete CRD stored-version migrations before migrating managed fields.","Group managedFields by (manager, apiVersion), not manager alone.","Audit managedFields with --show-managed-fields after CRD version bumps."],"tags":["kubernetes","managed-fields","api-version","migration"],"backgroundTag":"managed-fields-apiversion-mismatch","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"}