Example #1
0
  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);
      }
    }
  }
Example #2
0
  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;
  }
Example #3
0
  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;
  }
Example #4
0
  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;
  }