mirror of https://github.com/portainer/portainer
55 lines
1.4 KiB
Go
55 lines
1.4 KiB
Go
package portainer
|
|
|
|
// EdgeGroupRelatedEndpoints returns a list of endpoints related to this Edge group
|
|
func EdgeGroupRelatedEndpoints(edgeGroup *EdgeGroup, endpoints []Endpoint, endpointGroups []EndpointGroup) []EndpointID {
|
|
if !edgeGroup.Dynamic {
|
|
return edgeGroup.Endpoints
|
|
}
|
|
|
|
endpointIDs := []EndpointID{}
|
|
for _, endpoint := range endpoints {
|
|
if endpoint.Type != EdgeAgentEnvironment {
|
|
continue
|
|
}
|
|
|
|
var endpointGroup EndpointGroup
|
|
for _, group := range endpointGroups {
|
|
if endpoint.GroupID == group.ID {
|
|
endpointGroup = group
|
|
break
|
|
}
|
|
}
|
|
|
|
if edgeGroupRelatedToEndpoint(edgeGroup, &endpoint, &endpointGroup) {
|
|
endpointIDs = append(endpointIDs, endpoint.ID)
|
|
}
|
|
}
|
|
|
|
return endpointIDs
|
|
}
|
|
|
|
// edgeGroupRelatedToEndpoint returns true is edgeGroup is associated with endpoint
|
|
func edgeGroupRelatedToEndpoint(edgeGroup *EdgeGroup, endpoint *Endpoint, endpointGroup *EndpointGroup) bool {
|
|
if !edgeGroup.Dynamic {
|
|
for _, endpointID := range edgeGroup.Endpoints {
|
|
if endpoint.ID == endpointID {
|
|
return true
|
|
}
|
|
}
|
|
return false
|
|
}
|
|
|
|
endpointTags := TagSet(endpoint.TagIDs)
|
|
if endpointGroup.TagIDs != nil {
|
|
endpointTags = TagUnion(endpointTags, TagSet(endpointGroup.TagIDs))
|
|
}
|
|
edgeGroupTags := TagSet(edgeGroup.TagIDs)
|
|
|
|
if edgeGroup.PartialMatch {
|
|
intersection := TagIntersection(endpointTags, edgeGroupTags)
|
|
return len(intersection) != 0
|
|
}
|
|
|
|
return TagContains(edgeGroupTags, endpointTags)
|
|
}
|