in dp_check/dp_check.go [1054:1136]
func getBackendAddrsFromTrafficDirector(addressFamily string) ([]string, error) {
// Open a RPC stream to Traffic Director
ctx, cancel := context.WithTimeout(context.Background(), time.Second*20)
defer cancel()
stream, err := openAdsStream(ctx)
if err != nil {
return []string{}, fmt.Errorf("failed to open stream to Traffic Director: %v", err)
}
// Create node
zone, err := getZone(10 * time.Second)
if err != nil {
return []string{}, fmt.Errorf("failed to get zone from metadata server: %v", err)
}
var ipv6Capable bool
if *ipv6CapableNodeMetadataOverride != "" {
if *ipv6CapableNodeMetadataOverride == "true" {
ipv6Capable = true
} else if *ipv6CapableNodeMetadataOverride == "false" {
ipv6Capable = false
} else {
return []string{}, fmt.Errorf("invalid value for --ipv6_capable_node_metadata_override: %v", *ipv6CapableNodeMetadataOverride)
}
} else {
if addressFamily == "IPv6" {
ipv6Capable = true
} else if addressFamily == "IPv4" {
ipv6Capable = false
} else {
return []string{}, fmt.Errorf("invalid address family: %v", addressFamily)
}
}
node := newNode(zone, ipv6Capable)
// XDS
versionInfoMap := map[string]string{
V3ListenerURL: "",
V3RouteConfigURL: "",
V3ClusterURL: "",
V3EndpointsURL: "",
}
nonceMap := map[string]string{
V3ListenerURL: "",
V3RouteConfigURL: "",
V3ClusterURL: "",
V3EndpointsURL: "",
}
// LDS
clusterName, err := checkLDS(stream, node, versionInfoMap, nonceMap)
if err != nil {
return []string{}, fmt.Errorf("LDS failed: %v", err)
}
// CDS
serviceName, err := checkCDS(stream, node, clusterName, versionInfoMap, nonceMap)
if err != nil {
return []string{}, fmt.Errorf("CDS failed: %v", err)
}
// EDS
xdsBackendAddrs, err := checkEDS(stream, node, serviceName, versionInfoMap, nonceMap)
if err != nil {
return []string{}, fmt.Errorf("EDS failed: %v", err)
}
for _, backend := range xdsBackendAddrs {
// check if the backend address is of the expected address family
if addressFamily == "IPv4" {
ip, err := parseAddress(backend)
if err != nil {
return []string{}, fmt.Errorf("failed to parse backend address %v: %v", backend, err)
}
if ip.To4() == nil {
return []string{}, fmt.Errorf("backend address %v is not IPv4", backend)
}
} else if addressFamily == "IPv6" {
ip, err := parseAddress(backend)
if err != nil {
return []string{}, fmt.Errorf("failed to parse backend address %v: %v", backend, err)
}
if ip.To4() != nil {
return []string{}, fmt.Errorf("backend address %v is not IPv6", backend)
}
}
infoLog.Printf("Found %v backend address from Traffic Director: |%v|", addressFamily, backend)
}
return xdsBackendAddrs, nil
}