Merge pull request #87559 from daohoangson/openapi/delete_return_type

Openapi/delete return type

Kubernetes-commit: e128f6f4c9d0fc6b8ab59b8d0dce308d6fb3f3d0
This commit is contained in:
Kubernetes Publisher 2020-02-07 05:56:12 -08:00
commit 6b951cbd3f
6 changed files with 26 additions and 7 deletions

2
Godeps/Godeps.json generated
View File

@ -596,7 +596,7 @@
}, },
{ {
"ImportPath": "k8s.io/client-go", "ImportPath": "k8s.io/client-go",
"Rev": "473926661c44" "Rev": "cf84c08bad11"
}, },
{ {
"ImportPath": "k8s.io/component-base", "ImportPath": "k8s.io/component-base",

4
go.mod
View File

@ -46,7 +46,7 @@ require (
gotest.tools v2.2.0+incompatible // indirect gotest.tools v2.2.0+incompatible // indirect
k8s.io/api v0.0.0-20200207025841-85a41f27a10c k8s.io/api v0.0.0-20200207025841-85a41f27a10c
k8s.io/apimachinery v0.0.0-20200207025655-52a338251bb2 k8s.io/apimachinery v0.0.0-20200207025655-52a338251bb2
k8s.io/client-go v0.0.0-20200207030105-473926661c44 k8s.io/client-go v0.0.0-20200207110052-cf84c08bad11
k8s.io/component-base v0.0.0-20200207030544-616550b070ba k8s.io/component-base v0.0.0-20200207030544-616550b070ba
k8s.io/klog v1.0.0 k8s.io/klog v1.0.0
k8s.io/kube-openapi v0.0.0-20200121204235-bf4fb3bd569c k8s.io/kube-openapi v0.0.0-20200121204235-bf4fb3bd569c
@ -60,6 +60,6 @@ replace (
golang.org/x/tools => golang.org/x/tools v0.0.0-20190821162956-65e3620a7ae7 // pinned to release-branch.go1.13 golang.org/x/tools => golang.org/x/tools v0.0.0-20190821162956-65e3620a7ae7 // pinned to release-branch.go1.13
k8s.io/api => k8s.io/api v0.0.0-20200207025841-85a41f27a10c k8s.io/api => k8s.io/api v0.0.0-20200207025841-85a41f27a10c
k8s.io/apimachinery => k8s.io/apimachinery v0.0.0-20200207025655-52a338251bb2 k8s.io/apimachinery => k8s.io/apimachinery v0.0.0-20200207025655-52a338251bb2
k8s.io/client-go => k8s.io/client-go v0.0.0-20200207030105-473926661c44 k8s.io/client-go => k8s.io/client-go v0.0.0-20200207110052-cf84c08bad11
k8s.io/component-base => k8s.io/component-base v0.0.0-20200207030544-616550b070ba k8s.io/component-base => k8s.io/component-base v0.0.0-20200207030544-616550b070ba
) )

2
go.sum
View File

@ -363,7 +363,7 @@ honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWh
honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
k8s.io/api v0.0.0-20200207025841-85a41f27a10c/go.mod h1:SA5EjO7X3UBpRgCFnqrgyCg0rXvBmN8QpNZ4Bvmv9js= k8s.io/api v0.0.0-20200207025841-85a41f27a10c/go.mod h1:SA5EjO7X3UBpRgCFnqrgyCg0rXvBmN8QpNZ4Bvmv9js=
k8s.io/apimachinery v0.0.0-20200207025655-52a338251bb2/go.mod h1:4JiEu5qfVX4iOPJG4zxNOGJ0HamEJ5OmJHxtHMChmZo= k8s.io/apimachinery v0.0.0-20200207025655-52a338251bb2/go.mod h1:4JiEu5qfVX4iOPJG4zxNOGJ0HamEJ5OmJHxtHMChmZo=
k8s.io/client-go v0.0.0-20200207030105-473926661c44/go.mod h1:ourVHU91vVd0R4YiJhW1FNlt3K+HtokZ5ImtcAbqVh4= k8s.io/client-go v0.0.0-20200207110052-cf84c08bad11/go.mod h1:ourVHU91vVd0R4YiJhW1FNlt3K+HtokZ5ImtcAbqVh4=
k8s.io/component-base v0.0.0-20200207030544-616550b070ba/go.mod h1:xqOLjWJL1P+sXGSeMoLVvN0UM/adtUwVUp/mwh5H518= k8s.io/component-base v0.0.0-20200207030544-616550b070ba/go.mod h1:xqOLjWJL1P+sXGSeMoLVvN0UM/adtUwVUp/mwh5H518=
k8s.io/gengo v0.0.0-20190128074634-0689ccc1d7d6/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= k8s.io/gengo v0.0.0-20190128074634-0689ccc1d7d6/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0=
k8s.io/klog v0.0.0-20181102134211-b9b56d5dfc92/go.mod h1:Gq+BEi5rUBO/HRz0bTSXDUcqjScdoY3a9IHpCEIOOfk= k8s.io/klog v0.0.0-20181102134211-b9b56d5dfc92/go.mod h1:Gq+BEi5rUBO/HRz0bTSXDUcqjScdoY3a9IHpCEIOOfk=

View File

@ -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)

View File

@ -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

View File

@ -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 {