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) }