mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-08-02 16:29:21 +00:00
Register full object as return type for DELETE
web services.
Related to https://github.com/kubernetes/kubernetes/issues/59501 Maybe related to https://github.com/kubernetes/enhancements/pull/1263
This commit is contained in:
parent
03a99c5056
commit
4d33d837c8
@ -291,12 +291,17 @@ func (a *APIInstaller) registerResourceHandlers(path string, storage rest.Storag
|
|||||||
|
|
||||||
var versionedDeleteOptions runtime.Object
|
var versionedDeleteOptions runtime.Object
|
||||||
var versionedDeleterObject interface{}
|
var versionedDeleterObject interface{}
|
||||||
|
deleteReturnsDeletedObject := false
|
||||||
if isGracefulDeleter {
|
if isGracefulDeleter {
|
||||||
versionedDeleteOptions, err = a.group.Creater.New(optionsExternalVersion.WithKind("DeleteOptions"))
|
versionedDeleteOptions, err = a.group.Creater.New(optionsExternalVersion.WithKind("DeleteOptions"))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
versionedDeleterObject = indirectArbitraryPointer(versionedDeleteOptions)
|
versionedDeleterObject = indirectArbitraryPointer(versionedDeleteOptions)
|
||||||
|
|
||||||
|
if mayReturnFullObjectDeleter, ok := storage.(rest.MayReturnFullObjectDeleter); ok {
|
||||||
|
deleteReturnsDeletedObject = mayReturnFullObjectDeleter.DeleteReturnsDeletedObject()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
versionedStatusPtr, err := a.group.Creater.New(optionsExternalVersion.WithKind("Status"))
|
versionedStatusPtr, err := a.group.Creater.New(optionsExternalVersion.WithKind("Status"))
|
||||||
@ -769,15 +774,19 @@ func (a *APIInstaller) registerResourceHandlers(path string, storage rest.Storag
|
|||||||
if isSubresource {
|
if isSubresource {
|
||||||
doc = "delete " + subresource + " of" + article + kind
|
doc = "delete " + subresource + " of" + article + kind
|
||||||
}
|
}
|
||||||
|
deleteReturnType := versionedStatus
|
||||||
|
if deleteReturnsDeletedObject {
|
||||||
|
deleteReturnType = producedObject
|
||||||
|
}
|
||||||
handler := metrics.InstrumentRouteFunc(action.Verb, group, version, resource, subresource, requestScope, metrics.APIServerComponent, restfulDeleteResource(gracefulDeleter, isGracefulDeleter, reqScope, admit))
|
handler := metrics.InstrumentRouteFunc(action.Verb, group, version, resource, subresource, requestScope, metrics.APIServerComponent, restfulDeleteResource(gracefulDeleter, isGracefulDeleter, reqScope, admit))
|
||||||
route := ws.DELETE(action.Path).To(handler).
|
route := ws.DELETE(action.Path).To(handler).
|
||||||
Doc(doc).
|
Doc(doc).
|
||||||
Param(ws.QueryParameter("pretty", "If 'true', then the output is pretty printed.")).
|
Param(ws.QueryParameter("pretty", "If 'true', then the output is pretty printed.")).
|
||||||
Operation("delete"+namespaced+kind+strings.Title(subresource)+operationSuffix).
|
Operation("delete"+namespaced+kind+strings.Title(subresource)+operationSuffix).
|
||||||
Produces(append(storageMeta.ProducesMIMETypes(action.Verb), mediaTypes...)...).
|
Produces(append(storageMeta.ProducesMIMETypes(action.Verb), mediaTypes...)...).
|
||||||
Writes(versionedStatus).
|
Writes(deleteReturnType).
|
||||||
Returns(http.StatusOK, "OK", versionedStatus).
|
Returns(http.StatusOK, "OK", deleteReturnType).
|
||||||
Returns(http.StatusAccepted, "Accepted", versionedStatus)
|
Returns(http.StatusAccepted, "Accepted", deleteReturnType)
|
||||||
if isGracefulDeleter {
|
if isGracefulDeleter {
|
||||||
route.Reads(versionedDeleterObject)
|
route.Reads(versionedDeleterObject)
|
||||||
route.ParameterNamed("body").Required(false)
|
route.ParameterNamed("body").Required(false)
|
||||||
|
@ -975,6 +975,11 @@ func (e *Store) Delete(ctx context.Context, name string, deleteValidation rest.V
|
|||||||
return out, true, err
|
return out, true, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// DeleteReturnsDeletedObject implements the rest.MayReturnFullObjectDeleter interface
|
||||||
|
func (e *Store) DeleteReturnsDeletedObject() bool {
|
||||||
|
return e.ReturnDeletedObject
|
||||||
|
}
|
||||||
|
|
||||||
// DeleteCollection removes all items returned by List with a given ListOptions from storage.
|
// DeleteCollection removes all items returned by List with a given ListOptions from storage.
|
||||||
//
|
//
|
||||||
// DeleteCollection is currently NOT atomic. It can happen that only subset of objects
|
// DeleteCollection is currently NOT atomic. It can happen that only subset of objects
|
||||||
|
@ -161,6 +161,11 @@ type GracefulDeleter interface {
|
|||||||
Delete(ctx context.Context, name string, deleteValidation ValidateObjectFunc, options *metav1.DeleteOptions) (runtime.Object, bool, error)
|
Delete(ctx context.Context, name string, deleteValidation ValidateObjectFunc, options *metav1.DeleteOptions) (runtime.Object, bool, error)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// MayReturnFullObjectDeleter may return deleted object (instead of a simple status) on deletion.
|
||||||
|
type MayReturnFullObjectDeleter interface {
|
||||||
|
DeleteReturnsDeletedObject() bool
|
||||||
|
}
|
||||||
|
|
||||||
// CollectionDeleter is an object that can delete a collection
|
// CollectionDeleter is an object that can delete a collection
|
||||||
// of RESTful resources.
|
// of RESTful resources.
|
||||||
type CollectionDeleter interface {
|
type CollectionDeleter interface {
|
||||||
|
Loading…
Reference in New Issue
Block a user