mirror of
https://github.com/portainer/portainer.git
synced 2026-06-23 06:10:13 +00:00
94 lines
3.5 KiB
Go
94 lines
3.5 KiB
Go
package endpoints
|
|
|
|
import (
|
|
"strings"
|
|
|
|
portainer "github.com/portainer/portainer/api"
|
|
|
|
"github.com/Masterminds/semver/v3"
|
|
)
|
|
|
|
// IsLocalEndpoint returns true if this is a local environment(endpoint)
|
|
func IsLocalEndpoint(endpoint *portainer.Endpoint) bool {
|
|
return strings.HasPrefix(endpoint.URL, "unix://") ||
|
|
strings.HasPrefix(endpoint.URL, "npipe://") ||
|
|
endpoint.Type == portainer.KubernetesLocalEnvironment
|
|
}
|
|
|
|
// IsKubernetesEndpoint returns true if this is a kubernetes environment(endpoint)
|
|
func IsKubernetesEndpoint(endpoint *portainer.Endpoint) bool {
|
|
return endpoint.Type == portainer.KubernetesLocalEnvironment ||
|
|
endpoint.Type == portainer.AgentOnKubernetesEnvironment ||
|
|
endpoint.Type == portainer.EdgeAgentOnKubernetesEnvironment
|
|
}
|
|
|
|
// IsDockerEndpoint returns true if this is a docker environment(endpoint)
|
|
func IsDockerEndpoint(endpoint *portainer.Endpoint) bool {
|
|
return endpoint.Type == portainer.DockerEnvironment ||
|
|
endpoint.Type == portainer.AgentOnDockerEnvironment ||
|
|
endpoint.Type == portainer.EdgeAgentOnDockerEnvironment
|
|
}
|
|
|
|
// IsAgentEndpoint returns true if this is an Agent endpoint
|
|
func IsAgentEndpoint(endpoint *portainer.Endpoint) bool {
|
|
return endpoint.Type == portainer.AgentOnDockerEnvironment ||
|
|
endpoint.Type == portainer.EdgeAgentOnDockerEnvironment ||
|
|
endpoint.Type == portainer.AgentOnKubernetesEnvironment ||
|
|
endpoint.Type == portainer.EdgeAgentOnKubernetesEnvironment
|
|
}
|
|
|
|
// EndpointSet receives an environment(endpoint) array and returns a set
|
|
func EndpointSet(endpointIDs []portainer.EndpointID) map[portainer.EndpointID]bool {
|
|
set := map[portainer.EndpointID]bool{}
|
|
|
|
for _, endpointID := range endpointIDs {
|
|
set[endpointID] = true
|
|
}
|
|
|
|
return set
|
|
}
|
|
|
|
// IsRegularAgentEndpoint returns true if this is a regular agent endpoint
|
|
func IsRegularAgentEndpoint(endpoint *portainer.Endpoint) bool {
|
|
return endpoint.Type == portainer.AgentOnDockerEnvironment ||
|
|
endpoint.Type == portainer.AgentOnKubernetesEnvironment
|
|
}
|
|
|
|
// IsEdgeEndpoint returns true if this is an Edge endpoint
|
|
func IsEdgeEndpoint(endpoint *portainer.Endpoint) bool {
|
|
return endpoint.Type == portainer.EdgeAgentOnDockerEnvironment || endpoint.Type == portainer.EdgeAgentOnKubernetesEnvironment
|
|
}
|
|
|
|
// IsStandardEdgeEndpoint returns true if this is a standard Edge endpoint and not in async mode on either Docker or Kubernetes
|
|
func IsStandardEdgeEndpoint(endpoint *portainer.Endpoint) bool {
|
|
return (endpoint.Type == portainer.EdgeAgentOnDockerEnvironment || endpoint.Type == portainer.EdgeAgentOnKubernetesEnvironment) && !endpoint.Edge.AsyncMode
|
|
}
|
|
|
|
// IsAssociatedEdgeEndpoint returns true if the environment is an Edge environment
|
|
// and has a set EdgeID and UserTrusted is true.
|
|
func IsAssociatedEdgeEndpoint(endpoint *portainer.Endpoint) bool {
|
|
return IsEdgeEndpoint(endpoint) && endpoint.EdgeID != "" && endpoint.UserTrusted
|
|
}
|
|
|
|
// HasDirectConnectivity returns true if the environment is a non-Edge environment
|
|
// or is an associated Edge environment that is not in async mode.
|
|
func HasDirectConnectivity(endpoint *portainer.Endpoint) bool {
|
|
return !IsEdgeEndpoint(endpoint) || (IsAssociatedEdgeEndpoint(endpoint) && !endpoint.Edge.AsyncMode)
|
|
}
|
|
|
|
// IsNewerThan225 returns true if the agent version is newer than 2.25.0
|
|
// this is used to check if the agent is compatible with the new diagnostics feature
|
|
func IsNewerThan225(agentVersion string) bool {
|
|
v1, err := semver.NewVersion(agentVersion)
|
|
if err != nil || v1 == nil {
|
|
return false
|
|
}
|
|
|
|
v2, err := semver.NewVersion("2.25.0")
|
|
if err != nil || v2 == nil {
|
|
return false
|
|
}
|
|
|
|
return v1.GreaterThanEqual(v2)
|
|
}
|