func getEcsContainerSupportedIPFamilies()

in agent/envoy_bootstrap/platforminfo/platform_info_collector.go [256:297]


func getEcsContainerSupportedIPFamilies(uri string) string {
	metadataMap, err := getEcsMetadata(uri)
	if err != nil {
		log.Warnf("Failed generating SupportedIPFamilies info from ECS metadata: %v", err)
		return ""
	}
	containers := metadataMap["Containers"]
	if containers == nil || len(containers.([]interface{})) == 0 {
		log.Warnf("Containers info not found in ECS metadata: %v", metadataMap)
		return ""
	}
	// all containers share the same networks
	containerInfo := containers.([]interface{})[0]
	networks := containerInfo.(map[string]interface{})["Networks"]
	if networks == nil || len(networks.([]interface{})) == 0 {
		log.Warnf("Networks info not found in container info in ECS metadata: %v", containerInfo)
		return ""
	}

	hasIPv4Addresses := false
	hasIPv6Addresses := false
	networksArray := networks.([]interface{})
	for i := 0; i < len(networksArray); i++ {
		if networksArray[i].(map[string]interface{})["IPv4Addresses"] != nil {
			hasIPv4Addresses = true
		}
		if networksArray[i].(map[string]interface{})["IPv6Addresses"] != nil {
			hasIPv6Addresses = true
		}
	}
	if hasIPv4Addresses && hasIPv6Addresses {
		return "ALL"
	}
	if hasIPv4Addresses {
		return "IPv4_ONLY"
	}
	if hasIPv6Addresses {
		return "IPv6_ONLY"
	}
	log.Warnf("Neither IPv4 or IPv6 addresses are found in ECS metadata Networks")
	return ""
}