@@ -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
122144func (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