Collapse onto request scope convertor

pull/8/head
Jordan Liggitt 2018-04-26 16:21:38 -04:00
parent f6b08d6d76
commit 2c1a689952
No known key found for this signature in database
GPG Key ID: 39928704103C7229
4 changed files with 23 additions and 26 deletions

View File

@ -236,7 +236,7 @@ func (r *crdHandler) serveResource(w http.ResponseWriter, req *http.Request, req
case "update":
return handlers.UpdateResource(storage, requestScope, r.admission)
case "patch":
return handlers.PatchResource(storage, requestScope, r.admission, unstructured.UnstructuredObjectConverter{}, supportedTypes)
return handlers.PatchResource(storage, requestScope, r.admission, supportedTypes)
case "delete":
allowsOptions := true
return handlers.DeleteResource(storage, allowsOptions, requestScope, r.admission)
@ -259,7 +259,7 @@ func (r *crdHandler) serveStatus(w http.ResponseWriter, req *http.Request, reque
case "update":
return handlers.UpdateResource(storage, requestScope, r.admission)
case "patch":
return handlers.PatchResource(storage, requestScope, r.admission, unstructured.UnstructuredObjectConverter{}, supportedTypes)
return handlers.PatchResource(storage, requestScope, r.admission, supportedTypes)
default:
http.Error(w, fmt.Sprintf("unhandled verb %q", requestInfo.Verb), http.StatusMethodNotAllowed)
return nil
@ -276,7 +276,7 @@ func (r *crdHandler) serveScale(w http.ResponseWriter, req *http.Request, reques
case "update":
return handlers.UpdateResource(storage, requestScope, r.admission)
case "patch":
return handlers.PatchResource(storage, requestScope, r.admission, unstructured.UnstructuredObjectConverter{}, supportedTypes)
return handlers.PatchResource(storage, requestScope, r.admission, supportedTypes)
default:
http.Error(w, fmt.Sprintf("unhandled verb %q", requestInfo.Verb), http.StatusMethodNotAllowed)
return nil

View File

@ -245,6 +245,7 @@ func handleInternal(storage map[string]rest.Storage, admissionControl admission.
Creater: scheme,
Convertor: scheme,
UnsafeConvertor: runtime.UnsafeObjectConvertor(scheme),
Defaulter: scheme,
Typer: scheme,
Linker: selfLinker,
@ -3170,6 +3171,7 @@ func TestParentResourceIsRequired(t *testing.T) {
Root: "/" + prefix,
Creater: scheme,
Convertor: scheme,
UnsafeConvertor: runtime.UnsafeObjectConvertor(scheme),
Defaulter: scheme,
Typer: scheme,
Linker: selfLinker,
@ -3197,12 +3199,13 @@ func TestParentResourceIsRequired(t *testing.T) {
"simple": &SimpleRESTStorage{},
"simple/sub": storage,
},
Root: "/" + prefix,
Creater: scheme,
Convertor: scheme,
Defaulter: scheme,
Typer: scheme,
Linker: selfLinker,
Root: "/" + prefix,
Creater: scheme,
Convertor: scheme,
UnsafeConvertor: runtime.UnsafeObjectConvertor(scheme),
Defaulter: scheme,
Typer: scheme,
Linker: selfLinker,
Admit: admissionControl,
@ -3822,11 +3825,12 @@ func TestXGSubresource(t *testing.T) {
group := APIGroupVersion{
Storage: storage,
Creater: scheme,
Convertor: scheme,
Defaulter: scheme,
Typer: scheme,
Linker: selfLinker,
Creater: scheme,
Convertor: scheme,
UnsafeConvertor: runtime.UnsafeObjectConvertor(scheme),
Defaulter: scheme,
Typer: scheme,
Linker: selfLinker,
ParameterCodec: parameterCodec,

View File

@ -42,7 +42,7 @@ import (
)
// PatchResource returns a function that will handle a resource patch.
func PatchResource(r rest.Patcher, scope RequestScope, admit admission.Interface, converter runtime.ObjectConvertor, patchTypes []string) http.HandlerFunc {
func PatchResource(r rest.Patcher, scope RequestScope, admit admission.Interface, patchTypes []string) http.HandlerFunc {
return func(w http.ResponseWriter, req *http.Request) {
// For performance tracking purposes.
trace := utiltrace.New("Patch " + req.URL.Path)
@ -77,14 +77,7 @@ func PatchResource(r rest.Patcher, scope RequestScope, admit admission.Interface
ctx := req.Context()
ctx = request.WithNamespace(ctx, namespace)
// TODO: this is NOT using the scope's convertor [sic]. Figure
// out if this is intentional or not. Perhaps it matters on
// subresources? Rename this parameter if this is purposful and
// delete it (using scope.Convertor instead) otherwise.
//
// Already some tests set this converter but apparently not the
// scope's unsafeConvertor.
schemaReferenceObj, err := converter.ConvertToVersion(r.New(), scope.Kind.GroupVersion())
schemaReferenceObj, err := scope.UnsafeConvertor.ConvertToVersion(r.New(), scope.Kind.GroupVersion())
if err != nil {
scope.err(err, w, req)
return

View File

@ -629,7 +629,7 @@ func (a *APIInstaller) registerResourceHandlers(path string, storage rest.Storag
string(types.MergePatchType),
string(types.StrategicMergePatchType),
}
handler := metrics.InstrumentRouteFunc(action.Verb, resource, subresource, requestScope, restfulPatchResource(patcher, reqScope, admit, a.group.Convertor, supportedTypes))
handler := metrics.InstrumentRouteFunc(action.Verb, resource, subresource, requestScope, restfulPatchResource(patcher, reqScope, admit, supportedTypes))
route := ws.PATCH(action.Path).To(handler).
Doc(doc).
Param(ws.QueryParameter("pretty", "If 'true', then the output is pretty printed.")).
@ -1005,9 +1005,9 @@ func restfulUpdateResource(r rest.Updater, scope handlers.RequestScope, admit ad
}
}
func restfulPatchResource(r rest.Patcher, scope handlers.RequestScope, admit admission.Interface, converter runtime.ObjectConvertor, supportedTypes []string) restful.RouteFunction {
func restfulPatchResource(r rest.Patcher, scope handlers.RequestScope, admit admission.Interface, supportedTypes []string) restful.RouteFunction {
return func(req *restful.Request, res *restful.Response) {
handlers.PatchResource(r, scope, admit, converter, supportedTypes)(res.ResponseWriter, req.Request)
handlers.PatchResource(r, scope, admit, supportedTypes)(res.ResponseWriter, req.Request)
}
}