fixed the CRD statusResetFields init issue

This commit is contained in:
Goend
2025-09-23 15:48:27 +08:00
parent 1b5fb46b72
commit 911e46c08b

View File

@@ -1039,30 +1039,6 @@ func (r *crdHandler) getOrCreateServingInfoFor(uid types.UID, name string) (*crd
scaleScopes[v.Name] = &scaleScope
// override status subresource values
// shallow copy
statusScope := *requestScopes[v.Name]
statusScope.Subresource = "status"
statusScope.Namer = handlers.ContextBasedNaming{
Namer: meta.NewAccessor(),
ClusterScoped: clusterScoped,
}
if subresources != nil && subresources.Status != nil {
resetFields := storages[v.Name].Status.GetResetFields()
statusScope, err = scopeWithFieldManager(
typeConverter,
statusScope,
resetFields,
"status",
)
if err != nil {
return nil, err
}
}
statusScopes[v.Name] = &statusScope
if v.Deprecated {
deprecated[v.Name] = true
if v.DeprecationWarning != nil {
@@ -1073,6 +1049,44 @@ func (r *crdHandler) getOrCreateServingInfoFor(uid types.UID, name string) (*crd
}
}
// override status subresource values
// shallow copy
// resetField write all version information
for _, v := range crd.Spec.Versions {
clusterScoped := crd.Spec.Scope == apiextensionsv1.ClusterScoped
statusScope := *requestScopes[v.Name]
statusScope.Subresource = "status"
statusScope.Namer = handlers.ContextBasedNaming{
Namer: meta.NewAccessor(),
ClusterScoped: clusterScoped,
}
subresources, err := apiextensionshelpers.GetSubresourcesForVersion(crd, v.Name)
if err != nil {
utilruntime.HandleError(err)
return nil, fmt.Errorf("the server could not properly serve the CR subresources")
}
if subresources != nil && subresources.Status != nil {
var statusResetFields = make(map[fieldpath.APIVersion]*fieldpath.Set)
for _, value := range crd.Spec.Versions {
resetField := storages[value.Name].Status.GetResetFields()
for apiVersion, set := range resetField {
statusResetFields[apiVersion] = set
}
}
statusScope, err = scopeWithFieldManager(
typeConverter,
statusScope,
statusResetFields,
"status",
)
if err != nil {
return nil, err
}
statusScopes[v.Name] = &statusScope
}
}
ret := &crdInfo{
spec: &crd.Spec,
acceptedNames: &crd.Status.AcceptedNames,