Beispiel #1
0
  @Override
  public List<IpAddressToServiceIndex> getIpToIndex(Service service) {
    MultiRecordMapper<IpAddressToServiceIndex> mapper =
        new MultiRecordMapper<IpAddressToServiceIndex>() {
          @Override
          protected IpAddressToServiceIndex map(List<Object> input) {
            ServiceIndex index = (ServiceIndex) input.get(0);
            IpAddress ip = (IpAddress) input.get(1);
            Subnet subnet = (Subnet) input.get(2);
            IpAddressToServiceIndex data = new IpAddressToServiceIndex(index, ip, subnet);
            return data;
          }
        };

    ServiceIndexTable serviceIndex = mapper.add(SERVICE_INDEX);
    IpAddressTable ipAddress = mapper.add(IP_ADDRESS);
    SubnetTable subnet = mapper.add(SUBNET);
    ServiceExposeMapTable exposeMap = mapper.add(SERVICE_EXPOSE_MAP, SERVICE_EXPOSE_MAP.REMOVED);

    return create()
        .select(mapper.fields())
        .from(INSTANCE)
        .join(exposeMap)
        .on(exposeMap.INSTANCE_ID.eq(INSTANCE.ID))
        .join(NIC)
        .on(NIC.INSTANCE_ID.eq(exposeMap.INSTANCE_ID))
        .join(IP_ADDRESS_NIC_MAP)
        .on(IP_ADDRESS_NIC_MAP.NIC_ID.eq(NIC.ID))
        .join(ipAddress)
        .on(IP_ADDRESS_NIC_MAP.IP_ADDRESS_ID.eq(ipAddress.ID))
        .join(serviceIndex)
        .on(serviceIndex.ID.eq(INSTANCE.SERVICE_INDEX_ID))
        .join(subnet)
        .on(ipAddress.SUBNET_ID.eq(subnet.ID))
        .where(exposeMap.SERVICE_ID.eq(service.getId()))
        .and(exposeMap.REMOVED.isNull())
        .and(NIC.REMOVED.isNull())
        .and(ipAddress.REMOVED.isNull())
        .and(ipAddress.ADDRESS.isNotNull())
        .and(INSTANCE.REMOVED.isNull())
        .and(ipAddress.ROLE.eq(IpAddressConstants.ROLE_PRIMARY))
        .fetch()
        .map(mapper);
  }
  protected List<HostInstanceIpData> getHostContainerIpData(long accountId) {
    Network hostNtwk =
        objManager.findAny(
            Network.class,
            NETWORK.ACCOUNT_ID,
            accountId,
            NETWORK.REMOVED,
            null,
            NETWORK.KIND,
            "dockerHost");
    if (hostNtwk == null) {
      return new ArrayList<HostInstanceIpData>();
    }
    MultiRecordMapper<HostInstanceIpData> mapper =
        new MultiRecordMapper<HostInstanceIpData>() {
          @Override
          protected HostInstanceIpData map(List<Object> input) {
            HostInstanceIpData data = new HostInstanceIpData();
            data.setIpAddress((IpAddress) input.get(0));
            data.setInstanceHostMap((InstanceHostMap) input.get(1));
            return data;
          }
        };

    IpAddressTable ipAddress = mapper.add(IP_ADDRESS);
    InstanceHostMapTable instanceHostMap = mapper.add(INSTANCE_HOST_MAP);
    return create()
        .select(mapper.fields())
        .from(HOST_IP_ADDRESS_MAP)
        .join(instanceHostMap)
        .on(HOST_IP_ADDRESS_MAP.HOST_ID.eq(instanceHostMap.HOST_ID))
        .join(NIC)
        .on(NIC.INSTANCE_ID.eq(instanceHostMap.INSTANCE_ID))
        .join(ipAddress)
        .on(HOST_IP_ADDRESS_MAP.IP_ADDRESS_ID.eq(ipAddress.ID))
        .where(instanceHostMap.REMOVED.isNull())
        .and(NIC.REMOVED.isNull())
        .and(HOST_IP_ADDRESS_MAP.REMOVED.isNull())
        .and(ipAddress.REMOVED.isNull())
        .and(NIC.NETWORK_ID.eq(hostNtwk.getId()))
        .fetch()
        .map(mapper);
  }
  @Override
  public List<DnsEntryData> getInstanceLinksDnsData(final Instance instance) {
    MultiRecordMapper<DnsEntryData> mapper =
        new MultiRecordMapper<DnsEntryData>() {
          @Override
          protected DnsEntryData map(List<Object> input) {
            DnsEntryData data = new DnsEntryData();
            Map<String, Map<String, String>> resolve = new HashMap<>();
            Map<String, String> ips = new HashMap<>();
            String targetInstanceName =
                input.get(4) == null ? null : ((Instance) input.get(4)).getName();
            ips.put(((IpAddress) input.get(1)).getAddress(), targetInstanceName);
            // add all instance links
            resolve.put(((InstanceLink) input.get(0)).getLinkName(), ips);
            data.setSourceIpAddress(((IpAddress) input.get(2)).getAddress());
            data.setResolveServicesAndContainers(resolve);
            data.setInstance((Instance) input.get(3));
            return data;
          }
        };

    InstanceLinkTable instanceLink = mapper.add(INSTANCE_LINK);
    IpAddressTable targetIpAddress = mapper.add(IP_ADDRESS);
    IpAddressTable clientIpAddress = mapper.add(IP_ADDRESS);
    InstanceTable clientInstance = mapper.add(INSTANCE);
    InstanceTable targetInstance = mapper.add(INSTANCE);
    NicTable clientNic = NIC.as("client_nic");
    NicTable targetNic = NIC.as("target_nic");
    IpAddressNicMapTable clientNicIpTable = IP_ADDRESS_NIC_MAP.as("client_nic_ip");
    IpAddressNicMapTable targetNicIpTable = IP_ADDRESS_NIC_MAP.as("target_nic_ip");

    return create()
        .select(mapper.fields())
        .from(NIC)
        .join(clientNic)
        .on(NIC.VNET_ID.eq(clientNic.VNET_ID))
        .join(instanceLink)
        .on(instanceLink.INSTANCE_ID.eq(clientNic.INSTANCE_ID))
        .join(targetNic)
        .on(targetNic.INSTANCE_ID.eq(instanceLink.TARGET_INSTANCE_ID))
        .join(targetInstance)
        .on(targetNic.INSTANCE_ID.eq(targetInstance.ID))
        .join(targetNicIpTable)
        .on(targetNicIpTable.NIC_ID.eq(targetNic.ID))
        .join(targetIpAddress)
        .on(targetNicIpTable.IP_ADDRESS_ID.eq(targetIpAddress.ID))
        .join(clientNicIpTable)
        .on(clientNicIpTable.NIC_ID.eq(clientNic.ID))
        .join(clientIpAddress)
        .on(clientNicIpTable.IP_ADDRESS_ID.eq(clientIpAddress.ID))
        .join(clientInstance)
        .on(clientNic.INSTANCE_ID.eq(clientInstance.ID))
        .where(
            NIC.INSTANCE_ID
                .eq(instance.getId())
                .and(NIC.VNET_ID.isNotNull())
                .and(NIC.REMOVED.isNull())
                .and(targetIpAddress.ROLE.eq(IpAddressConstants.ROLE_PRIMARY))
                .and(targetIpAddress.REMOVED.isNull())
                .and(clientIpAddress.ROLE.eq(IpAddressConstants.ROLE_PRIMARY))
                .and(clientIpAddress.REMOVED.isNull())
                .and(targetNicIpTable.REMOVED.isNull())
                .and(clientNic.REMOVED.isNull())
                .and(targetNic.REMOVED.isNull())
                .and(instanceLink.REMOVED.isNull())
                .and(instanceLink.SERVICE_CONSUME_MAP_ID.isNull())
                .and(
                    targetInstance.STATE.in(
                        InstanceConstants.STATE_RUNNING, InstanceConstants.STATE_STARTING))
                .and(
                    targetInstance
                        .HEALTH_STATE
                        .isNull()
                        .or(
                            targetInstance.HEALTH_STATE.eq(
                                HealthcheckConstants.HEALTH_STATE_HEALTHY))))
        .fetch()
        .map(mapper);
  }