diff --git a/api/http/handler/stacks/update_kubernetes_stack.go b/api/http/handler/stacks/update_kubernetes_stack.go index 8b319f8a8..d39d250d9 100644 --- a/api/http/handler/stacks/update_kubernetes_stack.go +++ b/api/http/handler/stacks/update_kubernetes_stack.go @@ -1,11 +1,7 @@ package stacks import ( - "fmt" - "io/ioutil" "net/http" - "os" - "path" "strconv" "github.com/asaskevich/govalidator" @@ -13,7 +9,6 @@ import ( httperror "github.com/portainer/libhttp/error" "github.com/portainer/libhttp/request" portainer "github.com/portainer/portainer/api" - "github.com/portainer/portainer/api/filesystem" gittypes "github.com/portainer/portainer/api/git/types" k "github.com/portainer/portainer/api/kubernetes" ) @@ -95,16 +90,12 @@ func (handler *Handler) updateKubernetesStack(r *http.Request, stack *portainer. return &httperror.HandlerError{StatusCode: http.StatusBadRequest, Message: "Invalid request payload", Err: err} } - tempFileDir, _ := ioutil.TempDir("", "kub_file_content") - defer os.RemoveAll(tempFileDir) - - if err := filesystem.WriteToFile(path.Join(tempFileDir, stack.EntryPoint), []byte(payload.StackFileContent)); err != nil { - return &httperror.HandlerError{StatusCode: http.StatusBadRequest, Message: "Failed to persist deployment file in a temp directory", Err: err} + stackFolder := strconv.Itoa(int(stack.ID)) + projectPath, err := handler.FileService.StoreStackFileFromBytes(stackFolder, stack.EntryPoint, []byte(payload.StackFileContent)) + if err != nil { + return &httperror.HandlerError{StatusCode: http.StatusInternalServerError, Message: "Unable to persist Kubernetes manifest file on disk", Err: err} } - - //use temp dir as the stack project path for deployment - //so if the deployment failed, the original file won't be over-written - stack.ProjectPath = tempFileDir + stack.ProjectPath = projectPath _, err = handler.deployKubernetesStack(r, endpoint, stack, k.KubeAppLabels{ StackID: int(stack.ID), @@ -117,17 +108,5 @@ func (handler *Handler) updateKubernetesStack(r *http.Request, stack *portainer. return &httperror.HandlerError{StatusCode: http.StatusInternalServerError, Message: "Unable to deploy Kubernetes stack via file content", Err: err} } - stackFolder := strconv.Itoa(int(stack.ID)) - projectPath, err := handler.FileService.StoreStackFileFromBytes(stackFolder, stack.EntryPoint, []byte(payload.StackFileContent)) - if err != nil { - fileType := "Manifest" - if stack.IsComposeFormat { - fileType = "Compose" - } - errMsg := fmt.Sprintf("Unable to persist Kubernetes %s file on disk", fileType) - return &httperror.HandlerError{StatusCode: http.StatusInternalServerError, Message: errMsg, Err: err} - } - stack.ProjectPath = projectPath - return nil }