From c8d334e6038b2bbe61833542f3b03eaf4522f2dd Mon Sep 17 00:00:00 2001 From: Chaim Lev-Ari Date: Wed, 1 Mar 2023 13:44:34 +0200 Subject: [PATCH] fix(server): skip file deletion errors [EE-4916] (#8443) --- api/exec/compose_stack.go | 8 ++------ api/go.mod | 2 +- api/go.sum | 6 ++++++ api/http/handler/customtemplates/customtemplate_delete.go | 3 ++- api/http/handler/edgejobs/edgejob_delete.go | 3 ++- api/http/handler/edgestacks/edgestack_update.go | 3 ++- api/http/handler/stacks/stack_delete.go | 3 ++- 7 files changed, 17 insertions(+), 11 deletions(-) diff --git a/api/exec/compose_stack.go b/api/exec/compose_stack.go index f7bf3c872..dd84bd6a2 100644 --- a/api/exec/compose_stack.go +++ b/api/exec/compose_stack.go @@ -66,7 +66,7 @@ func (manager *ComposeStackManager) Up(ctx context.Context, stack *portainer.Sta return errors.Wrap(err, "failed to deploy a stack") } -// Down stops and removes containers, networks, images, and volumes. Wraps `docker-compose down --remove-orphans` command +// Down stops and removes containers, networks, images, and volumes func (manager *ComposeStackManager) Down(ctx context.Context, stack *portainer.Stack, endpoint *portainer.Endpoint) error { url, proxy, err := manager.fetchEndpointProxy(endpoint) if err != nil { @@ -81,13 +81,9 @@ func (manager *ComposeStackManager) Down(ctx context.Context, stack *portainer.S return errors.Wrap(err, "failed to create env file") } - filePaths := stackutils.GetStackFilePaths(stack, false) - - err = manager.deployer.Remove(ctx, filePaths, libstack.Options{ - WorkingDir: stack.ProjectPath, + err = manager.deployer.Remove(ctx, stack.Name, nil, libstack.Options{ EnvFilePath: envFilePath, Host: url, - ProjectName: stack.Name, }) return errors.Wrap(err, "failed to remove a stack") } diff --git a/api/go.mod b/api/go.mod index 4af7e029d..f782ce000 100644 --- a/api/go.mod +++ b/api/go.mod @@ -36,7 +36,7 @@ require ( github.com/orcaman/concurrent-map v0.0.0-20190826125027-8c72a8bb44f6 github.com/patrickmn/go-cache v2.1.0+incompatible github.com/pkg/errors v0.9.1 - github.com/portainer/docker-compose-wrapper v0.0.0-20221215210951-2c30d1b17a27 + github.com/portainer/docker-compose-wrapper v0.0.0-20230301083819-3dbc6abf1ce7 github.com/portainer/libcrypto v0.0.0-20220506221303-1f4fb3b30f9a github.com/portainer/libhttp v0.0.0-20230206214615-dabd58de9f44 github.com/portainer/portainer/pkg/featureflags v0.0.0-20230209201943-d73622ed9cd4 diff --git a/api/go.sum b/api/go.sum index 9ddb5a4f2..e8019a424 100644 --- a/api/go.sum +++ b/api/go.sum @@ -344,6 +344,12 @@ github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZb github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/portainer/docker-compose-wrapper v0.0.0-20221215210951-2c30d1b17a27 h1:PceCpp86SDYb3lZHT4KpuBCkmcJMW5x1qrdFNEfAdUo= github.com/portainer/docker-compose-wrapper v0.0.0-20221215210951-2c30d1b17a27/go.mod h1:03UmPLyjiPUexGJuW20mQXvmsoSpeErvMlItJGtq/Ww= +github.com/portainer/docker-compose-wrapper v0.0.0-20230209071700-ee11af9c546a h1:4VGM1OH15fqm5rgki0eLF6vND/NxHfoPt3CA6/YdA0k= +github.com/portainer/docker-compose-wrapper v0.0.0-20230209071700-ee11af9c546a/go.mod h1:03UmPLyjiPUexGJuW20mQXvmsoSpeErvMlItJGtq/Ww= +github.com/portainer/docker-compose-wrapper v0.0.0-20230209082344-8a5b52de366f h1:z/lmLhZMMSIwg70Ap1rPluXNe1vQXH9gfK9K/ols4JA= +github.com/portainer/docker-compose-wrapper v0.0.0-20230209082344-8a5b52de366f/go.mod h1:03UmPLyjiPUexGJuW20mQXvmsoSpeErvMlItJGtq/Ww= +github.com/portainer/docker-compose-wrapper v0.0.0-20230301083819-3dbc6abf1ce7 h1:/i985KPNw0KvVtLhTEPUa86aJMtun5ZPOyFCJzdY+dY= +github.com/portainer/docker-compose-wrapper v0.0.0-20230301083819-3dbc6abf1ce7/go.mod h1:03UmPLyjiPUexGJuW20mQXvmsoSpeErvMlItJGtq/Ww= github.com/portainer/libcrypto v0.0.0-20220506221303-1f4fb3b30f9a h1:B0z3skIMT+OwVNJPQhKp52X+9OWW6A9n5UWig3lHBJk= github.com/portainer/libcrypto v0.0.0-20220506221303-1f4fb3b30f9a/go.mod h1:n54EEIq+MM0NNtqLeCby8ljL+l275VpolXO0ibHegLE= github.com/portainer/libhttp v0.0.0-20230206214615-dabd58de9f44 h1:4LYprPd3TsYjHk7CaTmCov1ceG6VKJsL40fJIWiRxpw= diff --git a/api/http/handler/customtemplates/customtemplate_delete.go b/api/http/handler/customtemplates/customtemplate_delete.go index 6e15dbfc6..53b23d943 100644 --- a/api/http/handler/customtemplates/customtemplate_delete.go +++ b/api/http/handler/customtemplates/customtemplate_delete.go @@ -10,6 +10,7 @@ import ( portainer "github.com/portainer/portainer/api" httperrors "github.com/portainer/portainer/api/http/errors" "github.com/portainer/portainer/api/http/security" + "github.com/rs/zerolog/log" ) // @id CustomTemplateDelete @@ -61,7 +62,7 @@ func (handler *Handler) customTemplateDelete(w http.ResponseWriter, r *http.Requ err = handler.FileService.RemoveDirectory(customTemplate.ProjectPath) if err != nil { - return httperror.InternalServerError("Unable to remove custom template files from disk", err) + log.Warn().Err(err).Msg("Unable to remove custom template files from disk") } if resourceControl != nil { diff --git a/api/http/handler/edgejobs/edgejob_delete.go b/api/http/handler/edgejobs/edgejob_delete.go index 7e5b9dd62..383951cf1 100644 --- a/api/http/handler/edgejobs/edgejob_delete.go +++ b/api/http/handler/edgejobs/edgejob_delete.go @@ -10,6 +10,7 @@ import ( portainer "github.com/portainer/portainer/api" "github.com/portainer/portainer/api/internal/edge" "github.com/portainer/portainer/api/internal/maps" + "github.com/rs/zerolog/log" ) // @id EdgeJobDelete @@ -40,7 +41,7 @@ func (handler *Handler) edgeJobDelete(w http.ResponseWriter, r *http.Request) *h edgeJobFolder := handler.FileService.GetEdgeJobFolder(strconv.Itoa(edgeJobID)) err = handler.FileService.RemoveDirectory(edgeJobFolder) if err != nil { - return httperror.InternalServerError("Unable to remove the files associated to the Edge job on the filesystem", err) + log.Warn().Err(err).Msg("Unable to remove the files associated to the Edge job on the filesystem") } handler.ReverseTunnelService.RemoveEdgeJob(edgeJob.ID) diff --git a/api/http/handler/edgestacks/edgestack_update.go b/api/http/handler/edgestacks/edgestack_update.go index eb4603aa0..83b93f6fe 100644 --- a/api/http/handler/edgestacks/edgestack_update.go +++ b/api/http/handler/edgestacks/edgestack_update.go @@ -12,6 +12,7 @@ import ( "github.com/portainer/portainer/api/filesystem" "github.com/portainer/portainer/api/internal/edge" "github.com/portainer/portainer/api/internal/endpointutils" + "github.com/rs/zerolog/log" ) type updateEdgeStackPayload struct { @@ -135,7 +136,7 @@ func (handler *Handler) edgeStackUpdate(w http.ResponseWriter, r *http.Request) // deployment type was changed - need to delete the old file err = handler.FileService.RemoveDirectory(stack.ProjectPath) if err != nil { - return httperror.InternalServerError("Unable to clear old files", err) + log.Warn().Err(err).Msg("Unable to clear old files") } stack.EntryPoint = "" diff --git a/api/http/handler/stacks/stack_delete.go b/api/http/handler/stacks/stack_delete.go index d4d353978..02c07a865 100644 --- a/api/http/handler/stacks/stack_delete.go +++ b/api/http/handler/stacks/stack_delete.go @@ -17,6 +17,7 @@ import ( "github.com/portainer/portainer/api/http/security" "github.com/portainer/portainer/api/stacks/deployments" "github.com/portainer/portainer/api/stacks/stackutils" + "github.com/rs/zerolog/log" ) // @id StackDelete @@ -136,7 +137,7 @@ func (handler *Handler) stackDelete(w http.ResponseWriter, r *http.Request) *htt err = handler.FileService.RemoveDirectory(stack.ProjectPath) if err != nil { - return httperror.InternalServerError("Unable to remove stack files from disk", err) + log.Warn().Err(err).Msg("Unable to remove stack files from disk") } return response.Empty(w)