mirror of https://github.com/portainer/portainer
56 lines
1.6 KiB
Go
56 lines
1.6 KiB
Go
package edgegroups
|
|
|
|
import (
|
|
"net/http"
|
|
|
|
httperror "github.com/portainer/libhttp/error"
|
|
"github.com/portainer/libhttp/response"
|
|
"github.com/portainer/portainer/api"
|
|
)
|
|
|
|
type decoratedEdgeGroup struct {
|
|
portainer.EdgeGroup
|
|
HasEdgeStack bool `json:"HasEdgeStack"`
|
|
}
|
|
|
|
func (handler *Handler) edgeGroupList(w http.ResponseWriter, r *http.Request) *httperror.HandlerError {
|
|
edgeGroups, err := handler.DataStore.EdgeGroup().EdgeGroups()
|
|
if err != nil {
|
|
return &httperror.HandlerError{http.StatusInternalServerError, "Unable to retrieve Edge groups from the database", err}
|
|
}
|
|
|
|
edgeStacks, err := handler.DataStore.EdgeStack().EdgeStacks()
|
|
if err != nil {
|
|
return &httperror.HandlerError{http.StatusInternalServerError, "Unable to retrieve Edge stacks from the database", err}
|
|
}
|
|
|
|
usedEdgeGroups := make(map[portainer.EdgeGroupID]bool)
|
|
|
|
for _, stack := range edgeStacks {
|
|
for _, groupID := range stack.EdgeGroups {
|
|
usedEdgeGroups[groupID] = true
|
|
}
|
|
}
|
|
|
|
decoratedEdgeGroups := []decoratedEdgeGroup{}
|
|
for _, orgEdgeGroup := range edgeGroups {
|
|
edgeGroup := decoratedEdgeGroup{
|
|
EdgeGroup: orgEdgeGroup,
|
|
}
|
|
if edgeGroup.Dynamic {
|
|
endpoints, err := handler.getEndpointsByTags(edgeGroup.TagIDs, edgeGroup.PartialMatch)
|
|
if err != nil {
|
|
return &httperror.HandlerError{http.StatusInternalServerError, "Unable to retrieve endpoints and endpoint groups for Edge group", err}
|
|
}
|
|
|
|
edgeGroup.Endpoints = endpoints
|
|
}
|
|
|
|
edgeGroup.HasEdgeStack = usedEdgeGroups[edgeGroup.ID]
|
|
|
|
decoratedEdgeGroups = append(decoratedEdgeGroups, edgeGroup)
|
|
}
|
|
|
|
return response.JSON(w, decoratedEdgeGroups)
|
|
}
|