From eeff16a300207d806486a4d90a834d5719d1bc47 Mon Sep 17 00:00:00 2001 From: matias-portainer <104775949+matias-portainer@users.noreply.github.com> Date: Tue, 17 Jan 2023 09:47:14 -0300 Subject: [PATCH] fix(edgejobs): remove endpoint from edge job mapping on endpoint deletion EE-4764 (#8279) --- api/http/handler/endpoints/endpoint_delete.go | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/api/http/handler/endpoints/endpoint_delete.go b/api/http/handler/endpoints/endpoint_delete.go index ab9d92d6d..5777616da 100644 --- a/api/http/handler/endpoints/endpoint_delete.go +++ b/api/http/handler/endpoints/endpoint_delete.go @@ -9,6 +9,7 @@ import ( "github.com/portainer/libhttp/response" portainer "github.com/portainer/portainer/api" httperrors "github.com/portainer/portainer/api/http/errors" + "github.com/portainer/portainer/api/internal/endpointutils" ) // @id EndpointDelete @@ -124,6 +125,26 @@ func (handler *Handler) endpointDelete(w http.ResponseWriter, r *http.Request) * } } + if !endpointutils.IsEdgeEndpoint(endpoint) { + return response.Empty(w) + } + + edgeJobs, err := handler.DataStore.EdgeJob().EdgeJobs() + if err != nil { + return httperror.InternalServerError("Unable to retrieve edge jobs from the database", err) + } + + for idx := range edgeJobs { + edgeJob := &edgeJobs[idx] + if _, ok := edgeJob.Endpoints[endpoint.ID]; ok { + delete(edgeJob.Endpoints, endpoint.ID) + err = handler.DataStore.EdgeJob().UpdateEdgeJob(edgeJob.ID, edgeJob) + if err != nil { + return httperror.InternalServerError("Unable to update edge job", err) + } + } + } + return response.Empty(w) }