protected void populateResolveInfo( final boolean isVIPProvider, final Map<Long, IpAddress> instanceIdToHostIpMap, ServiceDnsEntryData serviceData, Service clientService, Map<String, Map<String, String>> resolve, Map<String, String> resolveCname, Service targetService, ServiceInstanceData targetInstance) { String targetInstanceName = targetInstance.getInstance() == null ? null : targetInstance.getInstance().getName(); boolean self = clientService.getId().equals(targetService.getId()); String dnsName = getDnsName(targetService, serviceData.getConsumeMap(), targetInstance.getExposeMap(), self); String targetIp = isVIPProvider ? clientService.getVip() : getIpAddress(targetInstance, false, instanceIdToHostIpMap); if (targetIp != null) { Map<String, String> ips = resolve.get(dnsName); if (ips == null) { ips = new HashMap<>(); } ips.put(targetIp, targetInstanceName); resolve.put(dnsName, ips); } else { String cname = targetInstance.getExposeMap().getHostName(); if (cname != null) { resolveCname.put(dnsName, cname); } } }
protected List<DnsEntryData> convertToDnsEntryData( final boolean isVIPProvider, List<ServiceDnsEntryData> serviceDnsData, long accountId, long vnetId) { final Map<Long, IpAddress> instanceIdToHostIpMap = getInstanceWithHostNetworkingToIpMap(accountId); Map<Long, List<ServiceInstanceData>> servicesClientInstances = getServiceInstancesData(accountId, true, vnetId); Map<Long, List<ServiceInstanceData>> servicesTargetInstances = getServiceInstancesData(accountId, false, vnetId); Map<Long, List<ServiceDnsEntryData>> clientServiceIdToServiceData = new HashMap<>(); for (ServiceDnsEntryData data : serviceDnsData) { Long clientServiceId = data.getClientService().getId(); List<ServiceDnsEntryData> existingData = clientServiceIdToServiceData.get(clientServiceId); if (existingData == null) { existingData = new ArrayList<>(); } existingData.add(data); clientServiceIdToServiceData.put(clientServiceId, existingData); } List<DnsEntryData> returnData = new ArrayList<>(); for (ServiceDnsEntryData serviceData : serviceDnsData) { Service clientService = serviceData.getClientService(); Map<String, Map<String, String>> resolve = new HashMap<>(); Map<String, String> resolveCname = new HashMap<>(); Service targetService = serviceData.getTargetService(); List<ServiceInstanceData> targetInstancesData = populateTargetInstancesData( servicesTargetInstances, clientServiceIdToServiceData, targetService); for (ServiceInstanceData targetInstance : targetInstancesData) { populateResolveInfo( isVIPProvider, instanceIdToHostIpMap, serviceData, clientService, resolve, resolveCname, targetService, targetInstance); } if (servicesClientInstances.containsKey(clientService.getId())) { for (ServiceInstanceData clientInstance : servicesClientInstances.get(clientService.getId())) { DnsEntryData data = new DnsEntryData(); String clientIp = getIpAddress(clientInstance, true, instanceIdToHostIpMap); data.setSourceIpAddress(clientIp); data.setResolveServicesAndContainers(resolve); data.setInstance(clientInstance.getInstance()); data.setResolveCname(resolveCname); returnData.add(data); } } } return returnData; }
protected Map<Long, List<ServiceInstanceData>> getServiceInstancesData( long accountId, boolean client, long vnetId) { Map<Long, List<ServiceInstanceData>> returnData = new HashMap<>(); List<ServiceInstanceData> serviceData = new ArrayList<>(); if (client) { serviceData = getServiceInstanceInstancesData(accountId, true, vnetId); } else { serviceData = getServiceInstanceInstancesData(accountId, false, vnetId); } for (ServiceInstanceData data : serviceData) { List<ServiceInstanceData> existingData = returnData.get(data.getService().getId()); if (existingData == null) { existingData = new ArrayList<>(); } existingData.add(data); returnData.put(data.getService().getId(), existingData); } return returnData; }
protected String getIpAddress( ServiceInstanceData serviceInstanceData, boolean isSource, Map<Long, IpAddress> instanceIdToHostIpMap) { Nic nic = serviceInstanceData.getNic(); ServiceExposeMap exposeMap = serviceInstanceData.getExposeMap(); IpAddress ipAddr = serviceInstanceData.getIpAddress(); String ip = null; if (isSource && serviceInstanceData .getService() .getKind() .equalsIgnoreCase(ServiceDiscoveryConstants.KIND.SERVICE.name())) { if (ipAddr != null) { ip = ipAddr.getAddress(); } } else { if (ipAddr != null) { ip = ipAddr.getAddress(); } else { ip = exposeMap.getIpAddress(); } } if (nic == null || nic.getDeviceNumber().equals(0)) { return ip; } else { IpAddress hostIp = instanceIdToHostIpMap.get(nic.getInstanceId()); if (hostIp != null) { if (isSource) { return "default"; } return hostIp.getAddress(); } } return null; }