Skip to content

Commit 352d567

Browse files
committed
fix: improve Secret API routes and error handling- Change PUT route to /secret/{namespace}/{name} for consistency- Return correct HTTP codes: 201 for create, 404/409 for not found/conflict- Add klog for better debugging
Signed-off-by: kearen001 <[email protected]>
1 parent e4c2aa0 commit 352d567

File tree

1 file changed

+48
-12
lines changed

1 file changed

+48
-12
lines changed

modules/api/pkg/handler/secret.go

Lines changed: 48 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,9 @@ import (
2121

2222
"github.com/emicklei/go-restful/v3"
2323
corev1 "k8s.io/api/core/v1"
24+
apierrors "k8s.io/apimachinery/pkg/api/errors"
25+
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
26+
"k8s.io/klog/v2"
2427

2528
"github.com/kubeedge/dashboard/api/pkg/resource/secret"
2629
"github.com/kubeedge/dashboard/errors"
@@ -41,24 +44,29 @@ func (apiHandler *APIHandler) addSecretRoutes(apiV1Ws *restful.WebService) *APIH
4144
Param(apiV1Ws.PathParameter("namespace", "Name of the namespace")).
4245
Param(apiV1Ws.PathParameter("name", "Name of the secret")).
4346
Writes(corev1.Secret{}).
44-
Returns(http.StatusOK, "OK", corev1.Secret{}))
47+
Returns(http.StatusOK, "OK", corev1.Secret{}).
48+
Returns(http.StatusNotFound, "Not Found", nil))
4549
apiV1Ws.Route(
4650
apiV1Ws.POST("/secret/{namespace}").To(apiHandler.handleCreateSecret).
4751
Param(apiV1Ws.PathParameter("namespace", "Name of the namespace")).
4852
Reads(corev1.Secret{}).
4953
Writes(corev1.Secret{}).
50-
Returns(http.StatusCreated, "Created", corev1.Secret{}))
54+
Returns(http.StatusCreated, "Created", corev1.Secret{}).
55+
Returns(http.StatusConflict, "Already Exists", nil))
5156
apiV1Ws.Route(
52-
apiV1Ws.PUT("/secret/{namespace}").To(apiHandler.handleUpdateSecret).
57+
apiV1Ws.PUT("/secret/{namespace}/{name}").To(apiHandler.handleUpdateSecret).
5358
Param(apiV1Ws.PathParameter("namespace", "Name of the namespace")).
59+
Param(apiV1Ws.PathParameter("name", "Name of the secret")).
5460
Reads(corev1.Secret{}).
5561
Writes(corev1.Secret{}).
56-
Returns(http.StatusOK, "OK", corev1.Secret{}))
62+
Returns(http.StatusOK, "OK", corev1.Secret{}).
63+
Returns(http.StatusNotFound, "Not Found", nil))
5764
apiV1Ws.Route(
5865
apiV1Ws.DELETE("/secret/{namespace}/{name}").To(apiHandler.handleDeleteSecret).
5966
Param(apiV1Ws.PathParameter("namespace", "Name of the namespace")).
6067
Param(apiV1Ws.PathParameter("name", "Name of the secret")).
61-
Returns(http.StatusNoContent, "No Content", nil))
68+
Returns(http.StatusNoContent, "No Content", nil).
69+
Returns(http.StatusNotFound, "Not Found", nil))
6270

6371
return apiHandler
6472
}
@@ -70,8 +78,12 @@ func (apiHandler *APIHandler) handleGetSecrets(request *restful.Request, respons
7078
}
7179

7280
namespace := request.PathParameter("namespace")
81+
if namespace == "" {
82+
namespace = metav1.NamespaceAll
83+
}
7384
result, err := secret.GetSecretList(k8sClient, namespace)
7485
if err != nil {
86+
klog.Errorf("failed to list secrets in namespace %q: %v", namespace, err)
7587
errors.HandleInternalError(response, err)
7688
return
7789
}
@@ -89,6 +101,11 @@ func (apiHandler *APIHandler) handleGetSecret(request *restful.Request, response
89101
name := request.PathParameter("name")
90102
result, err := secret.GetSecret(k8sClient, namespace, name)
91103
if err != nil {
104+
if apierrors.IsNotFound(err) {
105+
response.WriteErrorString(http.StatusNotFound, "Secret not found")
106+
return
107+
}
108+
klog.Errorf("failed to get secret %s/%s: %v", namespace, name, err)
92109
errors.HandleInternalError(response, err)
93110
return
94111
}
@@ -102,21 +119,26 @@ func (apiHandler *APIHandler) handleCreateSecret(request *restful.Request, respo
102119
return
103120
}
104121

105-
data := new(corev1.Secret)
106-
err = request.ReadEntity(data)
122+
var data corev1.Secret
123+
err = request.ReadEntity(&data)
107124
if err != nil {
108125
errors.HandleInternalError(response, err)
109126
return
110127
}
111128

112129
namespace := request.PathParameter("namespace")
113-
result, err := secret.CreateSecret(k8sClient, namespace, data)
130+
result, err := secret.CreateSecret(k8sClient, namespace, &data)
114131
if err != nil {
132+
if apierrors.IsAlreadyExists(err) {
133+
response.WriteErrorString(http.StatusConflict, "Secret already exists")
134+
return
135+
}
136+
klog.Errorf("failed to create secret in namespace %s: %v", namespace, err)
115137
errors.HandleInternalError(response, err)
116138
return
117139
}
118140

119-
response.WriteEntity(result)
141+
response.WriteHeaderAndEntity(http.StatusCreated, result)
120142
}
121143

122144
func (apiHandler *APIHandler) handleUpdateSecret(request *restful.Request, response *restful.Response) {
@@ -125,16 +147,25 @@ func (apiHandler *APIHandler) handleUpdateSecret(request *restful.Request, respo
125147
return
126148
}
127149

128-
data := new(corev1.Secret)
129-
err = request.ReadEntity(data)
150+
var data corev1.Secret
151+
err = request.ReadEntity(&data)
130152
if err != nil {
131153
errors.HandleInternalError(response, err)
132154
return
133155
}
134156

135157
namespace := request.PathParameter("namespace")
136-
result, err := secret.UpdateSecret(k8sClient, namespace, data)
158+
name := request.PathParameter("name")
159+
data.Namespace = namespace
160+
data.Name = name
161+
162+
result, err := secret.UpdateSecret(k8sClient, namespace, &data)
137163
if err != nil {
164+
if apierrors.IsNotFound(err) {
165+
response.WriteErrorString(http.StatusNotFound, "Secret not found")
166+
return
167+
}
168+
klog.Errorf("failed to update secret %s/%s: %v", namespace, name, err)
138169
errors.HandleInternalError(response, err)
139170
return
140171
}
@@ -152,6 +183,11 @@ func (apiHandler *APIHandler) handleDeleteSecret(request *restful.Request, respo
152183
name := request.PathParameter("name")
153184
err = secret.DeleteSecret(k8sClient, namespace, name)
154185
if err != nil {
186+
if apierrors.IsNotFound(err) {
187+
response.WriteErrorString(http.StatusNotFound, "Secret not found")
188+
return
189+
}
190+
klog.Errorf("failed to delete secret %s/%s: %v", namespace, name, err)
155191
errors.HandleInternalError(response, err)
156192
return
157193
}

0 commit comments

Comments
 (0)