mirror of https://github.com/portainer/portainer
				
				
				
			
		
			
				
	
	
		
			46 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Go
		
	
	
			
		
		
	
	
			46 lines
		
	
	
		
			1.6 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
 | 
						|
}
 | 
						|
 | 
						|
func hasWrongEnvironmentType(endpointService dataservices.EndpointService, endpointIDs []portainer.EndpointID, deploymentType portainer.EdgeStackDeploymentType) (bool, error) {
 | 
						|
	return hasEndpointPredicate(endpointService, endpointIDs, func(e *portainer.Endpoint) bool {
 | 
						|
		switch deploymentType {
 | 
						|
		case portainer.EdgeStackDeploymentKubernetes:
 | 
						|
			return !endpointutils.IsKubernetesEndpoint(e)
 | 
						|
		case portainer.EdgeStackDeploymentCompose:
 | 
						|
			return !endpointutils.IsDockerEndpoint(e)
 | 
						|
		default:
 | 
						|
			return true
 | 
						|
		}
 | 
						|
	})
 | 
						|
}
 |