protected void createListener( Service service, Map<Integer, LoadBalancerListener> listeners, LoadBalancerListenerPort port) { LoadBalancerListener listenerObj = objectManager.findOne( LoadBalancerListener.class, LOAD_BALANCER_LISTENER.SERVICE_ID, service.getId(), LOAD_BALANCER_LISTENER.SOURCE_PORT, port.getSourcePort(), LOAD_BALANCER_LISTENER.PRIVATE_PORT, port.getPrivatePort(), LOAD_BALANCER_LISTENER.TARGET_PORT, port.getTargetPort(), LOAD_BALANCER_LISTENER.REMOVED, null, LOAD_BALANCER_LISTENER.ACCOUNT_ID, service.getAccountId()); if (listenerObj == null) { listenerObj = objectManager.create( LoadBalancerListener.class, LOAD_BALANCER_LISTENER.NAME, getLoadBalancerName(service) + "_" + port.getPrivatePort(), LOAD_BALANCER_LISTENER.ACCOUNT_ID, service.getAccountId(), LOAD_BALANCER_LISTENER.SOURCE_PORT, port.getSourcePort(), LOAD_BALANCER_LISTENER.PRIVATE_PORT, port.getPrivatePort(), LOAD_BALANCER_LISTENER.TARGET_PORT, port.getTargetPort(), LOAD_BALANCER_LISTENER.SOURCE_PROTOCOL, port.getProtocol(), LOAD_BALANCER_LISTENER.TARGET_PROTOCOL, port.getProtocol(), LoadBalancerConstants.FIELD_LB_LISTENER_ALGORITHM, "roundrobin", LOAD_BALANCER_LISTENER.ACCOUNT_ID, service.getAccountId(), LOAD_BALANCER_LISTENER.SERVICE_ID, service.getId()); } objectProcessManager.executeProcess( LoadBalancerConstants.PROCESS_LB_LISTENER_CREATE, listenerObj, null); listeners.put(listenerObj.getPrivatePort(), listenerObj); }
@SuppressWarnings("unchecked") private void createListeners( Service service, LoadBalancerConfig lbConfig, Map<String, Object> launchConfigData) { Map<Integer, LoadBalancerListener> listeners = new HashMap<>(); // 1. create listeners Map<String, Boolean> portDefs = new HashMap<>(); if (launchConfigData.get(InstanceConstants.FIELD_PORTS) != null) { for (String port : (List<String>) launchConfigData.get(InstanceConstants.FIELD_PORTS)) { portDefs.put(port, true); } } if (launchConfigData.get(InstanceConstants.FIELD_EXPOSE) != null) { for (String port : (List<String>) launchConfigData.get(InstanceConstants.FIELD_EXPOSE)) { portDefs.put(port, false); } } List<String> sslPorts = getSslPorts(launchConfigData); for (String port : portDefs.keySet()) { PortSpec spec = new PortSpec(port); String protocol; if (!port.contains("tcp")) { // default to http unless defined otherwise in the compose file protocol = "http"; } else { protocol = "tcp"; } if (listeners.containsKey(spec.getPrivatePort())) { continue; } int targetPort = spec.getPrivatePort(); Integer sourcePort = null; Integer privatePort = null; // set sourcePort only for ports defined in "ports" param // the ones defined in expose, will get translated to private listeners if (portDefs.get(port)) { if (spec.getPublicPort() == null) { sourcePort = targetPort; } else { sourcePort = spec.getPublicPort(); } privatePort = sourcePort; } else { if (spec.getPublicPort() == null) { privatePort = targetPort; } else { privatePort = spec.getPublicPort(); } } String sourceProtocol = protocol; if (sslPorts.contains(privatePort.toString())) { if (protocol.equals("tcp")) { sourceProtocol = "ssl"; } else { sourceProtocol = "https"; } } createListener( service, listeners, new LoadBalancerListenerPort(privatePort, sourcePort, sourceProtocol, targetPort)); } for (LoadBalancerListener listener : listeners.values()) { lbService.addListenerToConfig(lbConfig, listener.getId()); } }