mirror of
https://github.com/portainer/portainer.git
synced 2025-07-19 13:29:41 +02:00
fix(edgestack): remove project folder after deleting edgestack [BE-11559] (#320)
This commit is contained in:
parent
6be2420b32
commit
2abe40b786
3 changed files with 70 additions and 2 deletions
|
@ -3,6 +3,7 @@ package edgestacks
|
||||||
import (
|
import (
|
||||||
"errors"
|
"errors"
|
||||||
"net/http"
|
"net/http"
|
||||||
|
"strconv"
|
||||||
|
|
||||||
portainer "github.com/portainer/portainer/api"
|
portainer "github.com/portainer/portainer/api"
|
||||||
"github.com/portainer/portainer/api/dataservices"
|
"github.com/portainer/portainer/api/dataservices"
|
||||||
|
@ -52,10 +53,14 @@ func (handler *Handler) deleteEdgeStack(tx dataservices.DataStoreTx, edgeStackID
|
||||||
return httperror.InternalServerError("Unable to find an edge stack with the specified identifier inside the database", err)
|
return httperror.InternalServerError("Unable to find an edge stack with the specified identifier inside the database", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
err = handler.edgeStacksService.DeleteEdgeStack(tx, edgeStack.ID, edgeStack.EdgeGroups)
|
if err := handler.edgeStacksService.DeleteEdgeStack(tx, edgeStack.ID, edgeStack.EdgeGroups); err != nil {
|
||||||
if err != nil {
|
|
||||||
return httperror.InternalServerError("Unable to delete edge stack", err)
|
return httperror.InternalServerError("Unable to delete edge stack", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
stackFolder := handler.FileService.GetEdgeStackProjectPath(strconv.Itoa(int(edgeStack.ID)))
|
||||||
|
if err := handler.FileService.RemoveDirectory(stackFolder); err != nil {
|
||||||
|
return httperror.InternalServerError("Unable to remove edge stack project folder", err)
|
||||||
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,12 +1,14 @@
|
||||||
package edgestacks
|
package edgestacks
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"bytes"
|
||||||
"fmt"
|
"fmt"
|
||||||
"net/http"
|
"net/http"
|
||||||
"net/http/httptest"
|
"net/http/httptest"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
portainer "github.com/portainer/portainer/api"
|
portainer "github.com/portainer/portainer/api"
|
||||||
|
"github.com/stretchr/testify/assert"
|
||||||
|
|
||||||
"github.com/segmentio/encoding/json"
|
"github.com/segmentio/encoding/json"
|
||||||
)
|
)
|
||||||
|
@ -101,3 +103,52 @@ func TestDeleteInvalidEdgeStack(t *testing.T) {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestDeleteEdgeStack_RemoveProjectFolder(t *testing.T) {
|
||||||
|
handler, rawAPIKey := setupHandler(t)
|
||||||
|
|
||||||
|
edgeGroup := createEdgeGroup(t, handler.DataStore)
|
||||||
|
|
||||||
|
payload := edgeStackFromStringPayload{
|
||||||
|
Name: "test-stack",
|
||||||
|
DeploymentType: portainer.EdgeStackDeploymentCompose,
|
||||||
|
EdgeGroups: []portainer.EdgeGroupID{edgeGroup.ID},
|
||||||
|
StackFileContent: "version: '3.7'\nservices:\n test:\n image: test",
|
||||||
|
}
|
||||||
|
|
||||||
|
var buf bytes.Buffer
|
||||||
|
if err := json.NewEncoder(&buf).Encode(payload); err != nil {
|
||||||
|
t.Fatal("error encoding payload:", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Create
|
||||||
|
req, err := http.NewRequest(http.MethodPost, "/edge_stacks/create/string", &buf)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal("request error:", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
req.Header.Add("x-api-key", rawAPIKey)
|
||||||
|
rec := httptest.NewRecorder()
|
||||||
|
handler.ServeHTTP(rec, req)
|
||||||
|
|
||||||
|
if rec.Code != http.StatusOK {
|
||||||
|
t.Fatalf("expected a %d response, found: %d", http.StatusNoContent, rec.Code)
|
||||||
|
}
|
||||||
|
|
||||||
|
assert.DirExists(t, handler.FileService.GetEdgeStackProjectPath("1"))
|
||||||
|
|
||||||
|
// Delete
|
||||||
|
if req, err = http.NewRequest(http.MethodDelete, "/edge_stacks/1", nil); err != nil {
|
||||||
|
t.Fatal("request error:", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
req.Header.Add("x-api-key", rawAPIKey)
|
||||||
|
rec = httptest.NewRecorder()
|
||||||
|
handler.ServeHTTP(rec, req)
|
||||||
|
|
||||||
|
if rec.Code != http.StatusNoContent {
|
||||||
|
t.Fatalf("expected a %d response, found: %d", http.StatusNoContent, rec.Code)
|
||||||
|
}
|
||||||
|
|
||||||
|
assert.NoDirExists(t, handler.FileService.GetEdgeStackProjectPath("1"))
|
||||||
|
}
|
||||||
|
|
|
@ -144,3 +144,15 @@ func createEdgeStack(t *testing.T, store dataservices.DataStore, endpointID port
|
||||||
|
|
||||||
return edgeStack
|
return edgeStack
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func createEdgeGroup(t *testing.T, store dataservices.DataStore) portainer.EdgeGroup {
|
||||||
|
edgeGroup := portainer.EdgeGroup{
|
||||||
|
ID: 1,
|
||||||
|
Name: "EdgeGroup 1",
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := store.EdgeGroup().Create(&edgeGroup); err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
return edgeGroup
|
||||||
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue