Skip to content

Commit 17a5a74

Browse files
authored
Merge pull request kubernetes-sigs#9935 from fabriziopandini/small-improvements-to-inmemory-api-server
🌱 Small improvements to the inmemory api server
2 parents 04cdfa6 + 3009d09 commit 17a5a74

File tree

2 files changed

+76
-16
lines changed

2 files changed

+76
-16
lines changed

test/infrastructure/inmemory/internal/server/api/const.go

Lines changed: 47 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,46 @@ var (
3030
corev1APIResourceList = &metav1.APIResourceList{
3131
GroupVersion: "v1",
3232
APIResources: []metav1.APIResource{
33+
{
34+
Name: "configmaps",
35+
SingularName: "",
36+
Namespaced: true,
37+
Kind: "ConfigMap",
38+
Verbs: []string{
39+
"create",
40+
"delete",
41+
"deletecollection",
42+
"get",
43+
"list",
44+
"patch",
45+
"update",
46+
"watch",
47+
},
48+
ShortNames: []string{
49+
"cm",
50+
},
51+
StorageVersionHash: "",
52+
},
53+
{
54+
Name: "endpoints",
55+
SingularName: "",
56+
Namespaced: true,
57+
Kind: "Endpoints",
58+
Verbs: []string{
59+
"create",
60+
"delete",
61+
"deletecollection",
62+
"get",
63+
"list",
64+
"patch",
65+
"update",
66+
"watch",
67+
},
68+
ShortNames: []string{
69+
"ep",
70+
},
71+
StorageVersionHash: "",
72+
},
3373
{
3474
Name: "nodes",
3575
SingularName: "",
@@ -66,10 +106,10 @@ var (
66106
StorageVersionHash: "",
67107
},
68108
{
69-
Name: "configmaps",
109+
Name: "secrets",
70110
SingularName: "",
71111
Namespaced: true,
72-
Kind: "ConfigMap",
112+
Kind: "Secret",
73113
Verbs: []string{
74114
"create",
75115
"delete",
@@ -80,16 +120,13 @@ var (
80120
"update",
81121
"watch",
82122
},
83-
ShortNames: []string{
84-
"cm",
85-
},
86123
StorageVersionHash: "",
87124
},
88125
{
89-
Name: "secrets",
126+
Name: "services",
90127
SingularName: "",
91128
Namespaced: true,
92-
Kind: "Secret",
129+
Kind: "Service",
93130
Verbs: []string{
94131
"create",
95132
"delete",
@@ -100,6 +137,9 @@ var (
100137
"update",
101138
"watch",
102139
},
140+
ShortNames: []string{
141+
"svc",
142+
},
103143
StorageVersionHash: "",
104144
},
105145
},

test/infrastructure/inmemory/internal/server/api/handler.go

Lines changed: 29 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ package api
1818

1919
import (
2020
"context"
21+
"errors"
2122
"fmt"
2223
"io"
2324
"net"
@@ -29,7 +30,6 @@ import (
2930

3031
"github.com/emicklei/go-restful/v3"
3132
"github.com/go-logr/logr"
32-
"github.com/pkg/errors"
3333
apierrors "k8s.io/apimachinery/pkg/api/errors"
3434
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
3535
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
@@ -274,7 +274,11 @@ func (h *apiServerHandler) apiV1Create(req *restful.Request, resp *restful.Respo
274274
// TODO: consider check vs enforce for namespace on the object - namespace on the request path
275275
obj.SetNamespace(req.PathParameter("namespace"))
276276
if err := cloudClient.Create(ctx, obj); err != nil {
277-
_ = resp.WriteErrorString(http.StatusInternalServerError, err.Error())
277+
if status, ok := err.(apierrors.APIStatus); ok || errors.As(err, &status) {
278+
_ = resp.WriteHeaderAndEntity(int(status.Status().Code), status)
279+
return
280+
}
281+
_ = resp.WriteHeaderAndEntity(http.StatusInternalServerError, err.Error())
278282
return
279283
}
280284
if err := resp.WriteEntity(obj); err != nil {
@@ -324,7 +328,11 @@ func (h *apiServerHandler) apiV1List(req *restful.Request, resp *restful.Respons
324328
}
325329

326330
if err := cloudClient.List(ctx, list, listOpts...); err != nil {
327-
_ = resp.WriteErrorString(http.StatusInternalServerError, err.Error())
331+
if status, ok := err.(apierrors.APIStatus); ok || errors.As(err, &status) {
332+
_ = resp.WriteHeaderAndEntity(int(status.Status().Code), status)
333+
return
334+
}
335+
_ = resp.WriteHeaderAndEntity(http.StatusInternalServerError, err.Error())
328336
return
329337
}
330338
if err := resp.WriteEntity(list); err != nil {
@@ -439,7 +447,11 @@ func (h *apiServerHandler) apiV1Update(req *restful.Request, resp *restful.Respo
439447
// TODO: consider check vs enforce for namespace on the object - namespace on the request path
440448
obj.SetNamespace(req.PathParameter("namespace"))
441449
if err := cloudClient.Update(ctx, obj); err != nil {
442-
_ = resp.WriteErrorString(http.StatusInternalServerError, err.Error())
450+
if status, ok := err.(apierrors.APIStatus); ok || errors.As(err, &status) {
451+
_ = resp.WriteHeaderAndEntity(int(status.Status().Code), status)
452+
return
453+
}
454+
_ = resp.WriteHeaderAndEntity(http.StatusInternalServerError, err.Error())
443455
return
444456
}
445457
if err := resp.WriteEntity(obj); err != nil {
@@ -488,7 +500,11 @@ func (h *apiServerHandler) apiV1Patch(req *restful.Request, resp *restful.Respon
488500
return
489501
}
490502
if err := cloudClient.Patch(ctx, obj, patch); err != nil {
491-
_ = resp.WriteErrorString(http.StatusInternalServerError, err.Error())
503+
if status, ok := err.(apierrors.APIStatus); ok || errors.As(err, &status) {
504+
_ = resp.WriteHeaderAndEntity(int(status.Status().Code), status)
505+
return
506+
}
507+
_ = resp.WriteHeaderAndEntity(http.StatusInternalServerError, err.Error())
492508
return
493509
}
494510
if err := resp.WriteEntity(obj); err != nil {
@@ -525,7 +541,11 @@ func (h *apiServerHandler) apiV1Delete(req *restful.Request, resp *restful.Respo
525541
obj.SetNamespace(req.PathParameter("namespace"))
526542

527543
if err := cloudClient.Delete(ctx, obj); err != nil {
528-
_ = resp.WriteErrorString(http.StatusInternalServerError, err.Error())
544+
if status, ok := err.(apierrors.APIStatus); ok || errors.As(err, &status) {
545+
_ = resp.WriteHeaderAndEntity(int(status.Status().Code), status)
546+
return
547+
}
548+
_ = resp.WriteHeaderAndEntity(http.StatusInternalServerError, err.Error())
529549
return
530550
}
531551
}
@@ -613,11 +633,11 @@ func (h *apiServerHandler) healthz(_ *restful.Request, resp *restful.Response) {
613633
func requestToGVK(req *restful.Request) (*schema.GroupVersionKind, error) {
614634
resourceList := getAPIResourceList(req)
615635
if resourceList == nil {
616-
return nil, errors.Errorf("no APIResourceList defined for %s", req.PathParameters())
636+
return nil, fmt.Errorf("no APIResourceList defined for %s", req.PathParameters())
617637
}
618638
gv, err := schema.ParseGroupVersion(resourceList.GroupVersion)
619639
if err != nil {
620-
return nil, errors.Errorf("invalid group version in APIResourceList: %s", resourceList.GroupVersion)
640+
return nil, fmt.Errorf("invalid group version in APIResourceList: %s", resourceList.GroupVersion)
621641
}
622642

623643
resource := req.PathParameter("resource")
@@ -627,7 +647,7 @@ func requestToGVK(req *restful.Request) (*schema.GroupVersionKind, error) {
627647
return &gvk, nil
628648
}
629649
}
630-
return nil, errors.Errorf("Resource %s is not defined in the APIResourceList for %s", resource, req.PathParameters())
650+
return nil, fmt.Errorf("resource %s is not defined in the APIResourceList for %s", resource, req.PathParameters())
631651
}
632652

633653
func getAPIResourceList(req *restful.Request) *metav1.APIResourceList {

0 commit comments

Comments
 (0)