in dp_check/dp_check.go [837:873]
func processDNSClusterResponse(cdsReply *v3discoverypb.DiscoveryResponse, clusterName string) error {
dnsCluster, err := getCluster(cdsReply, clusterName)
if err != nil {
return fmt.Errorf("failed to get DNS cluster from CDS response: %v", err)
}
// cluster type must be LOGICAL_DNS
if dnsCluster.GetType() != v3clusterpb.Cluster_LOGICAL_DNS {
return fmt.Errorf("the cluster type is expected to be LOGICAL_DNS, but it is: %v", dnsCluster.GetType())
}
// the DNS cluster must exactly have one locality
if len(dnsCluster.GetLoadAssignment().GetEndpoints()) != 1 {
for _, locality := range dnsCluster.GetLoadAssignment().GetEndpoints() {
infoLog.Printf("Found locality in DNS cluster: %v", locality)
}
return fmt.Errorf("the DNS cluster must have exactly 1 locality, but it has %v", len(dnsCluster.GetLoadAssignment().GetEndpoints()))
}
// the locality must exactly have one endpoint
locality := dnsCluster.GetLoadAssignment().GetEndpoints()[0]
if len(locality.GetLbEndpoints()) != 1 {
for _, endpoint := range locality.GetLbEndpoints() {
infoLog.Printf("Found endpoint in DNS cluster: %v", endpoint)
}
return fmt.Errorf("the DNS cluster must exactly has 1 endpoint, but it has %v", len(locality.GetLbEndpoints()))
}
// check socket_address field of the endpoint
socketAddress := locality.GetLbEndpoints()[0].GetEndpoint().GetAddress().GetSocketAddress()
if socketAddress.GetAddress() != *service {
return fmt.Errorf("the address field must be service name |%v|, but it is |%v|", *service, socketAddress.GetAddress())
}
if socketAddress.GetPortValue() != 443 {
return fmt.Errorf("the port_value field must be CFE port 443, but it is: %v", socketAddress.GetPortValue())
}
if socketAddress.GetResolverName() != "" {
return fmt.Errorf("the resolver_name field must not be set, but it is: %v", socketAddress.GetResolverName())
}
return nil
}