mirror of https://github.com/portainer/portainer
62 lines
1.9 KiB
Go
62 lines
1.9 KiB
Go
package edgestacks
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
portainer "github.com/portainer/portainer/api"
|
|
"github.com/portainer/portainer/api/dataservices"
|
|
"github.com/portainer/portainer/api/internal/endpointutils"
|
|
)
|
|
|
|
func hasKubeEndpoint(endpointService dataservices.EndpointService, endpointIDs []portainer.EndpointID) (bool, error) {
|
|
return hasEndpointPredicate(endpointService, endpointIDs, endpointutils.IsKubernetesEndpoint)
|
|
}
|
|
|
|
func hasDockerEndpoint(endpointService dataservices.EndpointService, endpointIDs []portainer.EndpointID) (bool, error) {
|
|
return hasEndpointPredicate(endpointService, endpointIDs, endpointutils.IsDockerEndpoint)
|
|
}
|
|
|
|
func hasEndpointPredicate(endpointService dataservices.EndpointService, endpointIDs []portainer.EndpointID, predicate func(*portainer.Endpoint) bool) (bool, error) {
|
|
for _, endpointID := range endpointIDs {
|
|
endpoint, err := endpointService.Endpoint(endpointID)
|
|
if err != nil {
|
|
return false, fmt.Errorf("failed to retrieve environment from database: %w", err)
|
|
}
|
|
|
|
if predicate(endpoint) {
|
|
return true, nil
|
|
}
|
|
}
|
|
|
|
return false, nil
|
|
}
|
|
|
|
type endpointRelationsConfig struct {
|
|
endpoints []portainer.Endpoint
|
|
endpointGroups []portainer.EndpointGroup
|
|
edgeGroups []portainer.EdgeGroup
|
|
}
|
|
|
|
func fetchEndpointRelationsConfig(dataStore dataservices.DataStore) (*endpointRelationsConfig, error) {
|
|
endpoints, err := dataStore.Endpoint().Endpoints()
|
|
if err != nil {
|
|
return nil, fmt.Errorf("unable to retrieve environments from database: %w", err)
|
|
}
|
|
|
|
endpointGroups, err := dataStore.EndpointGroup().EndpointGroups()
|
|
if err != nil {
|
|
return nil, fmt.Errorf("unable to retrieve environment groups from database: %w", err)
|
|
}
|
|
|
|
edgeGroups, err := dataStore.EdgeGroup().EdgeGroups()
|
|
if err != nil {
|
|
return nil, fmt.Errorf("unable to retrieve edge groups from database: %w", err)
|
|
}
|
|
|
|
return &endpointRelationsConfig{
|
|
endpoints: endpoints,
|
|
endpointGroups: endpointGroups,
|
|
edgeGroups: edgeGroups,
|
|
}, nil
|
|
}
|