From 22343329012edd4c83ae2aaca21bd26e78e3f706 Mon Sep 17 00:00:00 2001 From: John-Lin Date: Fri, 28 Sep 2018 11:40:26 +0800 Subject: [PATCH] use update --- src/server/handler_deployment.go | 44 ++++++++++++++++++--------- src/server/handler_deployment_test.go | 4 +-- src/server/route.go | 2 +- 3 files changed, 33 insertions(+), 17 deletions(-) diff --git a/src/server/handler_deployment.go b/src/server/handler_deployment.go index 495ad9f2..20e63b1a 100644 --- a/src/server/handler_deployment.go +++ b/src/server/handler_deployment.go @@ -315,8 +315,9 @@ func uploadDeploymentYAMLHandler(ctx *web.Context) { resp.WriteHeaderAndEntity(http.StatusCreated, d) } -func createAutoscalerHandler(ctx *web.Context) { +func updateAutoscalerHandler(ctx *web.Context) { sp, req, resp := ctx.ServiceProvider, ctx.Request, ctx.Response + enableAutoscaler := req.QueryParameter("enable") == "true" session := sp.Mongo.NewSession() defer session.Close() @@ -332,19 +333,34 @@ func createAutoscalerHandler(ctx *web.Context) { return } - if err := deployment.CreateAutoscaler(sp, autoscalerInfo); err != nil { - if errors.IsAlreadyExists(err) { - response.Conflict(req.Request, resp.ResponseWriter, fmt.Errorf("Autoscaler Name: %s already existed", autoscalerInfo.Name)) - } else if errors.IsConflict(err) { - response.Conflict(req.Request, resp.ResponseWriter, fmt.Errorf("Create autoscaler setting has conflict: %v", err)) - } else if errors.IsInvalid(err) { - response.BadRequest(req.Request, resp.ResponseWriter, fmt.Errorf("Create autoscaler setting is invalid: %v", err)) - } else { - response.InternalServerError(req.Request, resp.ResponseWriter, err) + if enableAutoscaler { + // Create Autoscaler + if err := deployment.CreateAutoscaler(sp, autoscalerInfo); err != nil { + if errors.IsAlreadyExists(err) { + response.Conflict(req.Request, resp.ResponseWriter, err) + } else if errors.IsConflict(err) { + response.Conflict(req.Request, resp.ResponseWriter, err) + } else if errors.IsInvalid(err) { + response.BadRequest(req.Request, resp.ResponseWriter, err) + } else { + response.InternalServerError(req.Request, resp.ResponseWriter, err) + } + return + + } + } else { + // Delete Autoscaler + if err := deployment.DeleteAutoscaler(sp, autoscalerInfo); err != nil { + if errors.IsNotFound(err) { + response.NotFound(req.Request, resp.ResponseWriter, err) + } else if errors.IsForbidden(err) { + response.NotAcceptable(req.Request, resp.ResponseWriter, err) + } else { + response.InternalServerError(req.Request, resp.ResponseWriter, err) + } + return } - return } - // find the deployment id by deployment name deployment, err := backend.FindDeploymentByName(session, autoscalerInfo.ScaleTargetRefName) if err != nil { @@ -353,7 +369,7 @@ func createAutoscalerHandler(ctx *web.Context) { } // Update autoscalerInfo - deployment.IsAutoscaler = true + deployment.IsAutoscaler = enableAutoscaler deployment.AutoscalerInfo = autoscalerInfo modifier := bson.M{ "$set": deployment, @@ -365,5 +381,5 @@ func createAutoscalerHandler(ctx *web.Context) { response.InternalServerError(req.Request, resp.ResponseWriter, err) return } - resp.WriteHeaderAndEntity(http.StatusCreated, deployment) + resp.WriteHeaderAndEntity(http.StatusAccepted, deployment) } diff --git a/src/server/handler_deployment_test.go b/src/server/handler_deployment_test.go index db17115b..3ff21e24 100644 --- a/src/server/handler_deployment_test.go +++ b/src/server/handler_deployment_test.go @@ -500,14 +500,14 @@ func (suite *DeploymentTestSuite) TestCreateDeploymentWithAutoscaler() { suite.NoError(err) autoBodyReader := strings.NewReader(string(autoBodyBytes)) - autoHTTPRequest, err := http.NewRequest("POST", "http://localhost:7890/v1/deployments/autoscale", autoBodyReader) + autoHTTPRequest, err := http.NewRequest("PUT", "http://localhost:7890/v1/deployments/autoscale/?enbale=true", autoBodyReader) suite.NoError(err) autoHTTPRequest.Header.Add("Content-Type", "application/json") autoHTTPRequest.Header.Add("Authorization", suite.JWTBearer) autoHTTPWriter := httptest.NewRecorder() suite.wc.Dispatch(autoHTTPWriter, autoHTTPRequest) - assertResponseCode(suite.T(), http.StatusCreated, autoHTTPWriter) + assertResponseCode(suite.T(), http.StatusAccepted, autoHTTPWriter) // load data to check retDeployment := entity.Deployment{} diff --git a/src/server/route.go b/src/server/route.go index 4ff0f438..6f95b096 100644 --- a/src/server/route.go +++ b/src/server/route.go @@ -132,7 +132,7 @@ func newDeploymentService(sp *serviceprovider.Container) *restful.WebService { webService.Route(webService.GET("/").To(handler.RESTfulServiceHandler(sp, listDeploymentHandler))) webService.Route(webService.GET("/{id}").To(handler.RESTfulServiceHandler(sp, getDeploymentHandler))) webService.Route(webService.POST("/upload/yaml").Consumes("multipart/form-data").To(handler.RESTfulServiceHandler(sp, uploadDeploymentYAMLHandler))) - webService.Route(webService.POST("/autoscale").To(handler.RESTfulServiceHandler(sp, createAutoscalerHandler))) + webService.Route(webService.PUT("/autoscale").To(handler.RESTfulServiceHandler(sp, updateAutoscalerHandler))) return webService }