in pkg/appgw/backendaddresspools.go [145:181]
func getAddressesForSubset(subset v1.EndpointSubset) *[]n.ApplicationGatewayBackendAddress {
// We make separate maps for IP and FQDN to ensure uniqueness within the 2 groups
// We cannot use ApplicationGatewayBackendAddress as it contains pointer to strings and the same IP string
// at a different address would be 2 unique keys.
addrSet := make(map[n.ApplicationGatewayBackendAddress]interface{})
ips := make(map[string]interface{})
fqdns := make(map[string]interface{})
for _, address := range subset.Addresses {
// prefer IP address
if len(address.IP) != 0 {
// address specified by ip
ips[address.IP] = nil
} else if len(address.Hostname) != 0 {
// address specified by hostname
fqdns[address.Hostname] = nil
}
}
for _, address := range subset.NotReadyAddresses {
// prefer IP address
if len(address.IP) != 0 {
// address specified by ip
ips[address.IP] = nil
} else if len(address.Hostname) != 0 {
// address specified by hostname
fqdns[address.Hostname] = nil
}
}
for ip := range ips {
addrSet[n.ApplicationGatewayBackendAddress{IPAddress: to.StringPtr(ip)}] = nil
}
for fqdn := range fqdns {
addrSet[n.ApplicationGatewayBackendAddress{Fqdn: to.StringPtr(fqdn)}] = nil
}
return getBackendAddressMapKeys(&addrSet)
}